• 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可以长期保存在客户端

    保存重要的信息

    保存不重要的用户信息

  • 相关阅读:
    文件IO流
    ArrayList LinkedList vector的区别
    双例集合Map,HashMap常用方法及源码分析
    单例集合List和Set
    集合与数组
    自然排序与定制排序
    String StringBuffer StringBuilder
    String与其他结构的转化
    线程的通信
    死锁,同步锁
  • 原文地址:https://www.cnblogs.com/moonlightpoet/p/5601661.html
Copyright © 2020-2023  润新知