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容器