GenericServlet类有两个初始化方法。为甚麽呢?
发布于 2011-01-20 19:29:51
javadoc清楚地说明了原因:
init()
配置一个方便的方法,它可以被重写,这样就不需要调用super.init(
)。只需覆盖此方法,它将被
GenericServlet.init(ServletConfig config)调用,而不是覆盖init(ServletConfig)。仍然可以通过getServletConfig()检索ServletConfig对象。
因此,如果您的servlet不关心ServletConfig,那么就实现init()。
发布于 2012-02-22 18:05:58
作为通用servlet类的一部分,有两个init()方法。
用于理解两个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时,根本不推荐使用first init()方法。
-->有什么问题,为什么我们不推荐使用first 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中可用,它执行该方法,但getServletConfig ()在GenericServlet中可用,因此当客户端发送对TestServlet的请求时,config被设置为null,我们将面临空指针执行。
第二种方法
//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 .As的一部分,我们没有提供第一个init()作为代码的一部分,那么JVM将调用GenericServlet的第一个init()方法。
发布于 2011-01-20 19:33:53
基本上,genericServlet什么也不做,有两个init方法
1) init():一个方便的方法,它可以被覆盖,这样就不需要调用super.init(super.init)了。
2) init(ServletConfig配置):由servlet容器调用,以向servlet指示servlet正在投入服务。
https://stackoverflow.com/questions/4746520
复制相似问题