servletContext以及servletConfig

struts1学习
servletContext:

ServletContext是servlet与servlet容器之间的直接通信的接口。Servlet容器在启动一个Web应用时,会为它创建一个servletContext对象。每个web应用有唯一的servletContext对象。同一个web应用的所有servlet对象共享一个serveltContext,servlet对象可以通过它来访问容器中的各种资源。 

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中:

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.xml配置文件关于环境初始化参数的配置时,发现了ServletConfig与ServletContext这两个对象的应用,于是就写了一个Servlet来体验了一下。

首先从作用范围来说,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>

如果一个参数仅为一个Servlet所用,那么就应该配置为ServletConfig参数,如下所示:

<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>

最后,说明一下参数的获取。访问ServletConfig参数,取得ServletConfig对象后,调用getInitParameter()方法;访问ServletContext对象,只要调用现有的ServletConfig对象的getServletContext()即可,然后同样调用getInitParamter()方法就能获取参数。例如对于上面的参数,可以通过如下方法获取各自参数。

public class TestServletConfig extends HttpServlet { 
   ServletConfig config;

   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() { 
   } 

猜你喜欢

转载自dj111111.iteye.com/blog/2124161