Servlet的三种映射方式、创建时机及默认Servlet

不同映射方式

1)介绍
  1. 第一种
    具体名称的方式。访问的资源路径必须和映射配置完全相同
  2. 第二种
    / 开头 + 通配符的方式。只要符合目录结构即可,不用考虑结尾是什么
  3. 第三种
    通配符 + 固定格式结尾的方式。只要符合固定结尾格式即可,不用考虑前面的路径

注意:优先级问题。越是具体的优先级越高,越是模糊通用的优先级越低。第一种 -> 第二种 -> 第三种

2)第一种:具体名称的方式(精准匹配)
  • 此种方式,只有和映射配置一模一样时,Servlet才会接收和响应来自客户端的请求。

  • 例如:映射为:/servletDemo05

  • 访问URL:http://localhost:8080/servletDemo5

  • 新建ServletDemo05

    package com.lichee.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class ServletDemo05 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("ServletDemo05执行了...");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req,resp);
        }
    }
    
  • 配置Servlet

    <servlet>
        <servlet-name>servletDemo05</servlet-name>
        <servlet-class>com.lichee.servlet.ServletDemo05</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servletDemo05</servlet-name>
        <url-pattern>/servletDemo05</url-pattern>
    </servlet-mapping>
    
3)第二种:/开头+通配符的方式
  • 此种方式,只要符合目录结构即可,不用考虑结尾是什么。

  • 例如:映射为:/*

  • 访问URL:http://localhost:8080/servlet/lichee

    ​ http://localhost:8080/servlet/test

  • 这两个URL都可以。因为用的*,表示/servlet/后面的内容是什么都可以。

  • 我们还是使用ServletDemo05,只需要修改配置即可(把上一个具体名称的配置屏蔽掉)

    <servlet>
        <servlet-name>servletDemo05</servlet-name>
        <servlet-class>com.lichee.servlet.ServletDemo05</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servletDemo05</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
    
4) 第三种:通配符+固定格式结尾
  • 此种方式,只要符合固定结尾格式即可,其前面的访问URI无须关心(注意协议,主机和端口必须正确)

  • 例如:映射为:*.do

  • 访问URL:http://localhost:8080/aaa.do

    ​ http://localhost:8080/bbb.do

  • 这两个URL都可以方法。因为都是以.do作为结尾,而前面用*号通配符配置的映射,所有无须关心。

  • 依然使用ServletDemo05,修改配置即可

    <servlet>2
        <servlet-name>servletDemo05</servlet-name>
        <servlet-class>com.lichee.servlet.ServletDemo05</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servletDemo05</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    

Servlet创建时机

  1. 第一次访问时创建

优势:减少对服务器内存的浪费。提高了服务器启动的效率

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

  1. 服务器加载时创建

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

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

  • 修改 Servlet 创建时机。在<servlet>标签中,添加<load-on-startup>标签。

  • 正整数代表服务器加载时创建,值越小、优先级越高。 负整数或不写代表第一次访问时创建

    • <load-on-startup>加载顺序的序号</load-on-startup>
    • 序号为1,就是服务器启动时第一个加载
    • 序号为2,就是服务器启动时第二个加载
  • 如果两个Servlet都要配置为正整数,那么值小的优先级高

  • 配置:修改ServletDemo3的配置,增加load-on-startup

    <!--演示Servlet生命周期的配置-->
    <servlet>
        <servlet-name>servletDemo03</servlet-name>
        <servlet-class>com.lichee.servlet.ServletDemo03</servlet-class>
        <!--配置Servlet启动时机 正整数代表服务器启动时创建,负数或不写代表第一次访问时创建-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>servletDemo03</servlet-name>
        <url-pattern>/servletDemo03</url-pattern>
    </servlet-mapping>
    
  • 效果:如果不配置,是在访问ServletDemo3 的时候初始化,如果配置,那就是在启动tomcat的时候初始化

默认Servlet

  • 默认Servlet是由服务器提供的一个Servlet,它配置在Tomcat的conf目录下的web.xml中。

  • 它的映射路径是<url-pattern>/<url-pattern>,我们在发送请求时,首先会在我们项目中的 web.xml 中查找映射配置,找到则执行。

  • 但是当找不到对应的 Servlet 路径时,就去找默认的 Servlet,由默认 Servlet 处理。所以,一切都是 Servlet。

  • 如果我们访问一个不存在的url,浏览器会加载一个404界面,这个404界面,其实就是tomcat配置的默认的Servlet处理的结果。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值