请求转发与重定向问题
请求转发
- 地址栏不发生改变
- 浏览器与服务器交互了一次
- 服务器内部跳转
- 会发生request(请求)传递
响应重定向
- 地址栏改变
- 浏览器与服务器交互了两次
- 服务器外部跳转
- request在重定向时无法传递
请求转发代码:
request.getRequestDispatcher("url").forward(request,response);
//url为要转发到的路径
响应重定向代码:
response.sendRedirect("url");
//url为重定向后要访问的路径
请求转发会后,request中会保留原来的数据,但是响应重定向不会保留数据(两次request,第一次的带有数据的request生命周期已经结束)
响应式重定向如果想要保留原request中的数据,有两种方法:
- 将数据存在session中(session生命周期比request长)
- 将数据存在servletContext中(session生命周期比request长)
Request、session、servletContext生命周期
Request:当次访问
Session:当次会话
servletContext:服务器开始到关闭
//将request中的数据存到session中
request.getSession().setAttribute("key","value");
//从session中取值
request.getSession().getAttribute("key");
//将request中的数据存到servletContext中
request.getServletContext().setAttribute("key","value");
//从servletContext中取值
request.getServletContext().getAttribute("key");