ServletConfig和ServletContext的区别

1、ServletConfig
ServletConfig是针对于当前Servlet的,其他servlet访问不到这个servlet的信息。一个servlet的ServletConfig对象不能被另一个servlet访问。
ServletConfig常用来获取当前Servlet的配置信息
ServletConfig中还维护了一个对ServletContext的引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
配置如下:
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>ServletConfigTest</servlet-name>
<servlet-class>com.lxl.servlet.ServletConfigTest</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>791341891</param-value>
</init-param>
</servlet>

Servlet1中获取当前servlet的配置信息:
Enumeration<String> enu=this.getServletConfig().getInitParameterNames();
while(enu.hasMoreElements()){
String name=enu.nextElement();
String value=config.getInitParameter(name);
response.getWriter().write("<br>name:"+name+" value:"+value+"</br>");
}

2、ServletContext
ServletContext是针对于整个web应用的,WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。是四大域对象的一种
常用来在servelt间通信。
利用其进行通信的时候,这里有一点需要注意,获取ServletContext必须通过ServletConfig来获取,不能这样获取:this.getServletContext()

1
2
3
4
5
存值:
int price=198;
this.getServletConfig().getServletContext().setAttribute("price", price);
取值: response.getWriter().write(String.valueOf(this.getServletConfig().getServletContext().getAttribute("price")));
//注意存和取都不能用this.getServletContext().setAttribute("price", price);不然会为null

那么按理说ServletContext对象的作用域比ServletConfig作用域大,为什么要从ServletConfig中到得
ServletContext对象呢?可以这样理解,在tomcate这个web容器里面保存了很多ServletContext,请求容器时到底把哪一个给你呢,那么就应该把包含了当前ServletConfig的那个容器给你,就是说取ServletConfig对象的父级对象