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