Java Web学习:状态管理

一、Cookie

Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
组成:Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。

1、Cookie作用

会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
个性化设置(如用户自定义设置、主题等)
浏览器行为跟踪(如跟踪分析用户行为等)

2、Cookie安全性能

使用Cookie,容易信息泄露。

3、Cookie语法

(1)导入包
import=“javax.servlet.http.Cookie”
(2)创建Cookie
Cookie newCookie=new Cookie(“parameter”, “value”);
parameter:用于代表cookie的名称(key)
value:用于表示当前key名称所对应的值
(3)写入Cookie
response.addCookie(newCookie)

二、案例演示:利用Cookie保存登录用户名信息

(1)创建Web项目CookieDemo

在这里插入图片描述
采用自动方式创建的Web项目,需要在两处做一些修改:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)修改web目录里的首页文件index.jsp

在这里插入图片描述

(3)在web目录里创建登录页面login.jsp

在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
<h3 style="text-align: center">用户登录</h3>
<form action="do_login.jsp" method="post">
    <table border="1" cellpadding="10" style="margin: 0px auto">
        <tr>
            <td align="center">用户名</td>
            <td><input id="uname" type="text" name="username"/></td>
        </tr>
        <tr>
            <td align="center">&nbsp;</td>
            <td><input id="upwd" type="password" name="password"/></td>
        </tr>
        <tr align="center">
            <td colspan="2">
                <input id="saveuname" type="checkbox" name="save" value="记住用户名"/>记住用户名
                <input id="saveupwd" type="checkbox" name="save" value="记住密码" onclick="setchkuname();"/>记住密码
            </td>
        </tr>
        <tr/>
        <tr align="center">
            <td colspan="2">
                <input type="submit" value="登录"/>
                <input type="reset" value="重置"/>
            </td>
        <tr/>
    </table>
</form>
<%
    String uname = "";
    String upwd = "";
    String saveuname = "";
    String saveupwd = "";
    Cookie[] cookies = request.getCookies();
    for (Cookie cookie: cookies) {
        if (cookie.getName().equals("uname")) {
            uname = cookie.getValue();
        }
        if (cookie.getName().equals("upwd")) {
            upwd = cookie.getValue();
        }
        if (cookie.getName().equals("saveuname")) {
            saveuname = cookie.getValue();
        }
        if (cookie.getName().equals("saveupwd")) {
            saveupwd = cookie.getValue();
        }
    }
%>
<script type="text/javascript">
    var chkSaveUname = document.getElementById("saveuname");
    var saveuname = "<%= saveuname %>";
    if (saveuname == "yes") {
        chkSaveUname.checked = true;
    }

    var chkSaveUpwd = document.getElementById("saveupwd");
    var saveupwd = "<%= saveupwd %>";
    if (saveupwd == "yes") {
        chkSaveUpwd.checked = true;
    }

    var txtUname = document.getElementById("uname");
    var txtUpwd = document.getElementById("upwd");

    if (chkSaveUname.checked) {
        txtUname.value = "<%= new String(uname.getBytes("iso-8859-1"), "utf-8") %>";
    }
    if (chkSaveUpwd.checked) {
        txtUpwd.value = "<%= upwd %>";
    }

    /**
     * 选中【记住密码】复选框,一定会选中【记住用户名】复选框
     */
    function setchkuname() {
        if (chkSaveUpwd.checked) {
            chkSaveUname.checked = true;
        }
    }

</script>
</body>
</html>

(4)在web目录里创建登录处理页面do_login.jsp

在这里插入图片描述

<%
    // 获取登录表单的数据
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String[] choice = request.getParameterValues("save");
    // 判断用户是否登录成功
    if (username.equals("admin") && password.equals("admin")) {
        // 创建cookie对象,写入客户端
        Cookie uname = new Cookie("uname", username);
        Cookie upwd = new Cookie("upwd", password);
        Cookie saveuname = new Cookie("saveuname", "no");
        Cookie saveupwd = new Cookie("saveupwd", "no");
        if (choice != null) {
            if (choice.length == 2) {
                saveuname.setValue("yes");
                saveupwd.setValue("yes");
            } else {
                saveuname.setValue("yes");
            }
        }
        response.addCookie(uname);
        response.addCookie(upwd);
        response.addCookie(saveuname);
        response.addCookie(saveupwd);
        // 采用重定向,跳转到登录成功页面
        response.sendRedirect("success.jsp");
    } else {
        // 采用重定向,跳转到登录页面
        response.sendRedirect("login.jsp");
    }
%>
(5)在web目录里创建登录成功页面success.jsp

在这里插入图片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功</title>
</head>
<body>
    <%
        String uname = "";
        Cookie[] cookies = request.getCookies();
        for(Cookie cookie:cookies){
            if(cookie.getName().equals("uname")){
                uname = cookie.getValue();
            }
        }
    %>
    <h3><%= new String(uname.getBytes("ISO8859-1"),"utf-8")%>,登录成功!</h3>
</body>
</html>

(6)启动tomcat服务器,查看运行效果

在这里插入图片描述

二、session对象

1、什么是会话
一个会话就是浏览器与服务器之间的一次通话,包含浏览器与服务器之间的多次请求、响应过程。session对象用来存储有关用户会话的所有信息。
2、利用会话机制实现访问控制
访问控制实例:下载电子书时,系统会提示用户登录网站。
3、session与窗口的关系
每个session对象都与浏览器一一对应,重新开启一个浏览器,相当于重新创建一个session对象;通过超链接打开的新窗口,新窗口的session与其父窗口的session相同。

4、案例演示:使用session实现访问控制

(1)创建Web项目SessionDemo
在这里插入图片描述
(2)在src目录里创建net.jl.bean包,在包里创建User实体类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值