JavaEE入门之Servlet——HttpSession对象及Servlet注解开发

HttpSession对象

        用来解决Http无状态的技术。数据存储在服务器中。

特点

  • Session将数据保存在服务器端
  • HttpSession使用Key-Value的结构存储数据,Key是字符串类型,Value是Object类型
  • HttpSession存储数据相对于Cookie来说是无大小限制的
  • HttpSession存储数据比较安全,因为数据存储在服务器中,用户不可见

介绍

  1. 一个浏览器在服务器中只会创建一个Session对象。不同用户(浏览器)的Session对象之间是互相独立的。
  2. 服务器中会创建Session对象,创建完成后会将Session对象的Id(JSESSIONID)以Cookie的形式保存在客户端(浏览器)。存储JSESSIONID的Cookie不需要手动创建,Session对象创建完成,Tomcat服务器会自动创建Cookie, 将JESSIONID存储在Cookie中响应回浏览器。
  3. 用户再次发请求时,会携带该Cookie,也就是JSESSIONID到服务器,服务器会根据该Id找到用户的Session对象。
  4. 当用户JSESSIONID的Cookie丢失或者服务器中存储的Session对象被销毁,服务器接收到用户的请求后,如果找不到对应的Session对象,会重新创建,并将新的JSESSIONID以Cookie的形式保存到浏览器中。
  5. Cookie默认的有效期为一次会话(浏览器不能关闭),浏览器关闭,Cookie即失效。
  6. Session对象在Tomcat服务器的默认有效期为30分钟。

HttpSession的使用

        HttpSession对象的创建是通过request.getSession()方法来创建的。客户端浏览器在请求服务端资源时,如果在请求中没有jsessionid,getSession()方法将会为这个客户端浏览器创建一个新的HttpSession对象,并为这个HttpSession对象生成一个jsessionid,在响应中通过状态Cookie写回给客户端浏览器、如果在请求中包含了jsessionid,getSession()方法则根据这个ID返回与这个客户端浏览器对应的HttpSession对象。

        getSession()方法还有一个重载方法getSession(true|false)。当参数为true时与getSession()方法作用相同。当参数为false时则只去根据jsessionid查找是否有与这个客户端浏览器对应的HttpSession,如果有则返回,如果没有jsessionid则不会创建新的HttpSession对象。

HttpSession的创建

HttpSession session = req.getSession();

存在两种情况:

  1. 如果请求的Cookie中携带了JSESSIONID,则根据JSESSIONID找对应的Session对象

    1. 找到, 返回该Session。

    2. 没有找到, 创建新的Session对象, 会将JSESSIONID存储在Cookie中响应回浏览器。

  2. 如果请求中没有携带JSESSIONID,则会创建一个Session对象, 会将JSESSIONID存储在Cookie中响应回浏览器

HttpSession存储数据

session.setAttribute("自定义名", 要存储的数据);

HttpSession获取数据

session.getAttribute("与存储数据的自定义名相同");

HttpSession销毁

HttpSession销毁有两种方式:

  1.当HttpSession对象存在达到设置的存活时间后会销毁,默认为30分钟,时间的计算方式是根据最后一次请求时间作为起始时间来计算。

  1. Tomcat服务器的conf/web.xml文件中配置HttpSession的超时时间,这个文件是所有项目web.xml的父文件,不建议修改。

  2. 可以修改项目的web.xml中的HttpSession的超时时间。该时间对整个web项目中的所有HttpSession对象有效。

<session-config>   
    <!--设置Session的超时时间,单位是分钟-->    
    <session-timeout>10</session-timeout>
</session-config>

2.调用HttpSession对象中的invalidate()方法销毁Session对象。

注意:

        客户端关闭浏览器后,再次打开浏览器发起请求。此时因为存储JSESSIONID的Cookie随会话关闭销毁,服务器会重新创建Session对象。服务器端原有的Session对象不会立刻销毁,存储的数据也存在Session对象中,当超过了最大存活时间后就会销毁。

 Session中的相关方法

  HttpSession session = req.getSession();
  String id = session.getId();//获取JSESSIONID
  System.out.println(id);
  long creationTime = session.getCreationTime();//获取创建时间
  Date date = new Date(creationTime);
  System.out.println(date.toLocaleString());
  long lastAccessedTime = session.getLastAccessedTime();//获取最后一次访问时间
  System.out.println(new Date(lastAccessedTime).toLocaleString());
  session.setMaxInactiveInterval(10);//设置最大非活动时间
  int maxInactiveInterval = session.getMaxInactiveInterval();//获取最大非活动时间
  System.out.println(maxInactiveInterval);
  session.invalidate();//销毁session对象

 HttpSession和Cookie的区别

1.Cookie将数据存储在客户端,而HttpSession将数据存储在服务器

2.Cookie不安全,而HttpSession相对来说就比较安全

3.单个Cookie能存储的数据有大小限制(大约4kb),而且很多浏览器都会限制一个域名保       存的Cookie的数量。

HttpSession没有存储容量及数量的限制,随着Session中存储的内容增多,会比较占用服务器内存,但是一般Session不存放业务数据。

4.Cookie的数据都是以字符串的形式保存的。Session中可以保存对象。

5.Cookie应用场景 如:要进行记住我的操作,最近浏览的商品,网页皮肤等操作。

  Session应用场景 如:保留用户的登录信息,保留错误信息,购物车等操作。

  HttpSession和Cookie的关系

        Session依赖于Cookie

基于注解式开发Servlet

        相对于在web.xml中配置Servlet,使用@WebServlet注解完成Servlet的配置更为方便快捷。

@WebServlet(name = "first", value = "/first", loadOnStartup = 1, initParams = {@WebInitParam(name = "test", value = "aaa")}, description = "测试servlet")

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值