工作流程和生命周期
- 通过请求头得知浏览器访问的是哪个主机 (request headers //host )
- 通过请求头知道访问的是哪一个web项目,资源
- 通过获取到的资源路径在配置中匹配到真实的路径
- 服务器会创建对应的Servlet对象,(第一次访问会创建,Servlet实例,第二次调用init方法进行初始化)
- 调用Service(request,response 接受,响应)
- 调用service完毕后返回服务器,由服务器将response缓冲区数据取出,以http响应的格式发送给浏览器。
Servlet的生命周期
- Servlet没有main()方法,不能独立运行,运行完全由Servlet引擎控制调度,此处生命周期研究的是Servlet容器何时创建servlet实例,调用其方法进行请求的处理,何时销毁其实例的整个过程。
- 实例和初始化时机 当请求到达容器时,容器查找Servlet对象是否存在,若不存在,则会创建实例并进行初始化。
- 就绪、调用、服务阶段 当有请求到达容器时,容器调用service方法,可以被多次调用;service方法中,会依据请求方式不同调用doGet、doPost方法,(可以重写这俩方法,但一般重写service直接。)
- 销毁时机 关闭服务器,执行一次
package Servlet_demo; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * Servlet的生命周期 * 1.初始化 init 只会执行一次,第一次访问servlet触发第一次调用service方法会调用 * 2.就绪、调用、 service 执行多次,当有请求访问servlet时,就会调用 * 3.销毁 destroy 服务器自动调用,执行一次,服务器关闭或异常时触发 * */ @WebServlet("/ser03") public class Servlet03 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("Service"); } @Override public void init() throws ServletException { System.out.println("初始化方法"); } @Override public void destroy() { System.out.println("销毁方法"); } }
总结
- 1 客户端向Servlet容器发送http请求
- 2 Servlet容器接受客户端的请求
- 3 容器创建一个HttpServletRequest对象,将客户端请求封装到这个对象中
- 4 容器创建一个HttpServletResponse对象
- 5 容器调用Servlet对象service方法,把Request与Response作为参数,传给HttpServlet
- 6 HttpServlet调用HttpServletRequest对象有关方法,获取http请求信息。
- 7 调用HttpResponse对象有关的方法,生成响应的数据
- 8 容器把响应的结果传给客户端。