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处理


目录
相关文章
|
4月前
|
Java 应用服务中间件 数据库连接
探索研究Servlet 生命周期
【9月更文挑战第22天】
61 7
|
6月前
|
Java 数据库连接 开发者
Java中的Servlet生命周期详解
Java中的Servlet生命周期详解
|
7月前
|
XML 数据格式
XML配置Servlet文件,不使用注解配置路径的方法
XML配置Servlet文件,不使用注解配置路径的方法
|
7月前
|
前端开发 应用服务中间件
servlet执行流程&生命周期
servlet执行流程&生命周期
|
7月前
Servlet的生命周期
Servlet的生命周期
|
7月前
|
Java
servlet生命周期面试题
servlet生命周期面试题
|
6月前
|
Java 数据库连接 开发者
Java中的Servlet生命周期详解
Java中的Servlet生命周期详解
|
6月前
|
XML 存储 前端开发
JavaEE:Servlet创建和使用及生命周期介绍
JavaEE:Servlet创建和使用及生命周期介绍
|
7月前
|
应用服务中间件
Servlet urlPattern配置,和不要在Servlet中配置任何匹配的原因
Servlet urlPattern配置,和不要在Servlet中配置任何匹配的原因
序-Servlet和SpringMVC的联系和区别-配置路径先想好使用的使用的方法,然后匹配的需要的技术
序-Servlet和SpringMVC的联系和区别-配置路径先想好使用的使用的方法,然后匹配的需要的技术