servlet中的init方法是何时运行的呢?
下文笔者讲述init方法在Servlet 实例化之后、处理任何请求之前被调用的
`init`方法运行
1.Servlet 生命周期概述
Servlet 的生命周期由容器(如 Tomcat)管理,主要包括以下三个阶段:
-加载和实例化:
当容器启动或首次接收到对 Servlet 的请求时,
容器会加载并实例化 Servlet。
-初始化:
通过调用 `init` 方法完成初始化工作。
-服务:
通过调用 `service` 方法处理客户端请求。
-销毁:
当容器关闭或需要释放资源时,
通过调用 `destroy` 方法销毁 Servlet。
2.`init` 方法的具体运行时机
- 首次请求时:
默认情况下,Servlet 是在第一次接收到请求时被实例化和初始化的
也就是说,`init` 方法会在第一个请求到达时被调用。
- 延迟加载 vs 预加载:
- 延迟加载(Lazy Loading):
这是默认行为,`init` 方法在第一个请求到达时调用。
- 预加载(Eager Loading):
如果在 `web.xml` 或注解中配置了 `<load-on-startup>` 元素,
并且其值为非负整数,
则 Servlet 在容器启动时就会被实例化和初始化,
`init` 方法也会立即执行。
3. `init` 方法的作用
`init` 方法用于执行 Servlet 的初始化操作
例:
- 加载配置文件。
- 初始化数据库连接池。
- 设置全局变量或资源。
- 执行其他一次性的设置任务。
4.例
使用`web.xml`进行配置
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup> <!-- 预加载 -->
</servlet>
#### 使用注解进行配置
@WebServlet(urlPatterns = "/myServlet", loadOnStartup = 1) // 预加载
public class MyServlet extends HttpServlet {
@Override
public void init() throws ServletException {
super.init();
// 初始化逻辑
System.out.println("Servlet 初始化完成");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 处理 GET 请求
}
}
servlet之init注意事项
-线程安全:`init` 方法是单线程
即在 `init` 方法执行期间,容器不会处理其他请求
因此,`init` 方法应该尽量快地完成初始化工作,避免阻塞容器启动。
-异常处理:
如果 `init` 方法抛出 `ServletException`
或 `UnavailabilityException`,容器将标记该 Servlet 为不可用,
并不再转发请求给它。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


