ServletConfig与ServletContext的区别

在看web.xml配置文件关于环境初始化参数的配置时,发现了ServletConfigServletContext这两个对象的应用,于是就写了一个Servlet来体验了一下。

首先从作用范围来说,ServletConfig作用于某个特定的Servlet,即从该Servlet实例化,那么就开始有效,但是该Servlet之外的其他Servlet不能访问;ServletContext作用于某个web应用,即在一个web应用中相当于一个全局对象,在Servlet容器启动时就已经加载,对于不同的web应用,有不同的ServletContext

其次,来看一下二者参数的使用。如果一个参数为整个web应用所用,那么就配置为ServletContext参数,如下所示:

如果一个参数仅为一个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() {

   }

}

 

 

对上面Servlet编译后,在浏览器中输入http://localhost:8080/my/TestServletConfig(该链接地址与servletwebx.xml中的配置有关)后,就可以分别对应输出/WebContent/afficegb2312

你可能感兴趣的:(Web,xml,浏览器,servlet)