<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>