首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java-2初始化方法中的GenericServlet

java-2初始化方法中的GenericServlet
EN

Stack Overflow用户
提问于 2011-01-20 19:27:33
回答 4查看 4.4K关注 0票数 2

GenericServlet类有两个初始化方法。为甚麽呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-20 19:29:51

javadoc清楚地说明了原因:

init()

配置一个方便的方法,它可以被重写,这样就不需要调用super.init(

)。只需覆盖此方法,它将被GenericServlet.init(ServletConfig config)调用,而不是覆盖init(ServletConfig)。仍然可以通过getServletConfig()检索ServletConfig对象。

因此,如果您的servlet不关心ServletConfig,那么就实现init()

票数 6
EN

Stack Overflow用户

发布于 2012-02-22 18:05:58

作为通用servlet类的一部分,有两个init()方法。

  1. init(ServletConfig config)
  2. init()

用于理解两个init()及其用法的示例servlet程序。

代码语言:javascript
复制
public class TestServlet extends HttpServlet{

    public void init() throws......
    {
        System.out.println("we are in 2nd init() ");
    }
    public void service(HttpServlet.........)throws .....{
        System.out.println("we are in TestServlet");
    }

}

在服务器中部署上述servlet时执行的步骤。

  1. 在部署项目之后,每当客户端第一次向TestServlet发送请求时,服务器都会创建testServlet对象,然后调用第一个init()方法(init(ServletConfig配置))。然后在TestServlet中检查第一个init()方法,因为它不可用,然后它检查超类HttpServlet,第一个init方法也不可用,然后它检查HttpServlet的超类,即GenericServlet类,第一个init()可用,然后JVM执行它,并调用第二个init(),因为第二个init()在TestServlet中直接可用,然后JVM执行它。

-->当我们使用HttpServlet时,根本不推荐使用first init()方法。

-->有什么问题,为什么我们不推荐使用first init()?

第一种方法:

代码语言:javascript
复制
public class TestServlet extends HttpServlet
    {
      public void init(ServletConfig config) throws.....
      {
        config=getServletConfig();
        String paramName = config.getInitParameter("ParameterName");
        System.out.println("paramName");
      }
    public void service(HttpServlet request ..........)throws .......
    {
        System.out.println("we are in 2nd service method()");
    }

}

部署上述servlet时,执行以下步骤。创建a.Servlet对象,并用默认值声明超类的所有实例变量,即null,然后JVM执行第一个init()方法,因为它在TestServlet中可用,它执行该方法,但getServletConfig ()在GenericServlet中可用,因此当客户端发送对TestServlet的请求时,config被设置为null,我们将面临空指针执行。

第二种方法

代码语言:javascript
复制
//Sample code
  ServletConfig config;
public void init(ServletConfig config){
    this.config=config;
    String fileName = config.getInitParameter("ParameterName");
    System.out.println(config);
}

上面的代码看起来不错,但上面代码的问题是冗余,根据继承规则,冗余代码应该被删除。

第三种方法:

代码语言:javascript
复制
//approach1 problem can be resolved by calling the super class init() so that config object 
//will returned which we can use in init() of our servlet.
super.init(config);
config=getServletConfig();

因此,由于上述原因,Sun建议使用第二个init()作为servlet .As的一部分,我们没有提供第一个init()作为代码的一部分,那么JVM将调用GenericServlet的第一个init()方法。

票数 1
EN

Stack Overflow用户

发布于 2011-01-20 19:33:53

基本上,genericServlet什么也不做,有两个init方法

1) init():一个方便的方法,它可以被覆盖,这样就不需要调用super.init(super.init)了。

2) init(ServletConfig配置):由servlet容器调用,以向servlet指示servlet正在投入服务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4746520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档