Java后台之路(11)-HttpSession

HttpSession简介

与客户端技术不同,HttpSession是服务端技术。在Web开发中,服务器为每个浏览器(客户端)创建一个特有的HttpSession对象。我们可以将数据(不仅仅是字符串还可以是对象)存入到HttpSession对象中,当用户通过浏览器访问当前应用下的其它程序时,其它程序仍然可以从HttpSession中取出数据。

HttpSession由服务端创建,我们在Servlet中可以通过request.getSession()得到该对象。

在同一个会话下(即同一浏览器中)多个Servlet可共享数据,比如我们在登录后可以将User数据存入到服务端为其创造的HttpSession中,我们在付款页面可以直接从HttpSession中去获取User以判断用户当前是否是登录状态的。

服务器重启不会使HttpSession中的数据丢失。


HttpSession常用方法

列举它的常用方法:

  • setAttribute(),向HttpSession中保存数据;
  • getAttribute(),从HttpSession中获取数据;
  • removeAttribute(),从HttpSession中移除数据;
  • getId(),返回HttpSession的唯一标识符;
  • setMaxInactiveInterval(),设置session的存活时间(单位是秒),默认为30分钟;
  • invalidate(),销毁HttpSession。

HttpSession举个例子

我们来写个伪代码来在结账时判断用户是否已经登录了。

登录LoginServlet,结账PayServlet,用户User。

先贴代码:

LoginServlet.class

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    HttpSession session = request.getSession(true);
    final String name =request.getParameter("name");
    final String password = request.getParameter("password");
    final User user = new User(name, password);
    session.setAttribute(LOGIN_SESSION, user);
    System.out.println("保存Session成功!");
}

PaySession.class

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    HttpSession session = request.getSession();
    Object obj = session.getAttribute(LoginServlet.LOGIN_SESSION);
    if( obj==null ){
        System.out.println("请先登录!");
        return;
    }
    if( obj instanceof User ){
        User user = (User) obj;
        System.out.println("已经登录了");
        System.out.println(user.getName() + ":" + user.getPassword() );
    }
}

我们先描述一下需求:

1.直接调用PayServlet,看看是否能支付成功(应该提醒未登录);
2.调用LoginServlet登录,设置用户名和密码;
3.再调用PayServlet,这次应该能登陆且打印登录信息;

我们来看一看实际情况

// 1. 在浏览器中打开链接
http://localhost:8080/MyHttpSession/servlet/PayServlet
发现提示"请先登录!",和预期一致

// 2. 再登录,在浏览器打开链接
http://localhost:8080/MyHttpSession/servlet/LoginServlet?name=qdl&password=qi123456
发现提示"保存Session成功!"

// 3. 再次付款打开链接
http://localhost:8080/MyHttpSession/servlet/PayServlet
发现提示
"已经登录了"
"qdl:qi123456"
和预期一致

// 4.我们销毁一下HttpSession然后将其存活时间改为10s
执行步骤1-2-3,然后重复执行3,发现刚开始提示已经登录,不一会变成了请先登录的提示了,这时说明HttpSession失效了
另外虽然我们设置的失效时间为10s,但是实际测试时感觉时间有些许偏差。

注意

我们不仅仅可以调用session.setMaxInactiveInterval()方法来设置session的失效时间,还可以在web.xml中设置,如下:

<!-- 以秒为单位 -->
<session-config>
    <session-timeout>10</session-timeout>
</session-config>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值