16_域对象
大约 4 分钟
概念引入
什么是域对象?
那些能放数据并存储传递数据作为数据存放区域的对象。
能够存储数据,获取数据,传递数据的对象
Servlet三大域对象
Request域 | HTTPServletRequest | 一次请求/请求转发 |
---|---|---|
Session域 | HTTPSession | 一次会话(跨请求) |
Application域 | ServletContext | 任意一次请求和会话(跨会话) |
setAttribute(name,value);
设置修改数据
getAttribute(name);
获得数据的方法
removeAttribute(name);
移除数据的方法
JSP四大域对象
Page域、Request域、Session域、Application域
Request域
有效范围
一次请求内有效,请求转发时数据可以传递,除此之外该域没有办法实现数据共享
生命周期
创建 每发生一次请求创建一个独立的请求域;
使用service方法中或者请求转发有效;
销毁 请求结束,已经向浏览器响应数据;
测试代码
向request域中放入数据:
package com.gyz.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author: gongyuzhuo
* @since: 2024-02-04 13:54
* @description:
*/
@WebServlet(urlPatterns = "/addToRequest.do")
public class Servlet1 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c");
req.setAttribute("gender", "女");
req.setAttribute("age", "10");
req.setAttribute("list", list);
//请求转发
req.getRequestDispatcher("/readFromRequest.do").forward(req, resp);
// 重定向。当测试重定向时,发现request域中读取数据都为null,原因是因为用户重新发起了一个request请求,注意请求转发和重定向的区别
//resp.sendRedirect("readFromRequest.do");
}
}
request域中读取数据:
package com.gyz.request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @author: gongyuzhuo
* @since: 2024-02-04 14:28
* @description:
*/
@WebServlet(urlPatterns = "/readFromRequest.do")
public class Servlet2 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 从request域中读取数据
List<String> list = (List<String>) req.getAttribute("list");
System.out.println(list);
System.out.println(req.getAttribute("gender"));
System.out.println(req.getAttribute("age"));
//获取Request中的请求参数
System.out.println(req.getParameter("userName"));
System.out.println(req.getParameter("passWord"));
}
}
测试:
请求接口:http://localhost:8089/requestTest_war_exploded/addToRequest.do?userName="zhangsan"&passWord="123456"
读取的数据打印如下:

Session域
有效范围
单次会话内有效,可以跨多个请求。
生命周期
创建:会话的产生,第一次发生请求,会话的开始
使用:本次会话之内,浏览器和服务器之间发生多次请求和响应有效
销毁:会话结束,如:浏览器失去JSESSIONID、到达最大不活动时间、手动清除
测试代码
Session域中放入数据:
package com.gyz.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author: gongyuzhuo
* @since: 2024-02-04 14:46
* @description:
*/
@WebServlet(urlPatterns = "/addToSession.do")
public class Servlet3 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
List<String> x = new ArrayList<>();
Collections.addAll(x, "a", "b", "c");
session.setAttribute("gender", "女");
session.setAttribute("name", "lisi");
session.setAttribute("list", x);
//重定向
resp.sendRedirect("readFromSession.do");
}
}
从Session域中读取数据:
package com.gyz.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;
/**
* @author: gongyuzhuo
* @since: 2024-02-04 14:50
* @description:
*/
@WebServlet(urlPatterns = "/readFromSession.do")
public class Servlet4 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
// 从request域中读取数据
List<String> list = (List<String>) session.getAttribute("list");
System.out.println(list);
System.out.println(session.getAttribute("gender"));
System.out.println(session.getAttribute("name"));
//获取Request中的请求参数
System.out.println(req.getParameter("userName"));
System.out.println(req.getParameter("passWord"));
}
}
访问如下接口:
读取Session中的数据如下:

Application域
有效范围
当前web服务内,跨请求,跨会话
生命周期
创建:项目启动
使用:项目运行任何时间有效
销毁:项目关闭
测试代码
Application域中放入数据:
package com.gyz.application;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author: gongyuzhuo
* @since: 2024-02-04 15:00
* @description:
*/
@WebServlet(urlPatterns = "/addToApplication.do")
public class Servlet1 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 向Application域中添加数据
ServletContext application = req.getServletContext();
List<String> x = new ArrayList<>();
Collections.addAll(x, "a", "b", "c");
application.setAttribute("list", x);
application.setAttribute("gender", "girl");
application.setAttribute("name", "晓明");
}
}
Application域中读取数据:
package com.gyz.application;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @author: gongyuzhuo
* @since: 2024-02-04 15:00
* @description:
*/
@WebServlet(urlPatterns = "/readFromApplication.do")
public class Servlet2 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext application = this.getServletContext();
// 从application域中读取数据
List<String> list = (List<String>) application.getAttribute("list");
System.out.println(list);
System.out.println(application.getAttribute("gender"));
System.out.println(application.getAttribute("name"));
}
}