1.redirect(重定向)和forword(转发)的区别
request.redirect() | request.getRequestDispatcher().forward(request,response) |
浏览器发请求到服务器,服务器将重定向url返回给浏览器,(http状态302),浏览器再发请求到重定向url。浏览器发了两个请求 | 浏览器发请求到服务器,forword访问应用到内部地址,得到response再返回给浏览器,浏览器发了一个请求 |
redirect之后,会清掉request,例如servlet-->redirect-->jsp,在jsp页面要想获取request参数是不可行到,因为request是null,但是可以用session | 由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用 |
浏览器中地址栏url发生变化 | 浏览器中地址栏url不变 |
2.session
session是可以跨页面的,看看在redirect(重定向)上可用就知道了
3.HttpServletRequest的常用方法
request.getParameter(String name), request.getSession(),request.setAttribute(String name, Object value)等等
4.HttpServletResponse的常用方法
response.redirect(String url),response.getWriter()等等
5.servlet怎样通过通过sessionId获取session?
Servlet2.1之后不支持SessionContext里面getSession(String id)方法。
但是,我们可以通过HttpSessionListener监听器和全局静态map自己实现一个SessionContext。
原文链接:https://blog.csdn.net/sihai12345/article/details/81098765
6.:session 的过期机制
session.maxINactiveInterval(int)可以设置时间
1小时=3600, session.maxINactiveInterval(3600)
既然有生效时间,为什么我们在浏览器上关闭页面之后感觉session就失效了?
session是存在在服务器端的,在生效时间之内,session还是存在在服务端的,只是关闭页面,打开一个新页面的时候,
页面请求会在后端生成一个新的session,新老session的id不一样,在新session上获取老session的属性,自然获取不到。
所以我们在请求中会带上sessionId(例如在cookie中存储,url中以参数形式带上)
待续学习...