Servlet和JSP学习总结(八)--Session

Session是另一种记录客户状态的机制,与Cookie将客户状态保存在客户端浏览器中的形式不同,Session将客户状态保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。客户端浏览器再次访问时只需要从该Session中查找该客户的状态即可。

HttpSession接口是Java对Session机制的实现规范,它位于javax.servlet.http包中。
HttpSession对象在用户第一次访问网站的时候自动被创建,你可以通过调用HttpServletRequest的getSession方法获取该对象。getSession有两个重载方法:

HttpSession getSession()
HttpSession getSession(boolean create)

没有参数的getSession方法会返回当前的HttpSession,若当前没有,则创建一个返回。getSession(false)返回当前HttpSession,如当前会话不存在,则返回null。getSession(true)与没有参数的getSession方法一致,也是返回当前HttpSession,若当前没有,则创建一个。

可以通过HttpSession的setAttribute方法将值放入HttpSession,该方法签名如下:

void setAttribute(String name, Object value)

调用setAttribute方法时,若传入的name参数此前已经使用过,则会用新值覆盖旧值。

通过调用HttpSession的getAttribute方法可以取回之前放入的对象,该方法的签名如下:

Object getAttribute(String name)

注意,所有保存在HttpSession的数据不会被发送到客户端。

可以通过调用HttpSession的getId方法来读取Session的ID。Servlet容器为每个HttpSession生成唯一的标识,并为这个标识创建一个名为JSESSIONID的cookie。在后续的请求中,浏览器会将标识提交给服务端,这样服务器就可以识别该请求是由哪个用户发起的。

下面是几种使Session失效的方法:

  • 在项目的部署描述文件中进行设置:
<session-config>
    <session-timeout>1</session-timeout>
</session-config>

该Session会在最后一次访问一分钟后失效

  • 直接在应用服务器中设置。如果是tomcat,可以在tomcat目录下conf/web.xml中找到<session-config>元素,tomcat默认设置是30分钟,只要修改这个值即可。
  • 对HttpSession调用setMaxInactiveInterval方法来设定其超时时间:
void setMaxInactiveInterval(int seconds)
  • 对HttpSession调用invalidate方法强制使会话过期。
    下面我们编写程序来创建一个Session:
package com.mc.hello;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet(urlPatterns = { "/mysession" })
public class SessionDemoServlet extends HttpServlet {

    private static final long serialVersionUID = 36L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        HttpSession session = request.getSession();
        session.setAttribute("name", "maconn");
        Cookie[] cookies = request.getCookies();
        if(cookies != null) {
            for (Cookie cookie : cookies) {
                out.print(cookie.getName() + " = " + session.getId());
            }
        }
        else
            out.print("no cookie");
    }
}

第一次打开页面,由于之前此时还不存在Session,也就不存在JSESSIONID对应的cookie,此时网页上会显示"no cookie"。再次刷新页面,就会看到Session对应的JSESSIONID。

下一篇:Servlet和JSP学习总结(九)--JSP概述

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转自 :http://blog.csdn.net/taoff/articles/1921009.aspx 一、术语...
    stone_yao阅读 11,379评论 0 31
  • Session机制 除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session...
    薛晨阅读 11,866评论 4 34
  • 一 servlet概述 狭义的Servlet指javax.servlet包中的一个接口,而广义的Servlet则是...
    静慎独阅读 3,474评论 0 0
  • NO.38 人类认知的局限: ①感官的局限。 ②凡是作为论据的东西,恰是应该证明的东西,这就立刻陷入永劫不复的循环...
    思维工具箱阅读 1,423评论 0 0
  • 灵魂有香气的,在时光中胜开的女子--筱懿姐 4.9沈阳歌德书店15:00 筱懿姐刚出来那一刻好激动,终于见到了不曾...
    赵自律阅读 968评论 0 0