目录
- 域对象概述
- 三大域对象的数据作用范围
- 域对象的使用
域对象概述
域对象:一些用于存储数据和传递数据的对象,传递数据不同的范围,我们称之为不同的域,不同的域对象代表不同的域,共享数据的范围也不同
- 请求域对象是HttpServletRequest,传递数据的范围是一次请求之内及请求转发
- 会话域对象是HttpSession,传递数据的范围是一次会话之内,可以跨多个请求
- 应用域对象是ServletContext,传递数据的范围是本应用之内,可以跨多个会话
三大域对象的数据作用范围
请求域
会话域
应用域
域对象的使用
域对象的API
| API | 功能 |
|---|---|
| void setAttribute(String name,String value) | 向域对象中添加/修改数据 |
| Object getAttribute(String name); | 从域对象中获取数据 |
| removeAttribute(String name); | 移除域对象中的数据 |
import jakarta.servlet.ServletContext;import jakarta.servlet.ServletException;import jakarta.servlet.annotation.WebServlet;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import jakarta.servlet.http.HttpSession;import java.io.IOException;@WebServlet("/servletA")public classServletAextendsHttpServlet{protected voidservice(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{// 向请求域存放数据req.setAttribute("request","requestMessage");// 向会话域中存放数据HttpSession session=req.getSession();session.setAttribute("session","sessionMessage");// 向应用域存放数据ServletContext application=getServletContext();application.setAttribute("application","applicationMessage");// 获取请求域数据String reqMessage=(String)req.getAttribute("request");System.out.println("请求域 = "+reqMessage);// 请求转发req.getRequestDispatcher("servletB").forward(req,resp);}}import jakarta.servlet.ServletContext;import jakarta.servlet.ServletException;import jakarta.servlet.annotation.WebServlet;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import jakarta.servlet.http.HttpSession;import java.io.IOException;@WebServlet("/servletB")public classServletBextendsHttpServlet{protected voidservice(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{String reqMessage=(String)req.getAttribute("request");System.out.println("请求域 = "+reqMessage);// 获取会话域中的数据HttpSession session=req.getSession();String sessionMessage=(String)session.getAttribute("session");System.out.println("会话域 = "+sessionMessage);// 获取应用域中的数据ServletContext application=getServletContext();String appMessage=(String)application.getAttribute("application");System.out.println("应用域 = "+appMessage);}}
获取到请求域数据,打印servletA中请求域数据,然后请求转发,再打印
总结:
- 请求转发时,请求域可以传递数据
请求域内一般放本次请求业务有关的数据,如:查询到的所有的部门信息 - 同一个会话内,不用请求转发,会话域可以传递数据
会话域内一般放本次会话的客户端有关的数据,如:当前客户端登录的用户 - 同一个app内,不同的客户端,应用域可以传递数据
应用域内一般放本程序应用有关的数据,如:Spring框架的IOC容器