Servlet入门介绍第五章——Servlet中的Session、Cookie

我们可以用创建一个会话(session)的形式实现不同组件的信息共享。
接下来开始介绍Servlet中的另外重要知识点——会话(session)。

先看API文档的介绍
这里写图片描述

总结为:
1、Session可实现多个页面的信息共享,具体表现是可以多次访问同一个网页,或是一个web应用的多个网页
2、存储用户状态信息
3、保留指定时间,但指定时间过后,会话将失效
4、Servlet容器为每一个HttpSession对象分配唯一标识——JSESSIONID

知道了会话(Session)有这些特点后做个测试,就拿之前重定向的例子测试。

Servlet入门介绍第五章——Servlet中的Session、Cookie_第1张图片

index.jsp脚本代码做个修改:
Servlet入门介绍第五章——Servlet中的Session、Cookie_第2张图片

HttpSession对象和HttpServletRequest对象都有setAttribute()方法和getAttribute()方法,只是作用域不同。

浏览器地址栏输入:
http://localhost:8080/Servlet16_10_3/ForwardServlet?username=张三

结果:
这里写图片描述

为了验证是否可跨多页面共享信息,在WebRoot目录下新建一个session.jsp

Servlet入门介绍第五章——Servlet中的Session、Cookie_第3张图片

Servlet入门介绍第五章——Servlet中的Session、Cookie_第4张图片

在浏览器地址栏输入:
http://localhost:8080/Servlet16_10_3/session.jsp

Servlet入门介绍第五章——Servlet中的Session、Cookie_第5张图片

因此可以肯定的是session可以实现跨多页面获取session范围内的信息。

接下来来了解session的生命周期:
1、开始新的会话,即Servlet容器创建一个新的HttpSession对象。
(1)、一个浏览器进程第一次访问Web应用中支持会话的任意一个网页
(2)、当浏览器进程与Web应用的一次会话应经被销毁后,再次访问Web应用中支持会话的任意一个网页。
2、会话销毁,即Servlet容器使HttpSession对象结束生命周期,且存放在会话范围内的共享数据也都被销毁:
(1)、服务器端执行httpSession对象的invalidate()方法;
(2)、会话过期
提示下浏览器关闭后,并不表示session被销毁了,它依然存在,只是当重写打开浏览器访问相同网页时,Servlet容器重新创建一个JSESSIONID,而标识之前会话信息的JSESSIONID已经随浏览器关闭而在内存中被释放,因而获取不到之前的会话信息。

Session是跟踪客户状态的一种常用方法,现在在介绍另外一种跟踪客户状态的技术——Cookie。
Servlet入门介绍第五章——Servlet中的Session、Cookie_第6张图片

总结为:
Cookie是在客户端访问Web服务器时,服务器在客户端硬盘上存放的信息。

Cookie的应用方法:
写cookie:
Cookie theCookie=new Cookie(“username”,”Tom”);
response.addCookie(theCookie);

读cookie:
Cookie cookies[]=request.getCookies();

Cookie的有效期:
当Servlet向客户端写Cookie时,可以通过Cookie类的setMaxAge(int expiry)方法来设置Cookie的有效期,单位:秒
(1)、如果expiry大于零,就指示浏览器在客户端硬盘上保存Cookie的时间为expiry秒;
(2)、如果expiry等于零,就指示浏览器删除当前Cookie;
(3)、如果expiry小于零,就指示浏览器不要把Cookie保存到客户端硬盘,Cookie仅仅存在于当前的浏览器进程中,当浏览器进程关闭,Cookie也就消失。Cookie默认有效期为-1.

做个例子测试Cookie
定义一个CookieServlet,具体代码如下:

package com.java.web.servlet;

import java.io.IOException;
import java.io.PrintWriter;
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 CookieServlet extends HttpServlet{


    private static final long serialVersionUID = 3751236036982540499L;

    int count1 = 0;
    int count2 = 0;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        Cookie cookie = new Cookie("name" + count1++, "value" + count2++);
        //设置Cookie的有效期
        cookie.setMaxAge(10);
        //向客户端发送一个Cookie
        resp.addCookie(cookie);

        PrintWriter ps = resp.getWriter();
        //获取客户端的Cookie
        Cookie[] cookies = req.getCookies();
        if (cookies == null) {
            return;
        }
        for (Cookie cookie2 : cookies) {
            ps.write("");
            ps.write("CookieName:" + cookie2.getName());
            ps.write("
"
); ps.write("CookieValue:" + cookie2.getValue()); ps.write("
"
); ps.write(""); } } }

配置信息:

<servlet>
        <servlet-name>CookieServletservlet-name>
        <servlet-class>com.java.web.servlet.CookieServletservlet-class>
 servlet>

 <servlet-mapping>
        <servlet-name>CookieServletservlet-name>
        <url-pattern>/Cookie.htmlurl-pattern>
servlet-mapping>

浏览器地址栏输入:
http://localhost:8080/Servlet16_10_3/Cookie.html
测试结果:

Servlet入门介绍第五章——Servlet中的Session、Cookie_第7张图片

因为设置了Cookie的有效期,所以过一段时间刷新,之前的Cookie会销毁。

至此Servlet基本介绍完。

你可能感兴趣的:(Servlet入门介绍第五章——Servlet中的Session、Cookie)