Servlet入门3
Servlet入门3
会话
什么是 Session ?
"会话控制",Session 对象存储特定用户会话所需要的属性及配置信息。这样,用户在应用程序的 Web 页面之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个会话中一直存在下去,当用户请求来自应用程序的 Web 页面时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或者被放弃后,服务器将终止该对话。注意:会话状态只在支持 Cookie 的浏览器中保存。
通过 getSession() 函数来获取 Session,如果获取不到就创建一个新的
第一次发送请求,仅在 Response Head 会显示 Set Cookies:id
在 Request Head 中没有显示
第二次发送请求,就不在 Response Head 中显示 Set Cookie:id
在 Request Head 中有显示
Response Head 中的 Set Cookie 就是创建新 id 的标志
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取Session,如果获取不到,就创建一个新的
HttpSession session = request.getSession();
System.out.println("Session ID: " + session.getId());
}
会话跟踪技术
客户端第一次发请求给服务器,服务器获取 session ,获取不到,则新建,然后响应给客户端
下次客户端给服务器发送请求时,救会把 session ID 带给服务器,服务器就能够获取到
服务器就判断本次请求和某次请求是同一客户端,从而能够区分开客户端
常用API:
request.getSession() -> 获取当前对话,没有就创建一个会话
request.getSession(true) -> 效果和不带参数相同
request.getSession(false) -> 获取当前会话,没有则返回null,不会新建对话
session.getId() -> 获取 id (全球唯一码)
session.isNew() -> 判断当前session是否是新的
session.getMaxInactiveInterval() -> session 的非激活间隔时长 默认1800s ,超时则会会话超时,重新登录
session.inactive() -> 强制性让会话失效
等……
Session 保存作用域
session.setAttribute( key, value );
//表示相当前的 session 保存作用域,保存一个数据 value ,对应 key 值
session.getAttribute( key );
//从当前session保存作用域获取指定的key,可以获取对应的 value 值
Session 保存作用域是与具体某一个 Session 对应的
常用的API:
void session.setAttribute( key, value )
Object session.getAttribute( key )
void removeAttribute( key )
服务器内部转发以及客户端重定向
服务器端转发
request.getRequestDispatcher("……").forward( request,response );
一次响应的过程,对于客户而言,内部经过转发的次数,客户端未知
地址栏没有变化
客户端重定向
response.sendRedirect("……");
两次请求响应的过程,客户端一定知道请求 URL 有变化
地址栏有变化
302代码,表示客户端重定向
总结
服务器内部转发:客户端给组件1发送请求,执行 request.getRequestDispatcher( "Demo07" ).forward( request,response );
作用是把请求转给 demo07,然后 demo07 执行后响应给客户端
客户端重定向:客户端给服务器端组件1发送请求,执行 response.senfRedirevt("Demo07");
服务器会立即给客户端一个响应:请你立即给 Demo07 发请求
然后客户端会立即个 Demo07 发送请求