请告知如果我在 servletinit()
的方法中调用方法会发生什么。doget()
它会抛出异常吗?它会对 servlet 生命周期产生什么影响?
请指教。
请告知如果我在 servletinit()
的方法中调用方法会发生什么。doget()
它会抛出异常吗?它会对 servlet 生命周期产生什么影响?
请指教。
首先,如果您尝试从 调用您的init()
方法doGet()
并查看会发生什么,您可以避免问这个问题。
无论如何,Servlet Spec 2.3 说:
提供了初始化,以便 servlet 可以读取持久配置数据、初始化昂贵的资源(例如基于 JDBC™ API 的连接)以及执行其他一次性活动。
因此,您应该想知道您当前的方法中有多少一次性活动。init()
调用该方法与调用不同的方法没有什么不同。我正在考虑一种情况,在这种情况下,您的init()
方法唯一要做的就是从ServetConfig
的 init 参数初始化拥有的属性;在这种情况下,不会发生任何错误。
但是,如果您的init()
方法执行任何可能改变 servlet 内部状态的任务,那么您就有机会面对一个奇怪的行为。
如果您在init()
方法中执行任何可能需要在 中使用的任务doGet()
,则将它们移至私有内部方法。
最有可能的是,您的init()
方法内部的代码将执行。
该方法没有什么特别之处init
,只是容器会在您的 servlet 投入使用之前调用它。您可以随时调用它。如果您的init
方法更改了任何共享数据的值,那么您可能会遇到奇怪的问题。
我无法想象为什么有人必须init
从他们的doGet
方法中调用。
如果你没有实现 init() 方法,那么几乎什么都不会发生。原因是继承的实现也是空的。您的 servlet 可能会扩展 HttpServlet,后者从 GenericServlet 继承以下实现:
public void init() throws ServletException {
// NOOP by default
}
如果您有自己的实现,则执行您的实现中的代码。它是否引发异常 - 这取决于您编码的内容。
如果您调用以 ServletConfig 作为参数的 init,则原始 ServletConfig 将被替换并被init()
调用。我看不出你为什么要调用init
或init(ServletConfig)
方法的原因。方法供您在需要时覆盖,并由 servlet 容器调用。