Servlet配置及生命周期

1.设置Ecilipse快捷  file new

2.创建Servlet程序

        1). 创建一个 Servlet 接口的实现类.
             public class HelloServlet implements Servlet

        2). 在 web.xml 文件中配置和映射这个 Servlet

 HelloServlet.java

package com.aff.javaweb;

import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HelloServlet implements Servlet {
    @Override
    public void destroy() {
        System.out.println("destory");

    }

    @Override
    public ServletConfig getServletConfig() {
        System.out.println("getServletConfig");

        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void init(ServletConfig arg0) throws ServletException {
        System.out.println("init");
    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
        System.out.println("service");
    }

    public HelloServlet() {
        System.out.println("HelloServlet的构造器");
    }
}

 

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <!--配置和映射servlet -->
    <servlet>
        <!-- Servlet 注册的名字 -->
        <servlet-name>HelloServlet</servlet-name>
        <!--Servlet的全类名 -->
        <servlet-class>com.aff.javaweb.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <!-- 需要和某一个 servlet 节点的 serlvet-name 子节点的文本节点一致 -->
        <servlet-name>HelloServlet</servlet-name>
        <!-- 映射具体的访问路径: / 代表当前 WEB 应用的根目录. -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

 

运行:

 服务关闭调用destory方法

配置和映射servlet

3. Servlet 容器: 运行 Servlet、JSP、Filter 等的软件环境.
               1). 可以来创建 Servlet, 并调用 Servlet 的相关生命周期方法.
               2). JSP, Filter, Listener, Tag ...


4. Servlet 生命周期的方法: 以下方法都是由 Serlvet 容器负责调用.

                1). 构造器: 只被调用一次. 只有第一次请求 Servlet 时, 创建 Servlet 的实例. 调用构造器.
                     这说明 Serlvet 的单实例的!(说明存在线程安全的问题)
                2). init 方法: 只被调用一次. 在创建好实例后立即被调用. 用于初始化当前 Servlet.
                3). service: 被多次调用. 每次请求都会调用 service 方法. 实际用于响应请求的.
                4). destroy: 只被调用一次. 在当前 Servlet 所在的 WEB 应用被卸载前调用. 用于释放当前

                     Servlet 所占用的资源.

 

5. load-on-startup 参数:
                 1). 配置在 servlet 节点中:

<servlet>
        <!-- Servlet 注册的名字 -->
        <servlet-name>secondServlet</servlet-name>
        <!-- Servlet 的全类名 -->
        <servlet-class>com.atguigu.javaweb.SecondServlet</servlet-class>
        <!-- 可以指定 Servlet 被创建的时机 -->
        <load-on-startup>2</load-on-startup>
</servlet>

                    2). load-on-startup: 可以指定 Serlvet 被创建的时机.若为负数, 则在第一次请求时被创建.

                        若为 0 或正数, 则在当前 WEB 应用被Serlvet 容器加载时创建实例,

                        且数组越小越早被创建.

 

6.Servlet容器响应客户请求的过程

    ①Servlet引擎检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。

    ②装载并创建该Servlet的一个实例对象:调用该 Servlet 的构造器

    ③调用Servlet实例对象的init()方法。

    ④创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象,

       然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。

    ⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,

       并在卸载之前调用Servlet的destroy()方法。

 

7. 关于 serlvet-mapping:

           1). 同一个Servlet可以被映射到多个URL上,

                即多个 <servlet-mapping> 元素的<servlet-name>子元素的设置值可以是同一个
                Servlet的注册名。

          2). 在Servlet映射到的URL中也可以使用 * 通配符,但是只能有两种固定的格式:
                一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。

<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

OR

<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

注意: 既带 / 又带扩展名的不合法.

 

posted @ 2020-04-16 11:17  林淼零  阅读(198)  评论(0编辑  收藏  举报