编程语言
首页 > 编程语言> > JavaWeb作用域

JavaWeb作用域

作者:互联网

JavaWeb作用域

综述

javaweb有四个不同级别的作用域,分别是page页面级别、一次请求级别、一次会话级别、整个web级别。page没有进行实现

请求级别

只对一次request有效,结束请求时保存的数据就会消失

示例代码

servletA

@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 在servletA中保存一个值到request中,在servletB中读取
        req.setAttribute("item_a", "这是Servlet A保存的值");
        resp.sendRedirect("/JavaWebDemo_war_exploded/request/b");
    }

servletB

@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 从reqquest中获取servletA存的值
        System.out.println("读取到的servlet a 保存的值是:" + req.getAttribute("item_a"));
    }

测试

首先访问servletA,写入值。在访问servletB读取值。结果如下:

image-20220612232615239

表明,在前一个servlet中写入的数据到另一个servle中就会消失

会话级别

保存的数据可以持续一个会话,即第一次调用request.getSession()开始到session过期为止。

测试代码

@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 在servletA中保存一个值到Session中,在另一个Servlet中读取
        req.getSession().setAttribute("item_a", "这是Servlet A保存的值");
        resp.sendRedirect("/JavaWebDemo_war_exploded/scope/session/b");
    }
@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 从session中获取a存的值
        System.out.println("读取到的servlet a 保存的值是:" + req.getSession().getAttribute("item_a"));
    }

测试

首先访问servletA写入数据,再访问servletB读取数据

image-20220612233618734

成功读取到对应值,再使用其他浏览器或工具访问b,如下图

image-20220612233740162

第一行是eage访问结果,第二行使用ApiPost访问结果,表明session级别存储的数据是针对浏览器的

web级别

web级别的数据会保存在web服务器中,在写入之后,只有在服务器关闭才会消失

测试代码

@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 在servletA中保存一个值到ServletContext中,在另一个Servlet中读取
        ServletContext application = req.getServletContext();
        application.setAttribute("item_a", "这是Servlet A保存的值");
        resp.sendRedirect("/JavaWebDemo_war_exploded/scope/web/b");
    }
@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 从ServletContext中获取a存的值
        ServletContext application = req.getServletContext();
        System.out.println("读取到的servlet a 保存的值是:" + application.getAttribute("item_a"));
    }

结果

image-20220612234911936

上面为网页访问servlet获取到的,下面为apipost访问获取到的,均有值。

标签:JavaWeb,ServletException,作用域,resp,req,保存,servletA,级别
来源: https://www.cnblogs.com/mrystar/p/16369336.html