关于init方法重写与ServletConfig(九)

问题1:在Servlet接口中定义的init方法是有参数的,它的参数类型是ServletConfig,而我们重写的init方法没有参数,为什么?

原因是:父类中已经将init(ServletConfig  config)这个方法进行了重写,而我们在自己的servlet中就不要再重写了。我们重写的init()不是在接口中定义的,而是在父类中定义的。

细节:在GenericServlet中对Servlet接口中的init(ServletConfig config)进行了重写,并且调用了自己定义的一个init()方法。

           我们在自己的servlet类中重写了init()方法,根据多态就会调用我们自己的init()方法。

  /**
     * Called by the servlet container to indicate to a servlet that the
     * servlet is being placed into service.  See {@link Servlet#init}.
     *
     * <p>This implementation stores the {@link ServletConfig}
     * object it receives from the servlet container for later use.
     * When overriding this form of the method, call 
     * <code>super.init(config)</code>.
     *
     * @param config 			the <code>ServletConfig</code> object
     *					that contains configutation
     *					information for this servlet
     *
     * @exception ServletException 	if an exception occurs that
     *					interrupts the servlet's normal
     *					operation
     * 
     * @see 				UnavailableException
     */
    public void init(ServletConfig config) throws ServletException {
	this.config = config;
	this.init();
    }


    /**
     * A convenience method which can be overridden so that there's no need
     * to call <code>super.init(config)</code>.
     *
     * <p>Instead of overriding {@link #init(ServletConfig)}, simply override
     * this method and it will be called by
     * <code>GenericServlet.init(ServletConfig config)</code>.
     * The <code>ServletConfig</code> object can still be retrieved via {@link
     * #getServletConfig}. 
     *
     * @exception ServletException 	if an exception occurs that
     *					interrupts the servlet's
     *					normal operation
     */
    public void init() throws ServletException {

    }

问题2:ServletConfig是什么,它有什么作用?

A servlet configuration object used by a servlet container to pass information to a servlet during initialization.

在GenericServlet中将ServletConfig对象保存到了GenericServlet中。

ServletConfig对象:代表的是servlet的配置对象。servlet配置——web.xml,通过ServletConfig对象,就能得到web.xml配置的数据。

ServletConfig对象由Servlet容器Tomcat创建。

浏览器端访问服务器端,服务器端根据传输文件找路径,那么servlet对象会初始化。服务器做了很多事情,例如当去访问一个servlet时,就会实例化这个servlet对象,并且会创建一个 ServletConfig对象,将这个对象通过init方法传递到servlet中。那么我们就可以在自己的servlet中获得servlet的配置信息。

示例代码:

自己的servlet类中获取一个ServletConfig对象,通过这个对象可以获取当前的Servlet配置信息

ServletConfig config = this.getServletConfig();

String name = config.getServletName();

问题3:ServletConfig对象介绍

  • 在servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。这些初始化参数可以通过ServletConfig对象获取。
  • 当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数。
  • ServletConfig配置参数相当于当前Servlet局部变量,无法被其它servlet访问。

ServletConfig对象

功能:

        1. 可以获取servlet的name

        2. 可以获取初始化参数:

                    我们可以再servlet的配置中通过<init-param>来进行配置,

                    对于这些配置,我们可以通过ServletConfig来获取。

        代码:

           <servlet>

                   <servlet-name>d2</servlet-name>

                   <servlet-class>com.it.servlet.Demo2Servlet</servlet-class>

                   <!--servlet的初始化配置参数-->

                   <init-param>

                           <param-name>encoding</param-name>

                           <param-value>GBK</param-value>

                     </init-param>

           </servlet>

ServletConfig config = this.getServletConfig();

String initParameterName = config.getInitParameter("encoding");

System.out.println(initParameterName);

init-param应用场景

如上为Struts配置。init-param相当于初始化配置信息。servlet跟随服务器启动而启动,当服务器启动时,在自己的init()方法里面可以得到ServletConfig,ServletConfig执行时就可以把init-param读到,这个是xml文件,配置文件,加载一些信息,写一些类名,通过反射的机制,让类实例化。这是让servlet完成初始化操作,加载一些预定义信息。可以通过init-param完成加载配置。

通过初始化参数,我们可以进行预定义信息的加载,这种操作一般情况是在框架中应用。

        3. getInitParameterNames()方法

           一个servlet有多个init-param标签。

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//可以获取一个ServletConfig对象,通过这个对象可以获取当前的Servlet配置信息。

         ServletConfig config = this.getServletConfig();

          Enumeration<String> enums = config.getInitParameterNames();

          while(enums.hasMoreElements()){

                    String s = enums.nextElement();

                    System.out.println(s);

          }

}

常用API总结:

          public String getServletName();  用于获取servlet名称

          public String get InitParameter(String name);  用于获取init-param中指定名称的value值

          public Enumeration getInitParameterNames();  用于获取所有的init-param中的name名称

梳理:

1. ServletConfig对象由服务器创建,通过init()方法传递到servlet中。在servlet中通过this.getServletConfig()获取ServletConfig对象。

2. ServletConfig对象是用于获取当前servlet的配置信息,包括servlet的名称,servlet的初始化参数。

重点:

每一个servlet都具有自己的ServletConfig对象。它们之间是不能共享的。类似于类的成员变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值