1、ServletContext详解
2、ServletConfig详解
Servlet容器初始化一个servlet对象时,会为这个servlet对象建立一个servletConfig对象。在servletConfig对象中包含了servlet的初始化参数信息。此外,servletConfig对象还与servletContext对象关联。Servlet容器在调用servlet对象的init(ServletConfig config)方法时,会把servletConfig对象当作参数传递给servlet对象。Init(ServletConfig config)方法会使得当前servlet对象与servletConfig对象创建关联关系。
servletConfig接口中定义了一下方法:
getInitParameter(String name):根据给定的初始化参数,返回匹配的初始化参数值。
getInitParameterNmes():返回一个Enumeration对象,里面包含了全部的初始化参数。
getServletContext():返回一个servletContext()对象,
getServltName():返回servlet的名字,即web.xml中的<servlet-name>的子元素的值。若是没有配置这个子元素,则返回servlet类的名字。
例子:
<servlet>
<servlet-name>actionServlet</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<load-on-startup>0</load-on-startup>
<init-param>
<param-name>color</param-name>
<param-value>red</param-value>
</init-param>
<init-param>
<param-name>size</param-name>
<param-value>16</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>actionServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
如上,红色标记处为初始化参数,至关于公有参数。
在servlet中:java
public class UserDateBaseServlet extends HttpServlet{
String color = this.getInitParameter("color");
String size = this.getInitParameter("size");
System.out.println("颜色是:"+color+"字号是:"+size);
}
注:HttpServlt类继承了GenericServlet类,而GenericServlet类实现了ServletConfig接口,所以在HttpServlet类和GenericServlet类及子类中均可以直接调用ServletConfig接口中的方法。web
3、两者区别
在看web.xml配置文件关于环境初始化参数的配置时,发现了ServletConfig与ServletContext这两个对象的应用,因而就写了一个Servlet来体验了一下。apache
首先从做用范围来讲,ServletConfig做用于某个特定的Servlet,即从该Servlet实例化,那么就开始有效,可是该Servlet以外的其余Servlet不能访问;ServletContext做用于某个web应用,即在一个web应用中至关于一个全局对象,在Servlet容器启动时就已经加载,对于不一样的web应用,有不一样的ServletContext。浏览器
其次,来看一下两者参数的使用。若是一个参数为整个web应用所用,那么就配置为ServletContext参数,以下所示:服务器
<context-param>
<param-name>encoding</param-name>
<param-value>gb2312</param-value>
</context-param>app
若是一个参数仅为一个Servlet所用,那么就应该配置为ServletConfig参数,以下所示:jsp
<servlet>
<servlet-name>affice_add</servlet-name>
<servlet-class>servlet.Affice_add</servlet-class>
<init-param>
<param-name>filepath</param-name>
<param-value>/webContent/affice</param-value>
</init-param>
</servlet>this
最后,说明一下参数的获取。访问ServletConfig参数,取得ServletConfig对象后,调用getInitParameter()方法;访问ServletContext对象,只要调用现有的ServletConfig对象的getServletContext()便可,而后一样调用getInitParamter()方法就能获取参数。例如对于上面的参数,能够经过以下方法获取各自参数。url
public class TestServletConfig extends HttpServlet {
ServletConfig config;spa
public void init(ServletConfig config) {
this.config=config;
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
String filepath=(String)config.getInitParameter("filepath");
System.out.println(filepath);
String encode=(String)config.getServletContext().getInitParameter("encoding");
System.out.println(encode);
}
public void destroy() { } } 对上面Servlet编译后,在浏览器中输入 http://localhost:8080/my/TestServletConfig (该连接地址与servlet在webx.xml中的配置有关)后,就能够分别对应输出/WebContent/affice和gb2312