Servlet保存作用域

一、request

request保存作用域只在一次请求的范围内。

例如:当我们使用客户端重定向后,服务器响应和客户端重定向到另一个Servlet,客户端会再次发起一个请求,此时的第一次请求保存作用域中的数据失效。若是使用服务器内部转发则仍然有效,因为没有发起第二次请求。

@WebServlet("/Demo1")
public class Demo1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、保存数据到request保存作用域
        req.setAttribute("uname","Tom");
        
        // 2、客户端重定向给Demo2(重定向不属于同一次请求,uname为null)
        //req.getRequestDispatcher("Demo2").forward(req,resp);
        
        //3、服务器内部转发给Demo2(成功获取Tom值)
        resp.sendRedirect("Demo2");
    }
}

@WebServlet("/Demo2")
public class Demo2 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Object obj = req.getAttribute("uname");
        System.out.println("Demo2"+obj);
    }
}

二、session

session保存的作用域范围在session有效期内,并且在同一客户端的请求内生效。

例如:当我们使用同一客户端发起多次请求时,在30分钟内(默认session有效时长)sesion保存作用域中的数据是一直有效的。超过30分钟或者切换客户端访问都会失效。

@WebServlet("/Demo3")
public class Demo3 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、向session保存作用域保存数据
        HttpSession session = req.getSession();
        session.setAttribute("uname","Tom");

        //2、客户端重定向给Demo4(成功获取uname)
        //resp.sendRedirect("Demo4");
        
        //3、服务器端转发(成功获取uname)
        req.getRequestDispatcher("Demo4").forward(req,resp);
    }
}
@WebServlet("/Demo4")
public class Demo4 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Object obj = req.getSession().getAttribute("uname");
        System.out.println("Demo4"+obj);
    }
}

 三、application

application保存作用域在一次启动服务其运行的过程中一直保持有效。

例如:当我们启动Tomcat服务器后,向application保存作用域中保存了数据,只要是在这次服务器运行的期间,保存的数据一直有效,无论何种访问方式。只有当Tomcat关闭或者重启才会失效。

@WebServlet("/Demo5")
public class Demo5 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、向application保存作用域保存数据
        ServletContext application = req.getServletContext();
        application.setAttribute("uname","Tom");

        //2、客户端重定向(可获取uname值)
        //resp.sendRedirect("Demo6");

        //3、服务器内部转发给(可获取uname值)
        req.getRequestDispatcher("Demo6").forward(req,resp);
    }
}
@WebServlet("/Demo6")
public class Demo6 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(req.getServletContext().getAttribute("uname"));
    }
}

总结:

1) request:一次请求响应范围 

2) session:一次会话范围有效

3) application: 一次应用程序范围有效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值