Sevlet上下文对象的作用是:
1,相对路径转绝路径
String path = "/2019-03-21 16-18-00 的屏幕截图.png";
//获取ServletContext 对象
ServletContext sc=this.getServletContext();
//相对路径转绝对路径
String realPath=sc.getRealPath(path);
// File file = new File(realPath);
// InputStream is =new FileInputStream(file);
System.out.println(realPath);
2,获取容器附加信息
sc.getServerInfo():获取服务器版本号
sc.getMajorVersion():获取Servlet版本号
3,全局容器
Servletcontext通过两个api完成对他的添加与读取的操作
setAttrbuter(String key,Object value);
Object value = getAttrbuter(Stirng key);
3.1自启动的servlet
所谓 的自启动的servlet表示,该servlet的实例化不依赖于请求,而是依赖于容器。当容器启动时会实例化这个servlet。
如果将一个servlet修改为自启动呢?
在web.xml文件中找到这个servlet所对应的在该节点中添加100 其中100为优先级的标识,他并不是一个时间。当为多个serlvet配置了自启动时,tomcat会根据数值的大小来觉得启动的先后顺序。数值越小的优先级越高。
ReadInitConfigg
ReadInitConfigg
com.jay.ReadInitConfig
100 其中100即用于配置自启动servlet(100表示优先级,1最大)
使用全局容器时需要注意的地方:
千万不要存业务数据。因为ServletContext的生命周期太长了。意味着存放在该对象下的数据也会一直存在,那么我们还需要考虑到数据同步的问题
此外,在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法:
今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下:
1 //获取ServletContext对象
2 ServletContext servletContext = this.getServletContext();
这个问题很奇怪,也是第一次遇到,因为以前在servlet的doGet/doPost方法中要获取ServletContext对象时都是这样写的,也没有出现过java.lang.NullPointerException(空指针)异常,上网查了一下出现这个异常的原因:原来是我重写了init(ServletConfig)方法,但重写的init方法内部没有调用super.init(config);就是这导致了错误!父类的 init(ServletConfig)有处理获取ServletContext对象的引用,在doGet/doPost/service方法方法中才能够通过 getServletContext()方法获取到SeverletContext对象!重写了Servlet的init方法后一定要记得调用父类的init方法!!!,否则在service/doGet/doPost方法中使用getServletContext()方法获取ServletContext对象时就会出现java.lang.NullPointerException异常
public void init(ServletConfig config) throws ServletException {
//重写了Servlet的init方法后一定要记得调用父类的init方法,
否则在service/doGet/doPost方法中使用getServletContext()方法获取ServletContext对象时
就会出现java.lang.NullPointerException异常
super.init(config);
//接下来才是自己的init方法体
}
4, 读取web.xml文件中的配置信息
配置web.xml
key
param-value
获取配置文件中的配置信息
String value = sc.getInitParameter("key");
用户读取我们在servlet节点中配置的配置信息。注意一个每个servletConfig对象只能去读取在web.xml文件中对于当前这个serlvet的配置信息中的节点中的值。不能夸servler获取。
修改 Web.xml
ServletConfigDemo
ServletConfigDemo
com.jay.ServletConfigDemo
ServletConfigDemo-key
ServletConfigDemo-value
java代码
ServletConfig sc = this.getServletConfig();
sc.getInitParameter("ServletConfigDemo-key");
111