天天看点

jsp页面获取到后台的cookie(记住我)

<pre name="code" class="html">WEB-INF下index.jsp:

<%@page pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8"/>
		<title>首页</title>
	</head>
	<body>
		<!-- 在登陆时将用户名记住(cookie),在首页可以从cookie中取到它并替换XXX -->
		<!-- 1.可以写jsp脚本,通过request获取所有的cookie,然后遍历找到名为userName的
		       cookie,将其值写入到此处.
		     2.可以通过EL表达式获取cookie中. 
		                  语法:cookie.key.value -->
		<h1>欢迎你,${cookie.userName.value }</h1>
		<h2>${cookie.city.value }</h2>
	</body>
</html>
           
WEB-INF下的login.jsp:
           
<%@page pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>登陆</title>
</head>
<body>
	<form action="login.do" method="post">
		<p>
			账号:<input type="text" name="userName"
				value="${cookie.userName.value }" />
		</p>
		<p>
			密码:<input type="password" name="pwd" />
		</p>
		<p>
			记住我: <input type="checkbox" name="remember" value="yes"
				${cookie.userName!=null?"checked":"" } />
		</p>
		<p>
			<input type="submit" value="登陆" />
		</p>
	</form>
</body>
</html>
           

工作中遇到了实现登录页面记住我的功能,自己不熟悉,

晚上回去总结页面获得cookie的方法有哪些,

后台程序:

package web;

import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ActionServlet extends HttpServlet {
    /*
	 * 打开登陆页面:/cookieCase/login/toLogin.do
	 * 登陆:/cookieCase/login/login.do
	 * 打开首页:/cookieCase/main/toIndex.do
	 * 登录页:/WEB-INF/login.jsp
	 * 首页:/WEB-INF/index.jsp
	 * 
	 */
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		res.setContentType("text/html;charset=utf-8");//设置编码
		String uri = req.getRequestURI();
		uri = uri.replace(req.getContextPath(), "");//截取uri,项目名称替换为空
		if(uri.equals("/login/toLogin.do")){
			//打开登陆页面
			toLogin(req,res);
		}else if(uri.equals("/login/login.do")){
			//登陆
			login(req,res);
		}else if(uri.equals("/main/toIndex.do")){
			//进入首页
			toIndex(req,res);
		}
				
	}
	/**打开登录页面*/
	protected void toLogin(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		String url ="../WEB-INF/login.jsp";
		req.getRequestDispatcher(url).forward(req, res);
		
	}
	/**登陆*/
	protected void login(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		String userName = req.getParameter("userName");
		String rmb = req.getParameter("remember");
		//验证:假设验证通过
		//记住我
		if("yes".equals(rmb)){
			//使用cookie记录账号和记住我,便于后续请求中的一些特殊业务
			//首页显示账号
			//再次打开登陆页时有默认账号;
			//默认只对当前路径下的资源有效:
			//cookieCase/login/
			//可以手动设置其生效的路径
			Cookie c = new Cookie("userName",userName);
			c.setPath(req.getContextPath());
			/*
			 * 默认情况下,cookie存到浏览器内容中,浏览器关闭时则cookie消失,
			 * 若希望浏览器关闭时cookie不消失,需要给这个cookie设置过期时间,那么cookie在关闭
			 * 浏览器后还能存活这么长时间
			 * cookie.setMaxAge();单位为秒
			 */
			c.setMaxAge(3600);
			//将此cookie发送给客户端保存
			res.addCookie(c);
			//记住我可以通过userName判断出来,不用特意的记录它
			
		}
           
<span style="white-space:pre">		Cookie c2 = new Cookie("city","BeiJing");
<span style="white-space:pre">		</span>c2.setPath(req.getContextPath());
<span style="white-space:pre">		</span>c2.setMaxAge(3600);
<span style="white-space:pre">		</span>res.addCookie(c2);
<span style="white-space:pre">		</span>/*
<span style="white-space:pre">		</span> * 如果输入中文,cookie需要编码解码
<span style="white-space:pre">		</span> * 编码:URLEncoder.encode()
<span style="white-space:pre">		</span> */
<span style="white-space:pre">		</span>Cookie c3 = new Cookie("home",URLEncoder.encode("上海", "utf-8"));
<span style="white-space:pre">		</span>c3.setPath(req.getContextPath());
<span style="white-space:pre">		</span>c3.setMaxAge(3600);
<span style="white-space:pre">		</span>res.addCookie(c3);
<span style="white-space:pre">		</span>/*
<span style="white-space:pre">		</span> * 重定向到首页
<span style="white-space:pre">		</span> * 当前:/JSP03/login/login.do
<span style="white-space:pre">		</span> * 目标:/JSP03/main/toIndex.do
<span style="white-space:pre">		</span> */
<span style="white-space:pre">		</span>res.sendRedirect("../main/toIndex.do");</span>
           
<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">	}</span>
           
/**进入首页*/
	protected void toIndex(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		//获取浏览器传递过来的cookie,并打印出他们的内容
		Cookie[] cs = req.getCookies();
		for(Cookie c:cs){
			//修改cookie
			if(c.getName().equals("city")){
				c.setValue("Shenzhen");//通过cookie.setValue()修改cookie中的内容
				res.addCookie(c);
			}
			if(c.getName().equals("home")){
				//解码:URLDecoder.decode()
				System.out.println(URLDecoder.decode(c.getValue(),"utf-8"));
			}else{
				System.out.println(c.getName()+":"+c.getValue());
			}
		}
		String url ="../WEB-INF/index.jsp";
		req.getRequestDispatcher(url).forward(req, res);//转发
	}
}
           

org.springframework.web.util.WebUtils

该方法需要引入上述类

1.Cookie cookie = WebUtils.getCookie(request,"参数名");

2.Cookie[] cookies = request.getCookies();

3.页面可以直接获得cookie的value;

下面写例子记忆一下,我用的是servlet

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>cookieCase</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>action</servlet-name>
  	<servlet-class>web.ActionServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>action</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>


</web-app>