Servlet续、session、cookie
重定向:
response.sendRedirect("/oa/dept/list");
转发与重定向?
转发为一次请求,浏览器最终地址栏的地址和用户输入访问的一致。而重定向为两次请求,浏览器最终地址显示的为重定向后的地址。
如果在上一个Servlet当中向request域当中绑定了数据,希望从下一个Servlet当中把request域里面的数据取出来,使用转发机制。
剩下所有的请求均使用重定向。(重定向使用较多)并且,删除,修改,保存等操作最好使用重定向以避免刷新时带来的问题。
Servlet注解
@WebServlet注解可以在类上直接使用,从而省略了在xml文件中配置的一些繁琐操作。
使用格式:@注解名称(属性名=属性值, 属性名=属性值, 属性名=属性值....)
session
什么是一次请求:用户在浏览器上点击了一下,然后到页面停下来,可以粗略认为是一次请求。请求对应的服务器端的java对象是:request。
用户打开浏览器,进行一系列操作,然后最终将浏览器关闭,这个整个过程叫做:一次会话,所以一次会话包括多次请求。会话在服务器端也有一个对应的java对象,这个java对象叫做:session
session对象最主要的作用是:保存会话状态。(用户登录成功了,这是一种登录成功的状态,你怎么把登录成功的状态一直保存下来呢?使用session对象可以保留会话状态。因为HTTP是无状态的协议,请求的一瞬间是连接的,但是结束后马上断开)
session的原理
HttpSession session=req.getSession();
JSESSIONID=xxxxxx 这个是以Cookie的形式保存在浏览器的内存中的。浏览器只要关闭。这个cookie就没有了
session列表是一个Map,map的key是sessionid,map的value是session对象。
用户第一次请求,服务器生成session对象,同时生成id,将id发送给浏览器。用户第二次请求,自动将浏览器内存中的id发送给服务器,服务器根据id查找session对象。
关闭浏览器,内存消失,cookie消失,sessionid消失,会话等同于结束。
Cookie
session的实现原理中,每一个session对象都会关联一个sessionid,例如:JSESSIONID=41C481F0224664BDB28E95081D23D5B8。以上的这个键值对数据其实就是cookie对象。
cookie最终是保存在运行内存或者硬盘文件中。只要设置cookie的有效时间 > 0,这个cookie一定会存储到硬盘文件当中。
cookie的默认路径为设置的路径以及它的所有子路径
输出cookie
@WebServlet("/receive")
public class Receive extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies=req.getCookies();
int i=0;
if(cookies!=null){
for(Cookie cookie:cookies){
i++;
System.out.println(i);
String name=cookie.getName();
String value=cookie.getValue();
System.out.println(name+"="+value);
}
}}
浙公网安备 33010602011771号