在servlet的doget()方法中调用init()

时间:2012-07-17 14:48:57

标签: java-ee tomcat servlets

请告知如果我在servlet的init()方法中调用doget()方法会发生什么。它会抛出异常吗?它对servlet生命周期有什么影响?

请告知。

3 个答案:

答案 0 :(得分:1)

最有可能的是,init()方法中的代码将会执行。

init方法没有什么特别之处,只是容器会在servlet投入使用之前调用它。您可以随时拨打电话。如果您的init方法更改了任何共享数据的值,那么您可能会遇到奇怪的问题。

我无法想象为什么有人必须在他们的init方法中拨打doGet

答案 1 :(得分:1)

首先,如果您尝试从init()调用doGet()方法并查看会发生什么,则可以避免提出此问题。

无论如何,Servlet Spec 2.3说:

  

提供初始化,以便servlet可以读取持久性   配置数据,初始化昂贵的资源(例如JDBC™API)   基础连接),并执行其他一次性活动。

因此,您应该想知道当前init()方法中有多少一次性活动。调用该方法与调用另一个方法没有什么不同。我正在思考一个场景,其中init()方法唯一能做的就是从ServetConfig的init参数初始化拥有的属性;在那种情况下,不会发生任何错误。

但是如果你的init()方法执行任何可能改变servlet内部状态的任务,那么你就有机会面对一个奇怪的行为。

如果您在init()方法中执行任何可能需要在doGet()中使用的任务,请将其移至私有内部方法。

答案 2 :(得分:0)

如果你没有实现init()方法,那么很多事情都不会发生。原因是继承的实现也是空的。您的servlet可能扩展了HttpServlet,它继承了GenericServlet的以下实现:

public void init() throws ServletException {
    // NOOP by default
}

如果您有自己的实现,则执行实施中的代码。它是否会引发异常 - 这取决于您编写的内容。

如果你调用以ServletConfig为参数的init,那么原来的ServletConfig会被替换并调用init()。我无法理解为什么要调用initinit(ServletConfig)方法。方法是在需要时覆盖,并由servlet容器调用。