【JavaWeb】保存作用域
保存作用域,像之前讲的session保存作用域
1.page
页面级别,现在几乎不用
2.request
一次请求响应范围有效
2.1 客户端重定向
response.sendRedirect(),两次请求,demo02获取的数据为空
(1)演示
demo01Servlet
@WebServlet("/demo01")
public class Demo01Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("uname","lili");
response.sendRedirect("demo02");
}
}
demo02
@WebServlet("/demo02")
public class Demo02Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object unameObj = request.getAttribute("uname");
System.out.println(unameObj);
}
}
控制台打印null,因为发生了两次请求,此时浏览器地址已经变为demo02
2.2 服务器转发dispatcher
一次请求,可以获取到request作用域中的数据。
(1)演示
demo01Servlet
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("uname","lili");
request.getRequestDispatcher("demo02").forward(request,response);
}
demo02Servlet
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object unameObj = request.getAttribute("uname");
System.out.println(unameObj);
}
成功打印出uname的值,服务器内转发只发生了一次请求,浏览器地址没有改变
3.session
一次会话范围有效。
请求重定向或服务器转发都能获取到,只要session没有过期就可以有效。
两个客户端的session不同
(1)演示
demo03Servlet
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().setAttribute("uname","lili");
response.sendRedirect("demo04");
// request.getRequestDispatcher("demo04").forward(request,response);
}
demo04Servlet
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Object unameObj = request.getSession().getAttribute("uname");
System.out.println(unameObj);
}
都能获取到session作用域中的值
4.application
一次应用程序范围有效
(1)演示
上下文:servlet程序的环境
demo05Servlet
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ServletContext :Servlet上下文
ServletContext application = request.getServletContext();
application.setAttribute("uname","lili");
response.sendRedirect("demo06");
// request.getRequestDispatcher("demo06").forward(request,response);
}
demo06Servlet
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext application = request.getServletContext();
Object unameObj = application.getAttribute("uname");
System.out.println(unameObj);
}
用谷歌访问demo05可以访问到,直接访问demo06也可以访问到
访问demo03可以访问到(session)