Servlet生命周期、配置、创建时机及默认Servlet

简介: Servlet生命周期、配置、创建时机及默认Servlet

一、Servlet生命周期


生命周期图示:


 


Servlet生命周期大致分为三个阶段,分别是初始化阶段,运行阶段,销毁阶段


1、初始化阶段:


当客户端向Servlet容器发出HTTP请求访问Servlet时,Servlet容器首先解析请求,检查内存中是否已经有了该Servlet对象,如果有,直接使用该Servlet对象;如果没有,就创建Servlet实例对象,然后通过调用init()方法完成Servlet初始化。需要注意,在Servlet整个生命周期内,它的init()方法只被调用一次

2、运行阶段:


Servlet容器会为客户端请求创建代表HTTP请求的ServletRequest对象和代表HTTP响应的ServletResponse对象,然后将它们作为参数传递给Servlet的service()方法。service()方法从ServletRequest对象中获取客户端请求并处理该请求,通过ServletResponse对象生成响应结果。在Servlet整个生命周期内,对于Servlet的每一次访问请求,Servlet容器都会调用一次Servlet的service()方法,并且创建新的ServletRequest和ServletResponse对象。即service()方法在Servlet整个生命周期中会被调用多次


3、销毁阶段:


当服务器关闭或者Web应用被移除出容器时,Servlet随着Web应用的销毁而销毁。在销毁Servlet之前,Servlet容器会调用Servlet的destroy()方法,以便让Servlet对象释放它所占用的资源。在Servlet的整个生命周期中,destroy()方法也只被调用一次。注意,Servlet对象一旦创建就会驻留在内存中等待客户端的访问,直到服务器关闭或Web应用被移除出容器时Servlet对象才会销毁


二、Servlet配置


使用web.xml配置Servlet


1、在web.xml文件中,通过 <servlet></servlet> 标签进行注册,<servlet>标签下包含若干个子元素,功能如下


元素 类型 描述
<servlet-name></servlet-name> String 指定Servlet名称,一般与Servlet类同名,要求唯一
<servlet-class></servlet-class> String 指定Servlet位置,一般是全类名
<description> </description> String 指定Servlet的描述信息
<display-name></display-name> String 指定Servlet的显示名


2、 把Servlet映射到URL地址,使用 <servlet-mapping></servlet-mapping> 进行映射,在<servlet-mapping>元素下使用 <servlet-name></servlet-name> 指出Servlet的名称,需要和之前在<servlet>标签下注册的相同;使用 <url-pattern></url-pattern> 映射URL地址,地址前必须添加/


3、实例


<servlet>
    <!--指出Servlet名称-->
    <servlet-name>ServletDemo01</servlet-name>
    <!--指出Servlet全类名-->
    <servlet-class>com.demo.ServletDemo01</servlet-class>
</servlet>
    <servlet-mapping>
    <!--和servlet标签下的名称一致-->
    <servlet-name>ServletDemo01</servlet-name>
    <!--映射地址,必须加斜杠-->
    <url-pattern>/ServletDemo01</url-pattern>
</servlet-mapping>


使用注解配置Servlet


1、@WebServlet注解用于代替web.xml文件中的 <servlet> 、 <servlet-mapping> 等标签,该注解会在项目部署时被容器处理,容器会根据具体的属性配置将相应的类部署为Servlet,@WebServlet注解常用属性如下


2、常用属性


属性声明 功能
String name 指定Servlet的name属性,等价于<servlet-name>,如果没有显式指定则取值为类的全限定名
String[] value 等价于<url-pattern>
String[] urlPatterns 和value功能一样,value和urlPatterns不能同时使用
int loadOnStartup 指定Servlet的加载时机,等价于<load-on-startup>
WebInitParam[] initParams 指定一组Servlet初始化参数,等价于<init-param>,其中WebInitParam也是一种注解


3、实例


@WebServlet(name = "ServletDemo01",urlPatterns =
"/ServletDemo01",initParams = {@WebInitParam(name =
"encoding",value = "UTF-8"),@WebInitParam(name = "desc",value =
"this is ServletDemo01")})
public class ServletDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ServletDemo01运行了");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}


