【JavaWeb】保存作用域

保存作用域,像之前讲的session保存作用域

1.page

页面级别,现在几乎不用

2.request

一次请求响应范围有效
image

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
image

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的值,服务器内转发只发生了一次请求,浏览器地址没有改变
image

3.session

一次会话范围有效。
请求重定向或服务器转发都能获取到,只要session没有过期就可以有效。
两个客户端的session不同

image

(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作用域中的值
image

4.application

一次应用程序范围有效
image
(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)

posted @ 2022-07-31 16:45  植树chen  阅读(59)  评论(0编辑  收藏  举报