GenericServlet类有两个init方法。为什么会这样?
答案 0 :(得分:6)
javadoc明确了原因:
init()
:
一种可以覆盖的便捷方法,因此无需调用super.init(config)。 而不是覆盖
init(ServletConfig)
,只需覆盖此方法,它将由GenericServlet.init(ServletConfig config)
调用。仍可以通过ServletConfig
检索getServletConfig()
对象。
因此,如果您的servlet不关心ServletConfig
,那么只需实现init()
。
答案 1 :(得分:1)
有两个init()方法作为通用servlet类的一部分。
用于理解2 init()及其用法的示例servlet程序。
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时执行的步骤。
- >当我们使用HttpServlet时,根本不建议使用第一个init()方法。
- >有什么问题以及为什么我们不建议使用第一个init()?
第一种方法:
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中执行它,但是在GenericServlet中可以使用getServletConfig(),因此配置了set当客户端发送TestServlet请求时,我们将面对Null Pointer Execpetion。
第二种方法
//Sample code
ServletConfig config;
public void init(ServletConfig config){
this.config=config;
String fileName = config.getInitParameter("ParameterName");
System.out.println(config);
}
上面的代码看起来不错,但上面代码的问题是冗余,根据继承规则,应删除冗余代码。
第三种方法:
//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的一部分。由于我们没有提供第一个init()作为代码的一部分,因此JVM将调用GenericServlet的第一个init()方法
答案 2 :(得分:0)
基本上,genericServlet什么都不做,有两个init方法
1)init():一种可以覆盖的便捷方法,因此无需调用 super.init(配置)。
2)init(ServletConfig config):由servlet容器调用以指示servlet servlet正在投入使用。
答案 3 :(得分:0)
每当发送第一个请求web容器时总是调用init(ServletConfig config)方法。因为在特性目的中存储配置对象然后内部调用init()方法。强烈建议重写init()方法。这个方法初始化你自己的活动。这就是简单地说init(servletConfig config)用于web容器目的和init()方法意味着程序员目的。这就是GenericServlet包含两个init()方法。