关于Session和Cookie 这里就不细说了,直接上代码说明网站中的"记住我"checkbox的应用
第一个Servlet
public class cookieServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); request.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); String name = (String) request.getSession().getAttribute("userName"); if(name!=null&&!name.trim().equals("")){ out.print("欢迎你"+name); }else{ out.print("请登陆"); } System.out.println(request.getSession().getId()+"------get请求"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String checked = request.getParameter("me"); if(checked!=null){ Cookie ck = new Cookie("JSESSIONID",request.getSession().getId()) ck.setMaxAge(60*30); ck.setPath("/"); response.addCookie(ck); } String userName = request.getParameter("userName"); if(userName!=null&&!userName.trim().equals("")){ request.getSession().setAttribute("userName", userName); } //doGet(request, response); //禁用cookie url重写 //form 请求 但一共是两次请求 dopost中的session和doget中的session不是同 一个了已经 //response.sendRedirect(request.getContextPath()+"/cookieServlet"); System.out.println(request.getSession().getId()+"------post请求"); //url 重写 String url = response.encodeRedirectURL(request.getContextPath()+"/cookie Servlet"); response.sendRedirect(url); } }
第二个Servlet
package com.test.cookie; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestCookieServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String name = (String) request.getSession().getAttribute("userName"); if(name!=null&&!name.trim().equals("")){ out.print("你是"+name+"-----TestCookieServlet"); }else{ out.print("你是没有名字-----TestCookieServlet"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); } }
一个jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP ‘index.jsp‘ starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <!-- <form action="cookieServlet" method="post"> --> <!--url重写 --> <form action="<%=response.encodeURL("cookieServlet")%>" method="post"> <input type="text" name="userName"><br/> <input type="checkbox" name="me" value="1">记住我 <input type="submit"> </form> <br/> <!-- <a href="cookieServlet"/>GOGO</a> --> <!-- url 重写 --> <a href="<%=response.encodeURL("cookieServlet")%>">GOGO</a> </body> </html>
说明
1 正常情况下浏览器cookie是开启的,但是万一被禁用这里暂时使用了url重写 的方式解决,当然还有其它的方式。
2 个人测试的时候(火狐)即使禁用了cookie但还是可以正常访问,后来通过 firebug发现,cookie选项上选择禁用localhost的cookie就可以了。
3 这里关于cookie的配置,api就可以了都是有的而且解释很清楚。
本文出自 “探究web框架” 博客,请务必保留此出处http://itfei.blog.51cto.com/5513589/1747906
原文:http://itfei.blog.51cto.com/5513589/1747906