Servlet 生命周期
Servlet
服务端程序
提供其服务的服务器叫容器 tomcat
工作流程
locahost:8080/projectName/资源名
生命周期
Servlet没有main方法,不能独立运行,它的运行完全由Servlet引擎来控制和调度。所谓生命周期, 指的是servlet容器何时创建servlet 实例、何时调用其方法进行请求的处理、何时并销毁其实例的整个过程。
●实例和初始化时机
当请求到达容器时,容器查找该servlet对象是否存在,如果不存在,则会创建实例并进行初始化。
●就绪/调用/服务阶段
有请求到达容器,容器调用servlet对象的service0方法处理请求的方法在整个生命周期中可以被多次调用:
HttpServlet的service()方法,会依据请求方式来调用doGet()或者doPost()方法。但是,这两个do方法默认情况下,会抛出异常,需要子类去override.
●销毁时机
当容器关闭时(应用程序停止时),会将程序中的 Servlet实例进行销毁。
上述的生命周期可以通过Servlet中的生命周期方法来观察。在Servlet中有三个生命周期方法,不由用户手动调用,而是在特定的时机有容器自动调用,观察这三个生命周期方法即可观察到Servlet的生命周期。
容器和Servlet如何工作
- Web Client问Servlet容器(Tomcat) 发出Http请求
- Servlet容器接收Web Client的请求
- Servlet容器创理一个HttpServletRequest对象,将Web Client 请求的信息封装到这个对象中
- Servlet容器创建一个HttpServletResponse对象
- Servlet容器调用HttpServlet对象service方法,把Request与Response作为参数,传给HttpServlet
- Httpservlet调用HttpServletRequest对象的有关方法,获取Http请求信息
package com.xxxx.servlet;
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;
/**
* 继承HttpServlet类
* 重写service方法 可以请求
* 设置注解 指定访问的路径
*/
//@WebServlet(name="WebName",value={"/dem0","/d1"})
//@WebServlet(urlPatterns = "/demm")
@WebServlet("/demo1")
public class Servlet1 extends HttpServlet {
/**
* 服务方法 用来处理请求数据
* 系统方法 服务器自动调用
* 当请求到达Servlet时 执行
* 会多次调用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Hello Servlet");
//通过流输出数据到浏览器
resp.getWriter().write("Hello Servlet");
}
/**
* 初始化方法
* 系统方法 服务器自动执行
* 请求到达Servlet容器时,Servlet容器会判断Servlet对象是否存在,不存在自动创建
* 一个生命周期只会调用一次
* @throws ServletException
*/
@Override
public void init() throws ServletException {
System.out.println("init");
}
/**
* 销毁方法
* 系统方法 服务器自动调用
* 当服务器关闭或程序停止执行
* 一个生命周期只会调用一次
*/
@Override
public void destroy() {
System.out.println("destroy");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)