Servlet域对象
全局域对象
-
ServletContext全局域对象,生命周期是服务器停止后结束
-
创建方式
//设置全局域数据 ServletContext context = this.getServletContext(); context.setAttribute("username","zhangsan"); context.setAttribute("password","123456"); //获取全局域数据 ServletConfig config = this.getServletConfig(); ServletContext context = config.getServletContext(); String username = (String) context.getAttribute("username"); System.out.println(username); //删除全局域对象 removeAttribute("username")
-
特点是:全局域对象共享的数据会一直存在服务器中,直到服务器停止了,这个对象才会消失。而且数据会被所以的servlet共享。
例如
package org.westos.demo;/*Author:LH CreatTime:2020.08.21.13:54*/ 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; @WebServlet(name = "org.westos.demo.Servlet1",value = "/demo1") public class Servlet1 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = request.getServletContext(); context.setAttribute("username","zhangsan"); context.setAttribute("password","123456"); } } package org.westos.demo;/*Author:LH CreatTime:2020.08.21.13:56*/ 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; @WebServlet(name = "Servlet2",value = "/demo2") public class Servlet2 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = request.getServletContext(); System.out.println(context.getAttribute("username")); System.out.println(context.getAttribute("password")); } } 第一次请求demo1之后 关闭浏览器,再请求demo2,不管是用哪个浏览器都可以请求到数据
-
注意点:由于全局域的范围很大,能被任何一个servlet访问到,所以在使用的时候要根据具体情况确定域的范围,不能滥用这个域对象,否则会造成资源的浪费。
请求域对象
-
请求域对象的范围只是一次请求,如果是重定向或者是多次请求,这个域对象的数据就不能被共享。
-
案例
```java
package org.westos.demo2;/*Author:LH
CreatTime:2020.08.21.14:11*/
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;
@WebServlet(name = "MyServlet",value =