Mapping问题之映射路径问题★★★★★


声明

本文部分内容参考自其他作者原创文章,仅供个人学习留档,特此声明

参考文章链接

(1条消息) B站---【狂神说Java】JavaWeb入门到实战---笔记_夜里的雨的博客-CSDN博客_狂神说java笔记

映射路径问题

1.一个servlet可以指定一个映射路径


    hello
    /hello

2.一个servlet可以指定多个映射路径


    hello
    /hello1


    hello
    /hello2


    hello
    /hello3


    hello
    /hello4

在地址栏输入 localhost:8080/servlet-001/hello1(2,3,4) 都会访问到 servlet-001 这个文件夹下的我们自己写的class程序(HelloServlet)

测试一下


3.一个servlet可以指定通用映射路径


    hello
    /hello/*

在地址栏输入 localhost:8080/servlet-001/hello/任意内容 都会访问到 servlet-001 这个文件夹下的我们自己写的class程序(HelloServlet),这个任意内容可以为空,也就是说我输入localhost:8080/servlet-001/hello 也是可以访问成功的

测试一下


4.默认请求路径(尽量不用)


    
        hello
        /*
    

在地址栏输入 localhost:8080/servlet-001/任意内容 包括 localhost:8080/servlet-001都会访问到 servlet-001 这个文件夹下的我们自己写的class程序(HelloServlet)

如上图所示,此时我们就没法访问到index.jsp的内容了

所以尽量不要这么写


5.指定一些后缀或者前缀(加前缀存疑)

  • 指定路径后缀.xypersonal

    ==注意, 前边不能加项目映射的路径==*

    错误示例

    
    	hello
        /*.xypersonal
    
    
    	hello
        /hello/*.xypersonal
    
    

    正确示例

    
    	hello
        *.xypersonal
    
    

    如下图所示,访问成功

  • 指定前缀为 xypersonal.

    
    	hello
        /xypersonal.*
    
    

    如下图所示失败了

    但是这样就成功访问到了,为什么呢?

    经过测试,所谓的加前缀必须指定固定映射路径,因为 . 和 * 一块用时 * 就不是通配符了

    也许以后随着学习理解的加深,会有更好的处理办法吧

    mark~


6.优先级问题(尽量不用)

指定的固有的映射路径优先级最高,如果找不到就会走默认的处理请求

  • 先写一个错误处理类,当输入的网址不是我们提前指定的映射路径时就走这个类

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     ErrorServlet类用于解决 404 not found 问题
     原理就是mapping问题中的优先级问题
     指定的固有的映射路径优先级最高,如果找不到就会走默认的处理请求;
     */
    
    public class ErrorServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("text/html");
            resp.setCharacterEncoding("utf-8");
            PrintWriter writer = resp.getWriter();
            writer.print("

    404

    "); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }

  • 在web.xml中为新写的servlet程序注册映射路径

    
        Error
        com.xy.servlet.ErrorServlet
    
    
        Error
        /*
    
    
  • 测试:

    只要输入的网址不是我们指定的固定的映射路径,就会走我们提前写好的ErrorServlet

    • 输入正确路径

    • 输入错误路径

但是这样就存在一个很明显的问题:默认请求路径把index.jsp给覆盖掉了,我们现在进不去index.jsp网页了

如下图所示,输入index.jsp的网址也进入了这个默认网页

所以这个方法能不用就不用