• Servlet学习(四):urlPattern配置与XML配置


    1、urlPattern配置

    Servlet类编写好后,要想被访问到,就需要配置其访问路径(urlPattern

    • 一个Servlet,可以配置多个urlPattern

      package com.itheima.web;
      
      import javax.servlet.ServletRequest;
      import javax.servlet.ServletResponse;
      import javax.servlet.annotation.WebServlet;
      
      /**
      * urlPattern: 一个Servlet可以配置多个访问路径
      */
      @WebServlet(urlPatterns = {"/demo1","/demo2"})
      public class ServletDemo7 extends MyHttpServlet {
      
          @Override
          protected void doGet(ServletRequest req, ServletResponse res) {
              
              System.out.println("demo1 get...");
          }
          @Override
          protected void doPost(ServletRequest req, ServletResponse res) {
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
    • urlPattern配置规则

      • 精确匹配

        在这里插入图片描述

        /**
         * UrlPattern:
         * * 精确匹配
         */
        @WebServlet(urlPatterns = "/user/select")
        public class ServletDemo8 extends MyHttpServlet {
        
            @Override
            protected void doGet(ServletRequest req, ServletResponse res) {
        
                System.out.println("demo8 get...");
            }
            @Override
            protected void doPost(ServletRequest req, ServletResponse res) {
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
      • 目录匹配

        在这里插入图片描述

        package com.itheima.web;
        
        import javax.servlet.ServletRequest;
        import javax.servlet.ServletResponse;
        import javax.servlet.annotation.WebServlet;
        
        /**
         * UrlPattern:
         * * 目录匹配: /user/*
         */
        @WebServlet(urlPatterns = "/user/*")
        public class ServletDemo9 extends MyHttpServlet {
        
            @Override
            protected void doGet(ServletRequest req, ServletResponse res) {
        
                System.out.println("demo9 get...");
            }
            @Override
            protected void doPost(ServletRequest req, ServletResponse res) {
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
      • 扩展名匹配

        在这里插入图片描述

        package com.itheima.web;
        
        import javax.servlet.ServletRequest;
        import javax.servlet.ServletResponse;
        import javax.servlet.annotation.WebServlet;
        
        /**
         * UrlPattern:
         * * 扩展名匹配: *.do
         */
        @WebServlet(urlPatterns = "*.do")
        public class ServletDemo10 extends MyHttpServlet {
        
            @Override
            protected void doGet(ServletRequest req, ServletResponse res) {
        
                System.out.println("demo10 get...");
            }
            @Override
            protected void doPost(ServletRequest req, ServletResponse res) {
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22

        访问路径http://localhost:8080/web-demo/任意.do

        注意:

        1. 如果路径配置的不是扩展名,那么在路径的前面就必须要加/否则会报错
        2. 如果路径配置的是*.do,那么在*.do的前面不能加/,否则会报错
      • 任意匹配

        在这里插入图片描述

        package com.itheima.web;
        
        import javax.servlet.ServletRequest;
        import javax.servlet.ServletResponse;
        import javax.servlet.annotation.WebServlet;
        
        /**
         * UrlPattern:
         * * 任意匹配: /
         */
        @WebServlet(urlPatterns = "/")
        public class ServletDemo11 extends MyHttpServlet {
        
            @Override
            protected void doGet(ServletRequest req, ServletResponse res) {
        
                System.out.println("demo11 get...");
            }
            @Override
            protected void doPost(ServletRequest req, ServletResponse res) {
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        package com.itheima.web;
        
        import javax.servlet.ServletRequest;
        import javax.servlet.ServletResponse;
        import javax.servlet.annotation.WebServlet;
        
        /**
         * UrlPattern:
         * * 任意匹配: /*
         */
        @WebServlet(urlPatterns = "/*")
        public class ServletDemo12 extends MyHttpServlet {
        
            @Override
            protected void doGet(ServletRequest req, ServletResponse res) {
        
                System.out.println("demo12 get...");
            }
            @Override
            protected void doPost(ServletRequest req, ServletResponse res) {
            }
        }
        
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
        • 16
        • 17
        • 18
        • 19
        • 20
        • 21
        • 22
        • 23

        注意://*的区别?

        1. 当我们的项目中的Servlet配置了 “/”,会覆盖掉tomcat中的DefaultServlet,当其他的url-pattern都匹配不上时都会走这个Servlet

        2. 当我们的项目中配置了"/*",意味着匹配任意访问路径

        3. DefaultServlet是用来处理静态资源,如果配置了"/"会把默认的覆盖掉,就会引发请求静态资源的时候没有走默认的而是走了自定义的Servlet类,最终导致静态资源不能被访问

      • 五种配置的优先级为 精确匹配 > 目录匹配 > 扩展名匹配 > /* > /

    2、XML配置

    前面对应Servlet的配置,我们都使用的是@WebServlet,这个是Servlet从3.0版本后开始支持注解配置,3.0版本前只支持XML配置文件的配置方法。

    对于XML的配置步骤有两步:

    • 编写Servlet类
    package com.itheima.web;
    
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebServlet;
    
    public class ServletDemo13 extends MyHttpServlet {
    
        @Override
        protected void doGet(ServletRequest req, ServletResponse res) {
    
            System.out.println("demo13 get...");
        }
        @Override
        protected void doPost(ServletRequest req, ServletResponse res) {
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 在web.xml中配置该Servlet
    
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
        
        
        
        
        <servlet>
            
            <servlet-name>demo13servlet-name>
            
            <servlet-class>com.itheima.web.ServletDemo13servlet-class>
        servlet>
    
        
        <servlet-mapping>
            
            <servlet-name>demo13servlet-name>
            
            <url-pattern>/demo13url-pattern>
        servlet-mapping>
    web-app>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    技术分享 | app自动化测试(Android)-- 特殊控件 Toast 识别
    MySQL数据库优化的几种方式(笔面试必问)
    【Prometheus】Relabeling机制
    leetcode 33. 搜索旋转排序数组
    时间序列(三):多变量回归
    每日一题9.17打家劫舍2
    组合数(1) 用Vector实现获取所有组合数列表的QT实现
    openHarmony UI开发
    【洛谷】P5149 会议座位
    python第三方库pygame的使用
  • 原文地址:https://blog.csdn.net/john1516/article/details/126843524