请告知如果我在servlet的init()
方法中调用doget()
方法会发生什么。它会抛出异常吗?它对servlet生命周期有什么影响?
请告知。
答案 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()
。我无法理解为什么要调用init
或init(ServletConfig)
方法。方法是在需要时覆盖,并由servlet容器调用。