数据域
Servlet中提供了一些域对象,这些域对象可以用来数据存储和数据共享,当然了这些域对象各有优点,比如作用范围不同,按照范围如下:
1、request
一次请求中的范围,通常用于转发中共享数据,请求关闭即销毁
2、session
一次会话中数据共享,会话结束即关闭
3、ServletContext
代表整个web应用,服务器关闭即关闭
域对象存储读取数据的方法如下:
存储数据:setAttribute("键",值)
获得数据:getAttribute("键")
移除数据:removeAttribute("键")
一、request
范围:一次请求中的范围,通常用于转发中共享数据
接下来我们写三个servlet,在第一个servlet1中建立域对象,然后打印数据到控制台,并转发到servlet2中,servlet2也打印域对象对应的数据,servlet3和servlet2一样开始访问
response.setContentType("text/html;charset=UTF-8");
//request对象就是一个域对象
request.setAttribute("name","Tom");
PrintWriter printWriter=response.getWriter();
printWriter.println(request.getAttribute("name"));
System.out.println(request.getAttribute("name"));
request.getRequestDispatcher("/Reqtrea2").forward(request,response);
//servlet2和servlet3
response.setContentType("text/html;charset=UTF-8");
PrintWriter ps=response.getWriter();
ps.println(request.getAttribute("name"));
System.out.println(request.getAttribute("name"));
访问servlet1,再访问servlet3,再访问servlet2
Tom
Tom
null
null
二、session
一次会话中数据共享,会话结束即关闭,session是会话技术,存储在服务器中
//得到域对象
HttpSession session=request.getSession();
创建两个servlet,servlet1中建立数据,打印数据,servlet2获得数据打印数据
//servlet1得到域对象
HttpSession session=request.getSession();
session.setAttribute("age","yellow");
System.out.println(session.getAttribute("age"));
//servlet12
HttpSession session=request.getSession();
System.out.println(session.getAttribute("age"));
分别访问
yellow
yellow
在浏览器x中访问servlet1,在浏览器y中访问servlet2
yellow
null
三、ServletContext
代表整个web应用,服务器关闭即关闭
//得到一个域对象,两种都行
ServletContext servletContent=request.getServletContext();`在这里插入代码片`
ServletContext servletContent=this.getServletContext();
建立两个Servlet,执行session步骤
ServletContext servletContent=request.getServletContext();
servletContent.setAttribute("id","110");
System.out.println(servletContent.getAttribute("id"));
//得到一个域对象
ServletContext servletContent=this.getServletContext();
System.out.println(servletContent.getAttribute("id"));
分别访问,然后更换浏览器继续访问
110
110
110
110
110
110
更换浏览器后仍然可以继续访问,只要服务器不关闭数据就可以被访问到