Servlet-域对象

Servlet-域对象

域对象时一些用于存储数据和传递数据的对象,传递数据不同的范围,我们称之为不同的域

不同的域对象代表不同的域,共享数据的范围也不同

webapp中的三大域对象,分别是应用域,会话域,请求域

  • 请求域(HttpServletRequest)传递数据的范围是一次请求之内及多次请求转发

  • 会话域(HttpSession)传递数据的范围是一次会话之内,可以跨多个请求

  • 应用域(ServletContext)传递数据的范围是本应用内,可以跨多个会话


域对象的共有API

API说明
void setAttribut(String key,Object value)向域中增加/修改数据
Object getAttribute(String key)获得域中数据
void removeAttribute(String key)删除域中数据

Context对象操作数据

ServletContext代表应用,所以ServletContext域也叫做应用域,时webapp中最大的域,可以在本应用内实现数据的共享和传递

因为Context对象的作用域是整个webapp,所以经常使用application作为Context的对象命名

@WebServlet("/servlet1")
public class Servlet1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext application = getServletContext();
        application.setAttribute("ka","va");
        application.setAttribute("ka","vaa");
        System.out.println(application.getAttribute("ka"));//vaa
        application.removeAttribute("ka");
        System.out.println(application.getAttribute("ka"));//null
    }
}

因为Context是webapp中最大的域,所以在不同的servlet中都可以得到这个数据

@WebServlet("/servlet2")
public class Servlet2 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext application = getServletContext();
        System.out.println(application.getAttribute("ka"));
    }
}

应用场景

请求转发中,请求域可以传递数据

请求域中一般存放本次请求业务有关的数据,如:查询的所有部门信息

同一个绘画内,不用请求转发,会话域可以传递数据

会话域内一般存放本次会话客户端有关的数据,如:当前客户端登陆的用户

同一个APP内,不同的客户端,应用域可以传递数据

应用域内一般存放程序应用有关的数据,如:Spring框架的IOC容器