JSP状态管理 及 Cookie实例

Posted 月光诗人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSP状态管理 及 Cookie实例相关的知识,希望对你有一定的参考价值。

HTTP协议的无状态性

无状态是指,当浏览器发送请求给服务器的时候,服务器响应客户端的请求。

但是当同一个浏览器再次发送请求给了服务器的时候,服务器并不知道它就是刚才那个浏览器。

简单地说,就是服务器不回去记得你,所以就是无状态协议。

 

保存用户状态的两大机制:Session和Cookie。

 

什么是Cookie?

Cookie:中文名称“小甜饼”,是Web服务器保存在客户端的一系列文本信息。

典型应用一:判定注册用户是否已经登录网站。

典型应用二:“购物车”的处理。

 

Cookie的作用:

  对特定对象的追踪

  保存用户网页浏览记录和习惯

  简化登录

安全风险:容易泄露用户信息

 

JSP页面中创建与使用Cookie

创建Cookie对象

Cookie newCookie = new Cookie(String key, Object value);

写入Cookie对象

reponse.addCookie(newCookie);

读取Cookie对象

Cookie[] cookies = request.getCookie();

 

JSP中创建和使用Cookie的常用方法

方法名称

说明

void setMaxAge(int expiry)

设置cookie的有效期,以秒为单位

void setValue(String value)

在cookie创建后,对cookie进行赋值

String getName()

获取cookie的名称

String getValue()

获取cookie的值

int getMaxAge()

获取cookie的有效时间,以秒为单位

案例:实现记忆用户名和密码功能

登陆的时候会提示是否记住用户。

首先是用户的一个登陆界面login.jsp,登录界面中除了有用户名和密码,还有一个checkbox,用于提示用户是否记住用户名和密码。如果点选了这个checkbox,那么Cookie将会记住这个用户名和密码。

用户登录界面提交的表单将会传递到dologin.jsp页面中,这个页面负责Cookie相关的处理,并且将数据传递到user.jsp页面中。

这个页面需要通过login.jsp提交的表单判断checkbox是否勾选了,如果勾选了,那么我们需要设置username和password对应的cookie的生存时间为10天;如果没有勾选,则我们需要删除username和password对应的cookie。

user.jsp页面负责显示用户的用户名和密码。如果cookie保存了用户的用户名和密码,那么user.jsp页面中将会得到我的用户名和密码信息(by cookie)。

在user.jsp中我们只需要获取cookie中的信息就可以了。

<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>login page</title>
</head>
<body>
<%
    //request.setCharacterEncoding("utf-8");
    String username = "";
    String password = "";
    Cookie[] cookies = request.getCookies();
    if (cookies != null && cookies.length > 0)
        for (Cookie cookie : cookies)
            if (cookie.getName().equals("username"))
                username = URLDecoder.decode(cookie.getValue(), "utf-8");
            else if (cookie.getName().equals("password"))
                password = URLDecoder.decode(cookie.getValue(), "utf-8");
%>
<form name="regForm" action="dologin.jsp" method="post">
<table>
  <tr>
    <td>用户名:</td>
    <td><input type="text" name="username" value="<%=username %>"></td>
  </tr>
  <tr>
    <td>密码:</td>
    <td><input type="password" name="password" value="<%=password %>"></td>
  </tr>
  <tr>
    <td colspan="2"><input type="checkbox" name="isUseCookie" value="tenDays">十天内记住用户名和密码</td>
  </tr>
  <tr>
    <td colspan="2"><input type="submit" value="提交"></td>
  </tr>
</table>
</form>
</body>
</html>
login.jsp
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>do login page</title>
</head>
<body>
<%
    request.setCharacterEncoding("utf-8");
    String[] isUseCookie = request.getParameterValues("isUseCookie");
    if (isUseCookie != null && isUseCookie.length > 0) {
        String username = URLEncoder.encode(request.getParameter("username"), "utf-8");
        String password = URLEncoder.encode(request.getParameter("password"), "utf-8");
        Cookie usernameCookie = new Cookie("username", username);
        usernameCookie.setMaxAge(864000); // 864000 seconds == 10 days
        Cookie passwordCookie = new Cookie("password", password);
        passwordCookie.setMaxAge(864000);
        response.addCookie(usernameCookie);
        response.addCookie(passwordCookie);
    }
    else {
        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0)
            for (Cookie cookie : cookies) 
                if (cookie.getName().equals("username") || cookie.getName().equals("password")) {
                    cookie.setMaxAge(0);
                    response.addCookie(cookie);
                }
    }
    request.getRequestDispatcher("user.jsp").forward(request, response);
%>
</body>
</html>
dologin.jsp
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<%
    request.setCharacterEncoding("utf-8");
    String username = "";
    String password = "";
    Cookie[] cookies = request.getCookies();
    if (cookies != null && cookies.length > 0)
        for (Cookie cookie : cookies)
            if (cookie.getName().equals("username"))
                username = URLDecoder.decode(cookie.getValue(), "utf-8");
            else if (cookie.getName().equals("password"))
                password = URLDecoder.decode(cookie.getValue(), "utf-8");
%>
用户名:<%=username %><br>
密码:<%=password %><br>
<a href="login.jsp">返回登录页面</a>
</body>
</html>
user.jsp

效果:

   

 

session与cookie的对比

Session

Cookie

在服务器端保存用户信息

在客户端保存用户信息

Session中保存的是Object类型

Cookie中保存的是String类型

随会话的结束而将其存储的数据销毁

Cookie可以长期保存在客户端

保存重要的信息

保存不重要的用户信息

以上是关于JSP状态管理 及 Cookie实例的主要内容,如果未能解决你的问题,请参考以下文章

JSP | 基础 | JSP状态管理 | Cookie && Session

JSP-JSP状态管理

Jsp——状态管理

JSP(Java Server Page) JSP状态管理

JSP状态管理

Session和Cookie