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的网址也进入了这个默认网页
所以这个方法能不用就不用