三、Servlet创建时机


● 第一次访问时创建


优势:减少服务器内存的浪费


弊端:如果有一些需要在应用加载时就做的初始化操作,无法完成


● 服务器加载时创建


优势:提前创建好对象,提高首次执行时的效率,可以完成一些应用加载时要做的初始化工作


弊端:对服务器内存占用较多,影响服务器启动效率


● 修改Servlet创建时机:在web.xml文件的<servlet>标签中添加 <load-on-startup></load-on-startup> 标签,标签中间填写的是整数,正整数表示在服务器加载时创建,值越小优先级越高,负整数或者不填表示第一次访问时创建


四、默认Servlet


● 默认Servlet是服务器提供的一个Servlet,它配置在Tomcat的conf目录中的web.xml文件中


● 它的映射路径是 <url-pattern>/</url-pattern> ,在接收请求时,首先会在项目中的web.xml文件查找映射配置,找到则执行,找不到时再去找默认的Servlet,由默认Servlet处理


目录
相关文章
|
24天前
Servlet生命周期
Servlet生命周期
11 1
|
1月前
|
Java 数据库连接 容器
Servlet的生命周期
Servlet的生命周期
13 0
|
4月前
|
Java 数据库连接 容器
8:Servlet生命周期-Java Web
8:Servlet生命周期-Java Web
28 0
|
6月前
|
前端开发 应用服务中间件 C++
使用Servlet实现表白墙网站(前后端互联)小项目,Mac的M1(没有setting)在哪里找到Setting页面,下载smart tomcat及smart tomcat的配置。(二)
使用Servlet实现表白墙网站(前后端互联)小项目,Mac的M1(没有setting)在哪里找到Setting页面,下载smart tomcat及smart tomcat的配置。
使用Servlet实现表白墙网站(前后端互联)小项目,Mac的M1(没有setting)在哪里找到Setting页面,下载smart tomcat及smart tomcat的配置。(二)
|
6月前
06JavaWeb基础 - Servlet的配置
06JavaWeb基础 - Servlet的配置
27 0
|
11天前
|
Java 容器
Servlet 教程 之 Servlet 生命周期 6
Servlet生命周期包括:初始化(调用`init()`)、处理请求(通过`service()`)、销毁(调用`destroy()`),最终由JVM垃圾回收。当首个请求到达时,容器加载Servlet,后续请求多线程共享同一实例,每次请求调用`service()`。
18 6
|
12天前
|
Java
Servlet 教程 之 Servlet 生命周期 3
Servlet生命周期包括初始化(init())、服务(service())和销毁(destroy())三个阶段。doGet()方法处理GET请求,接收HttpServletRequest和HttpServletResponse参数。当Servlet不再使用时,由JVM的垃圾回收器自动清理。
23 5
|
6月前
|
JSON 前端开发 JavaScript
使用Servlet实现表白墙网站(前后端互联)小项目,Mac的M1(没有setting)在哪里找到Setting页面,下载smart tomcat及smart tomcat的配置。(一)
使用Servlet实现表白墙网站(前后端互联)小项目,Mac的M1(没有setting)在哪里找到Setting页面,下载smart tomcat及smart tomcat的配置。
|
7月前
|
IDE Java 项目管理
【Maven】Maven的新建、使用、安装配置、集成配置到eclipse,Maven项目测试servlet,Maven容易出现的问题
Maven是一个流行的构建工具和项目管理工具,它能够自动处理项目的编译、依赖管理和构建部署等任务。通过使用Maven,开发人员可以更轻松地管理和构建Java项目,而不必手动解决复杂的依赖关系。Maven是一个Java项目管理工具,它提供了一种结构化的方法来管理项目的构建、依赖、文档和发布等方面的工作。它基于项目对象模型(Project Object Model,POM)的概念,通过配置文件来定义项目的构建和行为。Maven将项目的构建过程自动化,并提供了许多插件和功能来简化开发人员的工作。
|
7月前
|
Java 应用服务中间件 数据库连接
Servlet生命周期
Servlet生命周期
47 0