Servlet Config和Servlet Context
ServletConfig:代表一个Servlet的域ServletContext:代表整个web应用程序的域ServletConfig代表一个Servlet初始化参数的对象,容器在初始化Servlet时通过它传递信息给Servletweb容器会为每一个Servlet都创建一个ServletConfig对象它封装了Servlet的配置信息,只有该Servlet自身可以访问到(一个Servlet的S
ServletConfig:代表一个Servlet的域
ServletContext:代表整个web应用程序的域
ServletConfig
代表一个Servlet初始化参数的对象,容器在初始化Servlet时通过它传递信息给Servlet
- web容器会为每一个Servlet都创建一个ServletConfig对象
- 它封装了Servlet的配置信息,只有该Servlet自身可以访问到(一个Servlet的ServletConfig不能被另一个Servlet访问到)
首先我们可以在web.xml文件中为Servlet配置一些初始化参数:
<servlet>
<servlet-name>servletConfigDemo2</servlet-name>
<servlet-class>com.bdit.servlet.ServletConfigDemo2</servlet-class>
<init-param>
<param-name>c</param-name>
<param-value>配置文件中的参数1</param-value>
</init-param>
<init-param>
<param-name>d</param-name>
<param-value>配置文件中的参数2</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>servletConfigDemo2</servlet-name>
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>
也可以通过注解方式为Servlet配置一些初始化参数:
@WebServlet(
urlPatterns = {"/servlet2"},
initParams = {@WebInitParam(name="a",value = "注解中的参数值A"),
@WebInitParam(name = "b",value = "注解中的参数值B")}
)
获取ServletConfig对象
-
GenericServlet有一个getServletConfig方法,可以获取当前Servlet的ServletConfig对象
-
我们的Servlet继承了HttpServlet类,而HttpServlet又继承了GenericServlet类,所以可以直接this使用其中的方法:
-
ServletConfig config = this.getServletConfig();
获取Servlet的初始化参数
API:
返回值 | 方法名 | 说明 |
---|---|---|
String | getIntParameter | 获取应用的初始化参数 |
示例:
public class ServletConfigDemo2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取该Servlet的ServletConfig对象
ServletConfig config = this.getServletConfig();
ServletContext context1 = config.getServletContext();
//获取该Servlet的一些参数信息(注解中的、配置文件中的)
System.out.println(config.getInitParameter("a"));
System.out.println(config.getInitParameter("b"));
//获取web.xml文件中的该Servlet的初始化参数
System.out.println(config.getInitParameter("c"));
System.out.println(config.getInitParameter("d"));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
ServletContext
代表一个web应用程序。它是一个上下文对象,提供了一系列方法供Servlet与Web容器交互
- 所以一个web应用程序都有一个对应的、唯一的ServletContext对象
- 它是一个全局对象,凡是在一个web容器中的Servlet都可以访问到
- ServletContext是一个接口,此接口的实现类是由web容器实现的
获取ServletContext对象
1、使用ServletConfig接口中的方法
ServletConfig接口中的方法:
ServletContext getServletContext();返回一个ServletContext对象
-
首先获取ServletConfig对象
-
ServletConfig config = this.getServletConfig();
-
再使用config中的方法获取ServletContext对象
-
ServletContext context = config.getServletContext();
2、使用GenericServlet类中的方法
public ServletContext getServletContext();返回一个ServletContext对象
-
GenericServlet也有一个直接获取ServletContext对象的方法
-
(查看源码可以发现,也是使用ServletConfig中的方法获取的ServletContext对象)
-
public ServletContext getServletContext() { return this.getServletConfig().getServletContext(); }
-
-
我们的Servlet继承了HttpServlet类,而HttpServlet又继承了GenericServlet类,所以可以直接this使用其中的方法:
ServletContext context = this.getServletContext();
ServletContext的三个作用
获取了ServletContext对象之后,我们使用它主要有三个作用
1、获得项目的初始化参数
-
在web.xml文件中配置web应用程序的初始化参数
-
<context-param> <param-name>name</param-name> <param-value>小明</param-value> </context-param> <context-param> <param-name>version</param-name> <param-value>1.0.1</param-value> </context-param>
-
-
使用方法获取初始化参数:
-
String getInitParameter(String var1);获取指定var1的初始化参数值
-
ServletContext context = this.getServletConfig().getServletContext(); String name = context.getInitParameter("name"); String version = context.getInitParameter("version"); System.out.println(name+version);
-
2、获取项目中的任意资源的位置
-
String getRealPath(String var1);使用指定的资源的相对路径var1,返回真实路径的字符串
-
//获取web项目下任意资源的绝对路径 //web目录下的一个网页 String path1 = context.getRealPath("info.html"); //web目录下WEB-INF目录下的一个文件 String path2 = context.getRealPath("WEB-INF/web.xml"); //src中编译后的class文件 String path3 = context.getRealPath("WEB-INF/classes/com/bdit/servlet/HelloServlet.class"); System.out.println(path1); System.out.println(path2); System.out.println(path3);
-
3、作为一个域存放数据
Web容器启动的时候会为每一个web项目,单独创建了一个ServletContext对象,所以往ServletContext中保存的数据会一直存在,只有当web项目从web容器中移除,或者服务关闭时ServletContext对象才会被销毁。
所以一个web项目共享一个ServletContext域对象
返回值 | 方法名 | 说明 |
---|---|---|
void | setAttribute(String key,Object value) | 将数据放入域中 |
Object | getAttribute(String key) | 从域中取出指定key的value |
void | removeAttribute(String key) | 从域中删除将指定的key数据 |
示例:
//作为一个域对象存放数据
context.setAttribute("a","北京");
context.setAttribute("b","上海");
context.setAttribute("c","深圳");
//只要在同一个web项目中,都可以获取到ServletContext中的数据
ServletContext context = this.getServletContext();
Object obj1 = context.getAttribute("a");
Object obj2 = context.getAttribute("b");
Object obj3 = context.getAttribute("c");
System.out.println(""+obj1+obj2+obj3);
更多推荐
所有评论(0)