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

目录

一、Servlet生命周期

二、Servlet配置

使用web.xml配置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处理

猜你喜欢

转载自blog.csdn.net/m0_61961937/article/details/126979992
今日推荐