-4

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

请指教。

4

3 回答 3

1

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

无论如何,Servlet Spec 2.3 说:

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

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

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

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

于 2012-07-17T15:23:34.480 回答
1

最有可能的是,您的init()方法内部的代码将执行。

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

我无法想象为什么有人必须init从他们的doGet方法中调用。

于 2012-07-17T15:18:16.250 回答
0

如果你没有实现 init() 方法,那么几乎什么都不会发生。原因是继承的实现也是空的。您的 servlet 可能会扩展 HttpServlet,后者从 GenericServlet 继承以下实现:

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

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

如果您调用以 ServletConfig 作为参数的 init,则原始 ServletConfig 将被替换并被init()调用。我看不出你为什么要调用initinit(ServletConfig)方法的原因。方法供您在需要时覆盖,并由 servlet 容器调用。

于 2012-07-17T16:06:31.553 回答