研究javax.servlet.ServletContext接口
1、javax.servlet.ServletContext是一个接口
2、javax.servlet.ServletContext是Servlet规范中的一员
3、apache Tomcat 服务器对ServletContext接口的实现类完整类名:
org.apache.catalina.core.ApplicationContextFacade
package org.apache.catalina.core;
public class ApplicationContextFacade implements javax.servlet.ServletContext{
}
程序员不需要关心实现类,还是面向ServletContext接口编程。
4、ServletContext是什么?
* ServletContext对象被翻译为“Servlet对象的上下文对象”。
* Servlet上下文是所有的Servlet对象共享的一个四周环境对象。
5、在同一个webapp中,所有的Servlet对象共享一个ServletContext对象。
6、ServletContext对象在web服务器启动阶段被创建,在web服务器关闭的时候被销毁,生命周期最长的一个对象。
ServletContext对象在web服务器启动阶段解析web.xml文件的时候被创建。
7、一个webapp对应一个ServletContext对象。
8、ServletContext在开发中能干什么?
* ServletContext对象在webapp中只有一个。所有Servlet对象共享,也可以看做是所有用户共享的一个对象。
* ServletContext对象中适合存放什么数据?
- 所有用户共享的数据(不是用户共享的数据不适合放到一个共享的环境当中)
- 少的数据量(数据量庞大会占用大量的内存空间,影响效率)
- 不被修改的数据(经常修改的数据不适合放到该环境中,因为有线程安全隐患)
注意:当以上的条件全部满足之后,数据可以存放到该环境当中,这个环境本身就是一种缓存机制, 没有必要每一次都去连接数据库,连接数据库是需要频繁的IO操作的,减少IO操作需要使用缓存解决方案,可以大大提高程序的执行效率。
9、ServletContext通常变量名叫做:application
ServletContext application;
application翻译为:应用
一个应用只有一个ServletContext对象。
ServletContext对象是一个应用级别的对象。
10、ServletContext接口中常用的方法:
-void setAttribute(String name, Object object) //map.put(key,value);
-Object getAttribute(String name) //Object value = map.get(key);
-void removeAttribute(String name) //map.remove(key);
-Enumeration getInitParameterNames() 获取上下文初始化参数的name
-String getInitParameter(String name) 通过上下文初始化参数的name获取value
<!-- 上下文初始化参数 -->
<!-- 以下的配置信息被自动封装到ServletContext对象当中 -->
<!-- 全局配置,这里的配置信息,在所有的Servlet中都可以访问 -->
<context-param>
<param-name>user</param-name>
<param-value>zhangsan</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>123</param-value>
</context-param>
-String getRealPath(String path) 获取文件的绝对路径
ServletContextDemo代码如下:
package com.servletConfig;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class ServletContextDemo implements Servlet {
//实例变量
private ServletConfig config;
@Override
public void init(ServletConfig config) throws ServletException {
//将局部变量config赋值给实例变量config
this.config = config;
}
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
//获取ServletContext对象
ServletContext application = config.getServletContext();
//[email protected]
System.out.println("application = " + application);
//获取上下文初始化参数配置信息
Enumeration<String> contextNames = application.getInitParameterNames();
while(contextNames.hasMoreElements()){
String name = contextNames.nextElement();
String value = application.getInitParameter(name);
System.out.println("ServletContext======" + name + " = " + value);
}
//获取文件绝对路径
//注意:路径在写的时候不需要以“/”开始,但是从WebRoot文件夹下出发
String realPath = application.getRealPath("index.html");
System.out.println(realPath); //D:\tomcat7\tomcat7\webapps\hello\index.html
//向ServletContext对象中或者说向application范围中绑定一个数据,并起名
application.setAttribute("fdsafdsaf", "jojio");
// 【注:另一个Servlet实例】 从应用范围当中或者说从ServletContext范围当中通过name读取某个绑定的数据
Object obj = application.getAttribute("fdsafdsaf");
//将取出的对象输出到浏览器中
response.getWriter().print(obj.toString());
}
@Override
public void destroy() {
}
//子类使用该方法可以获取到ServletConfig
@Override
public ServletConfig getServletConfig() {
return config;
}
@Override
public String getServletInfo() {
return null;
}
}
web.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 上下文初始化参数 -->
<!-- 以下的配置信息被自动封装到ServletContext对象当中 -->
<!-- 全局配置,这里的配置信息,在所有的Servlet中都可以访问 -->
<context-param>
<param-name>user</param-name>
<param-value>admin</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>112233</param-value>
</context-param>
<servlet>
<servlet-name>b</servlet-name>
<servlet-class>com.servletConfig.ServletContextDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>b</servlet-name>
<url-pattern>/b</url-pattern>
</servlet-mapping>
</web-app>
希望对你有帮助,祝你有一个好心情,加油!
若有错误、不全、可优化的点,欢迎纠正与补充!