目录
一、Tomcat服务器启动
(1)使用命令startup.bat启动Tomcat服务器,Tomcat服务器查找扫描webapps目录下的web工程项目同时初始化Tomcat服务器配置参数的资源信息。
(2)Tomcat服务启动连接成功后,不会执行创建Servlet实现类的实例对象,也就不会调用Servlet实现类的无参构造方法,而主要负责解析web.xml文件,将全部Servlet相关的映射信息中的<url-pattern>路径值与<servlet-class>完全限定名称值,解析后以键值对(key,value)形式存放在HashMap集合中,Tomcat不关闭或者不重启,HashMap集合装载映射数据一直存储。
(3)HashMap集合只存放路径和类的对照关系,不是对象数据本身。
二、Servlet生命周期
(1)实现jakarta.servlet.Servlet接口,需要重写5个实例方法,实现类必然需要创建对象才能调用。如下所示:
package jakarta.servlet;
import java.io.IOException;
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
(2)第一次请求:用户在浏览器输入IP:端口/<url-pattern>路径值,点击回车。Tomcat服务器立刻接手到浏览器的request请求。
(3)重点来了!重点来了!重点来了!——Tomcat依据请求携带参数的端口号找到webapps中与之对应的web应用软件,截取<url-pattern>路径值,作为HashMap集合中的key值进行查询匹配,匹配无key就报错(404),匹配有key,就取出对应的value值(<servlet-class>完全限定名称值),利用Java反射机制,创建Servlet实现类的实例对象,同时只调用init()实例方法一次,初始化Servlet实例对象。再调用service()响应servlet请求。
(4)第二次或多次请求:不再创建Servlet实例对象和调用init()实例方法,仅调用service()实例方法,请求n次,就调用service()实例方法。
(5)关闭Tomcat服务:关闭前调用一次destroy()实例方法。destroy()因调用之前Sverlet对象还存在,通过对象才能调用destroy(),所以结束之后才执行销毁对象。
(6)HashMap是存储有Servlet对照映射关系的对象集合,该对象集合在堆内存中占有内存空间,关闭服务,就释放占有的内存资源。