Servlet 执行流程 生命周期 方法介绍
目录
- 1 执行流程
- 2 生命周期
- 3 方法介绍
1 执行流程
Servlet由谁创建?Servlet方法由谁调用?
Servlet由web服务器创建,Servlet方法由web服务器调用
服务器怎么知道Servlet中一定有service方法?
因为我们自定义的Servlet,必须实现Servlet接口并且复写其方法,而Servlet接口中有service方法
2 生命周期
对象的生命周期指一个对象从被创建到被销毁的整个过程
Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为四个阶段:
- 加载和实例化:默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象
可以使用loadOnStartup
来更改Servlet对象创建时机
@WebServlet(urlPatterns = "/demo",loadOnStartup = 1)
负整数:第一次被访问时创建Servlet对象
0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高
- 初始化:在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,完成一些如加载 配置文件、创建连接等初始化的工作,该方法只调用一次
- 请求处理:每次请求Servlet时,Servlet容器都会调用Servlet的service()方法对请求进行处理
- 服务终止:当需要释放内存或者容器关闭时,容器就会调用Servlet实例,该实例随后会被Java的垃圾收集器所回收
直接点击这个红色按钮,是不是执行destroy
方法的,因为这个相当于强制关闭,拔掉电源,他这个逻辑不会执行
可以通过命令行的mvn tomcat7:run
来演示
使用ctrl+c
进行停止
编辑如下代码:
package com.tsg.web;import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;@WebServlet("/demo2")
public class ServletDemo2 implements Servlet {public void init(ServletConfig servletConfig) throws ServletException {System.out.println("init");}public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("servlet hello world");}public void destroy() {}public ServletConfig getServletConfig() {return null;}public String getServletInfo() {return null;}}
启动程序并且浏览器访问
刷新多次,会发现init方法只执行一次,service方法多次执行
使用loadOnStartup
来进行更改对象创建时机
@WebServlet(urlPatterns = "/demo2" , loadOnStartup = 1)
启动程序:
3 方法介绍
void init(ServletConfig config)
初始化方法,在Servlet被创建时执行,只执行一次
void service(ServletRequest req,ServletResponse res)
提供服务方法,每次Servlet被访问,都会调用该方法
void destroy()
销毁方法,当Servlet被销毁时,调用该方法,在内存释放或服务器关闭时销毁Servlet
ServltConfig getServletConfig()
获取ServletConfig对象
String getServletInfo()
获取Servlet信息