HttpSession入门学习和案例

HttpSession:


1.HttpSession概述:
*HttpSession是由JAVAWeb提供的,用来会话跟踪的类,session是服务器端的对象,保存在服务器端!
*HttpSession是Servlet三大域对象之一,所以它也有setAttribute()/getAttribute()/removeAttribute()方法。
*Httpsession底层依赖Cookie,或者是URL重写。


2.HttpSession的作用
*会话范围:会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束!
**会话:一个用户对服务器的多次连贯性请求!所谓连贯性请求,就是该用户多次请求中间没有关闭浏览器!
*服务器会为每个客户端创建一个session对象,session就好比客户在服务器端的账户,他们被服务器保存到一个Map中,这个Map被称之为sessionhu缓存
**Servlet中得到session对象:Httpsession session=request.getSession();
**JSP中得到session对象:session是JSP内置对象之一,不用创建就可以直接使用!<%session.setAttribute("xxx","xxx");%>
*session域相关的方法:
**void setAttribute(String name,Object value);
**Object getAttribute(String name);
**void removeAttribute(String name);


3.案例1:演示session中会话的多次请求中共享数据。
*AServlet:向session域中保存数据;
*BServlet:向session域中读取数据;
*演示:第一个请求:访问AServlet
  第二个请求:访问BServlet


4.案例2:演示保存用户登陆信息(精通)
*案例相关页面和Servlet
**login.jsp:登陆页面
**succ1.jsp:只有登陆成功才能访问的页面
**succ2.jsp:只有登陆成功才能访问的页面
**LoginServlet:校验用户是否登陆成功
*各页面和Servlet内容:
**login.jsp:提供登陆表单,提交表单请求到loginServlet;
**LoginServlet:获取请求参数,校验用户是否登录成功;
>失败:保存错误信息到request域中,转发到login.jsp
>成功:保存用户信息到session域中,重定向到succ1.jsp页面,显示session域中的用户信息。
**succ1.jsp:从session域中获取用户信息,如果不存在,显示“您还没有登录。”存在则显示用户信息
**succ1.jsp:从session域中获取用户信息,如果不存在,显示“您还没有登录。”存在则显示用户信息


只要用户没有关闭浏览器,session就一直存在,那么保存在session中的用户信息也就一起存在!那么用户访问succ1和succ2就会通过!


5.HttpSession原理(理解)
*request.getSession()方法:
**获取Cookie中的sessionID:
>如果sessionID不存在,创建session,把session保存起来,把新创建的sessionId保存到cookie中
>如果sessionId存在,通过sessionId查找session对象,如果没有找到,创建session,把session保存起来,把新创建的sessionId保存到cookie中
>如果sessionId存在,通过sessionId查找到了session对象,那么就不会再创建session对象了;
*如果创建了新的session,浏览器就会得到一个包含了sessionId的cookie,这个cookie的生命为-1,即只在浏览器的内存中存在,如果不关闭浏览器,那么cookie一直存在
*下次请求时,再执行request.getSession()方法时,因为可以通过cookie中的session找到session对象,所以与上一次请求使用的是同一session对象
*服务器不会马上给你创建session.在第一次获取session时,才会创建!request.getSession();
*request.getSession(false)、request.getSession(true)、request.getSession(),后面两个方法效果相同,
第一个方法:如果session缓存中不存在session,那么返回null,而不会创建session
6.HttpSession其他方法:
*String getId():获取sessionId;
*Int getMaxInactiveInterval();获取session可以的最大不活动时间(秒),默认为30分钟,当session在30分钟内没有使用,那么Tomcat会在session池中溢出session
*void invalidate();让session失效!调用这个方法会让Session失效,当session失效后,客户端再次请求,服务器会给客户端创建一个新的session
*boolean isNew();查看Session是否为新,当客户端第一次请求时,服务器为客户端创建session,但这时服务器还没有响应客户端,也就是还没有把sessionId识别到。


7.web.xml中配置session的最大不活动时间
<session-config>
<session-timeout>30</session-timeout>
</session-config>


8.URL重写(理解)
*session依赖cookie,目的是让客户端发出请求时归还sessionId,这样才能找到对应的session
*如果客户端禁用了cookie,那么就无法得到sessionId,那么session就无用了!
*也可以使用URL重写来替代cookie
**让网站所以超链接、表单中都天机一个特殊的请求参数,即sessionId
**这样服务器可以通过获取请求参数得到sessionId,从而找到session对象
*response.encodeURL(String url)
**该方法会对url进行智能重写,当请求中没有归还sessionId这个cookie,那么该方法会重写Url,否则不重写!当然url必须是指向本站的url。

猜你喜欢

转载自blog.csdn.net/qq_18725165/article/details/80379361
今日推荐