当前位置 : IT培训网 > Java开发 > Java培训 > JAVA开发之HttpSession原理解析

JAVA开发之HttpSession原理解析

时间:2017-08-04 16:45:28  来源:Java培训网  作者:郑州IT培训网  已有:名学员访问该课程
在java学习过程中,总会遇到无数个令人头疼的事情,其中HttpSession便是之一,HttpSession原理你知多少?你能够熟练运用HttpSession吗?今天小编就在此给大家针对HttpSession的原理做如下分析,希望对学习java开发的人士有所帮助。

在java学习过程中,总会遇到无数个令人头疼的事情,其中HttpSession便是之一,HttpSession原理你知多少?你能够熟练运用HttpSession吗?今天小编就在此给大家针对HttpSession的原理做如下分析,希望对学习java开发的人士有所帮助。

JAVA开发之HttpSession原理解析_www.itpxw.cn

你了解HttpSession原理吗?

1、HttpSession原理分析

首先,我们知道session对象是由服务器创建,并保存在服务器端。那么服务器在什么情况下创建session对象?浏览器在访问服务器时,服务器又是通过什么来找到对应的session对象呢?带着这些问题,我们来深入了解HttpSession。

1.1服务器如何识别session对象

session是依赖于Cookie的。浏览器访问服务器后,在浏览器端查看cookie时可以发现一个名为JSESSIONID的cookie。如图1-1所示:

JAVA开发之HttpSession原理解析_www.itpxw.cn

从图1-1可以看出,这个名字为JSESSIONID的cookie的值是A147B274C704729BA01624490C898757,并且过期时间为浏览会话结束时,即表示当浏览器关闭,该cookie就死亡。其实这个cookie的值就是当前会话session的id值。

服务器每次创建的session对象,都具有一个id属性,也是唯一标识的属性。服务器创建session后,将它的id值保存在cookie中,然后发送给浏览器。浏览器在一次会话中无论访问服务器的那个资源都会带着这个cookie,服务器会根据cookie的值找到对应的session,然后从session中取出数据。下面通过一张图形象理解这个过程们,如图1-2所示:

JAVA开发之HttpSession原理解析_www.itpxw.cn

调用request.getSession()方法是从名为JSESSIONID的cookie中获取session的id值,然后拿到这个id值去服务器的session缓存中查找对应session并返回。

1.2服务器创建session对象

调用request.getSession()方法可以获得session对象,但并不是代表调用该方法服务器就会创建一个HttpSession对象,只有在一次会话中,第一次调用该方法时服务器才会创建一个session对象。

request.getSession()方法会查找请求信息中是否存在一个名为JSESSIONID的cookie,这个cookie是否存在会导致出现以下三种情况:

Cookie不存在:

Cookie不存在,说明服务器还没有为本次会话创建session对象,这时服务器会创建一个session对象,并把这个session对象保存在session缓存中,然后将session的id值保存在一个cookie中,再把这个cookie发送给浏览器。

Cookie存在,session的id值有对应的session对象:

拿到该cookie的值,即session的id值,然后根据id值去session缓存中查找到了对应的session对象,这时服务器不会重新创建session,而是将找到的session返回。

Cookie存在,session的id值没有对应的session对象:

根据session的id值在session缓存中没有找到对应的session对象,这时服务器创建新的session,并将新session的id值保存在一个cookie中,然后响应给浏览器。

以上就是服务器创建session的对象的三种情况。另外,request对象还有其他两个方法可以获取session对象,分别是:

request.getSession(false):这个方法的作用是:从cookie中取出session的id值,但是该id值没有对应的session,服务器不再创建新的session对象,返回null;

request.getSession(true):该方法的作用和request.getSession()方法的作用一样。

HttpSession对象有最大不活动时间,默认的最大不活动时间是30分钟,也就是说,如果session对象长时间不被使用,30分钟后这个session对象就会失效。

2、验证HttpSession对象创建时机

2.1创建一个web应用,Example23,在该应用下新建一个Servlet类,SessionServlet,该Servlet类的访问路径为:“/SessionServlet“,主要代码如例1-1所示:

例1-1 SessionServlet.java

public class SessionServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

          response.setContentType("text/html;charset=utf-8");

          response.getWriter().write("请查看是否有jsessionid这个cookie");

    }

}

因为要向浏览器端响应中文,因此要设置响应信息编码以防乱码。

2.2将Example23发布到Tomcat服务器中,然后启动服务器,在浏览器地址栏上输入:http://localhost:8080/Example23/SessionServlet,浏览器显示结果如图1-3所示:

JAVA开发之HttpSession原理解析_www.itpxw.cn

2.3查看浏览器中保存的cookie信息,如图1-4所示:

JAVA开发之HttpSession原理解析_www.itpxw.cn

由图1-4可知,该浏览器中并没有一个叫JSESSIONID的cookie,也就是说浏览器访问服务器端的SessionServlet,服务器并没有创建session对象。因为在SessionServlet中并没有调用request.getSession()方法。

2.4现在在浏览器端访问Example23应用的index.jsp页面,然后查看浏览器中的cookie信息,如图1-5所示:

JAVA开发之HttpSession原理解析_www.itpxw.cn

由图1-5可知,访问index.jsp页面后,浏览器中存在一个名为JSESSIONID的cookie,说明服务器创建了一个session对象。我们并没有在index.jsp页面调用request.getSession()方法,服务器为什么就创建session对象了?因为session是jsp页面的内置对象,服务器将jsp翻译成Java文件后,在该Java文件中存在一句代码,调用了getSession()方法。

2.5将浏览器中的cookie删除,然后修改SessionServlet,如下所示:

public class SessionServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

           throws ServletException, IOException {

          response.setContentType("text/html;charset=utf-8");

request.getSession();

          response.getWriter().write("请查看是否有jsessionid这个cookie");

    }

}

2.6重新启动服务器,在浏览器端访问SessionServlet ,然后查看浏览器的cookie信息,如图1-6所示:

JAVA开发之HttpSession原理解析_www.itpxw.cn

当在SessionServlet中添加request.getSession()代码,服务器就创建了session对象。

顶一下
(0)
0%
踩一下
(0)
0%

IT培训0元试听 每期开班座位有限.0元试听抢座开始! IT培训0元试听

  • 姓名 : *
  • 电话 : *
  • QQ : *
  • 留言 :
  • 验证码 : 看不清?点击更换请输入正确的验证码

在线咨询在线咨询

温馨提示 : 请保持手机畅通,咨询老师为您
提供专属一对一报名服务。

------分隔线----------------------------
------分隔线----------------------------

推荐内容