ServletContext对象
Posted Vodka~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ServletContext对象相关的知识,希望对你有一定的参考价值。
1.每一个web应用都有且仅有一个ServletContext对象,又称Application对象,在web容器启动时,会为每一个web应用程序创建一个对应的ServletContext对象。
2.作用:
-作为域用来共享数据,此时数据在整个应用程序中共享;
-该对象保存了当前应用程序的相关信息,例如可以通过
getServerInfo() ; 获取当前服务器信息;
getRealPath(String path); 获取资源的真实路径等等
package com.StartSL;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author Vodka
* @date 2021/08//17:32
*/
@WebServlet(urlPatterns = {"/One","/Two"})
public class SLC extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse res){
//获取ServletContext对象的途径有很多
//1.request对象获取
ServletContext scOne = req.getServletContext();
//2.通过session对象获取
ServletContext scTwo = req.getSession().getServletContext();
//3.通过servletConfig 对象获取,在Servlet标准中提供了ServletConfig 方法
ServletConfig scf = getServletConfig();
ServletContext scThree = scf.getServletContext();
//4.直接获取
ServletContext scFour = getServletContext();
//常用方法
// 1.获取服务器版本信息
String ServerInfo = req.getServletContext().getServerInfo();
System.out.println("当前服务器版本信息:" + ServerInfo);
// 2.获取项目的真实路径
String realPath = req.getServletContext().getRealPath("/");
System.out.println("项目的真实路径:"+realPath);
}
}
3.ServletContext域对象
-ServletContext 可以当做域对象来使用,通过向ServletContext中存数据,可以使得整个应用程序共享某些数据,不建议寸法过多数据,因为ServletContext中的数据一旦存储进去,若不手动删除,将会一直保存。
package com.StartSL;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
/**
* @author Vodka
* @date 2021/08//17:32
*/
@WebServlet(urlPatterns = {"/scMain"})
public class SLC extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse res){
//获取ServletContext域对象
ServletContext sc = getServletContext();
//设置ServletContext对象的属性
ArrayList<String> Quality = new ArrayList<>();
Quality.add("Middle");
Quality.add("Wrong");
Quality.add("Excellent");
sc.setAttribute("Qualities",Quality);
System.out.println("Qualities 已经存储进ServletContext对象");
}
}
package com.StartSL;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
/**
* @author Vodka
* @date 2021/08//0:03
*/
@WebServlet(urlPatterns={"/scOne"})
public class SCOne extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse res){
//以scOne连接访问时,获取ServletContext域对象,并获取内容
ServletContext sc = getServletContext();
ArrayList<String> Qualities = (ArrayList<String>) sc.getAttribute("Qualities");
System.out.println("scOne获取到域对象的内容为:"+ Qualities);
}
}
package com.StartSL;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
/**
* @author Vodka
* @date 2021/08//0:06
*/
@WebServlet(urlPatterns={"/scTwo"})
public class SCTwo extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse res){
//以scTwo连接访问时,获取ServletContext域对象,并获取内容
ServletContext sc = getServletContext();
ArrayList<String> Qualities = (ArrayList<String>) sc.getAttribute("Qualities");
System.out.println("scTwo获取到域对象的内容为:"+ Qualities);
}
}
/*
在/scMain设置好ServletContext对象的内容后,分别访问/scTwo,/scOne再获取ServletContext得到的结果
Qualities 已经存储进ServletContext对象
scTwo获取到域对象的内容为:[Middle, Wrong, Excellent]
scOne获取到域对象的内容为:[Middle, Wrong, Excellent]
*/
4.ServletContext 的三大域对象:
1.request域对象:在一次请求中有效,请求转发有效,重定向失效。
2.session域对象:在一次会话中有效,请求转发和重定向都有效,session销毁后失效。
3.servletContext域对象: 整个应用程序有效,服务器关闭后失效。
以上是关于ServletContext对象的主要内容,如果未能解决你的问题,请参考以下文章
在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法