zoukankan      html  css  js  c++  java
  • 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>

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

    All that work will definitely pay off
  • 相关阅读:
    MyBatis学习总结——MyBatis快速入门
    Java网络socket编程详解
    java中导出EXCEL表格
    利用反射将xml转换为List<Object>
    Java中将xml转为List<实体类>
    JavaWeb | 之 | 角色管理的表结构设计和原理
    fastjson把对象转化成json避免$ref
    JSON解析(DATE)对象数据
    jstl中<c:forEach>的用法
    请求转发与请求重定向的区别
  • 原文地址:https://www.cnblogs.com/afangfang/p/12711430.html
Copyright © 2011-2022 走看看