我们可以从 servlet 中的 service() 方法调用 init() 方法吗?我得到了这个作为面试问题。为什么会有人这样做呢?
7 回答
没有理由调用init
from service
,init
意味着由容器调用 - 使用配置初始化它(顾名思义)并允许它执行它需要执行的任何昂贵的操作(设置与数据库的连接或其他)。
如果您想以编程方式重新配置您的 servlet 以从 servlet 本身调用 ,这可能是有道理的init
,但我很难看到这个用例。
在典型的 servlet 生命周期中,在调用 init() 方法之前不会调用 service() 方法
您可以将 init 作为一种方法调用,而不是您希望在 servlet 的生命周期中调用它。
甚至服务方法也只会在初始化之后被调用。
init()
方法被调用以在 servlet 开始工作之前初始化所有需要的东西。
面试中提出的问题旨在让他们了解您在以下领域的知识:
- 什么是
init()
- 为什么要求
- 我们在哪里称呼它
- 如果我们从服务中调用它会发生什么
第四,就像建造一座建筑物,然后召集买家在里面安顿下来,然后开始建造它的结构。他们要求这了解您在项目处理方面的管理和组织才能。
换句话说,这样做是无济于事的,您的 servlet 将不会受到影响!
void init(ServletConfig config)throws ServletException
servlet
容器在init method
实例化servlet
. 必须在init method
servlet 可以接收任何请求之前成功完成。如果
_servlet
init method.
但是:如果你想init
显式调用而不是你调用类的正常函数。
init 方法被设计为只被调用一次。它在第一次创建 servlet 时调用,而不是为每个用户请求再次调用。因此,它用于一次性初始化,就像小程序的 init 方法一样。
servlet 通常在用户第一次调用与 servlet 对应的 URL 时创建,但您也可以指定在服务器首次启动时加载 servlet。
当用户调用 servlet 时,会创建每个 servlet 的单个实例,每个用户请求都会产生一个新线程,该线程会酌情移交给 doGet 或 doPost。init() 方法只是创建或加载一些将在 servlet 的整个生命周期中使用的数据。
不,我建议不要调用,因为 init() 方法应该只调用一次以进行一些初始化(如数据库连接代码,这必须只调用一次,没有理由多次调用它)作为服务方法将为每个用户请求调用(带有用户特定的请求和响应对象)。想象一下,如果你从服务方法调用 init,那么 init 会调用很多次。所以这样调用不是一个好主意。