/和/*的区别记不住?我的答案保你终身难忘

  发布时间:2026-11-16   作者:玩站小弟   我要评论
谷歌霸屏程序【tg:seogoogle987】。

前言

你好,我是YourBatman。

这次的标题??吹得有点大,倍感压力。不过没关系,毕竟吹牛不用上睡,也不犯法。在信息大爆炸的时代,连技术圈的标题党也不少啦:

30分钟教你手撸一个ORM框架。其实就一个反射注解拼接字符串 5分钟教你玩转Docker。额,5分钟后包就业吗? 玩转亿级流量高并发缓存方案。全国(乃至全球)能达如此流量级别的屈指可数,你确定? ...

我标榜自己从不标题党,是的这次也不例外。本文将分析/和/*的区别这个老生常谈的问题,看别的博文总是/和看了忘忘了看,本文不同的是,关于此问题这一篇文章就够了,它将成为你的永久记忆(一不小心又吹牛了??)

本文提纲

版本约定 JDK:8 Servlet:4.x tomcat:9.x 正文

什么样的答案终身难忘?学生时代关于记忆经常能听见两种论调:

死记硬背:见效快,但也忘得快,且一般不会灵活运用(指标不治本)

理解性记忆:见效慢,但记忆持久且会灵活运用(治标又治本)

如果是你,你愿意pick哪种?

正所谓授人以鱼不如授人以渔,后者方能形成永久记忆。不谋而合,本文将采用后种讲/*述方式,帮你记忆持久化。

关于/和/*的区别这个问题,依稀记得2015年我自学那会就能把它俩搞得明明白白,并且通过理解形成了“永久记忆”,所以至那会其就从来没有犯过迷糊,难道我就这么重视基础么(md,又在吹牛。。。)

点拨“市面上”的错误答案

如果用谷歌百度一下关键字:/和/*的区别,搜索出来的答案不客气的说,基本全错!!! 错误的姿势基本还一模一样,原因你懂的。

各种错误case,且听我娓娓道来。搜集了下有如下4种主流答案,一一点拨。

环境说明:使用原生Se的区rvlet,war包方式部署至外置Tomcat作为服务器,端口号8080,context-path为:appcontext

1、/用于Servlet,/*用于Filter

反例:

@WebFilter(urlPatterns = {"/*"}) public class FakeServlet extends HttpServlet {  &n别记bsp;   @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { &nb不住sp;       System.out.println("FakeServlet收到请求:" + req.getRequestURI());     } } 

启动服务器,浏览器访问:http://localhost:8080/appcontext/api/demo1,控制台输出:

FakeSe?我rvlet收到请求:/appcontext/api/demo1 

一般来讲/确实用于Servlet,/*用于Filter,但并不代表这是正确的。

说明:Filter路径模式使用/无效

2、/不会匹配.jsp请求,而/*可以匹配到.jsp请求

这个结论表面上看没有问题,但是往深了想一步,是否能够推导出这个结论:“/不会匹配.html请求,而/*可以匹配到.html请求”。试试看:

@WebServlet(urlPatterns = &#的答123;"/"}) public class FakeServlet extends HttpServlet {      @Override     protected void doGet(HttpServletRequest req,&n案保bsp;HttpServletResponse resp) throws ServletException, IOException {         System.out.println("FakeServlet收到请求:" + req.getRequestURI());&nb你终sp;    } }  @WebFilter(urlPatterns = {"/*"}) public class FakeFilter extends HttpFilter {      @Override  身难   protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException {   &nb/和sp;     System.out.println("FakeFilter收到请求:" + req.getRequestURI());         super.doFilter(req, res, chain);     /*} } 

启动服务器,浏览器访问:http://localhost:8080/appcontext/api/demo1.jsp,控制台输出:

FakeFilter收到请求:/appcontext/api/demo1.jsp 

servlet并未匹配上,似乎符合此结论:/不会匹配.jsp请求,而/*可以。

浏览器再访问:http://localhost:8080/appcontext/api/demo1.html,控制台输出:

Fak的区eFilter收到请求:/appcontext/api/demo1.html  FakeServlet收到请求:/appcontext/api/demo1.html 

Filter和Servlet都匹配成功,破功了吧!

所以说,局限于该回答本身没有问题,而问题在于.jsp后缀是一种特殊的请求,拿特殊案例当做通用结论肯定是站不住脚的。

3、/*匹配范围比/大

通过本文下面的讲解你就会知道:/属于最大的的匹配范围,而/*恰好是范围和/别记一样了而已,但/*的优先级比/高,并不是它的匹配范围比/大。

4、/匹配所有url(路径+后缀),/*只匹配路径型

用一句话反驳:/*也能匹配上/api/demo1.html这种后缀型url(其实上面已经给出示例了)

这4个结论搜索排名非常靠前,不知误导了多少小朋友呀。与其每次将信将疑,倒不如花点时间写代码自己做个试验来得靠谱。我一向推崇的代码多动手,人云亦云不如自己来上一发。

 

  • Tag:

相关文章

  • 为什么说微软收购Nuance公司是一件大事

    微软公司日前宣布以197亿美元的巨资收购Nuance公司,该公司主要提供语音识别和人工智能对话服务。Nuance公司以其深度学习语音转录服务而闻名,该服务在医疗保健领域很受欢迎。 这两家公司在收购之前
    2026-11-16
  • 奇瑞墨甲机器人实现 L3 级别!未来将着眼于多个行业应用

    在10月19日举行的全球发布会上,奇瑞墨甲机器人宣布其技术实现了从 L2到 L3的重大飞跃。这一进展标志着奇瑞在智能机器人领域的布局正在加速,未来将着眼于多个行业应用。 奇瑞汽车集团董事长尹同跃表示,
    2026-11-16
  • 云计算开发:Python3-find()方法详解

    描述 find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串
    2026-11-16
  • 微软 Edge 新策略:在访问 AI 应用时推介 Copilot

    微软正在通过其 Edge 浏览器采取一种新策略,试图吸引用户使用其 AI 工具 Copilot。当用户在 Edge 浏览器中访问像 ChatGPT、DeepSeek 和 Perplexity 等 AI
    2026-11-16
  • 标签: 追觅科技 俞浩 围脖侠 清朗行动

    云梦级6月10日云梦级消息,微博平台官方账号@围脖侠 发文表示,经核实,账号@俞浩-爱送黄金 被某企业投诉,其作为网络名人账号以“喊话”等形式发布质疑、拉踩企业的违规内容,因违反中央网信办“清朗·优化
    2026-11-16
  • 微软宣布以197亿美元现金收购语音识别巨头Nuance

    新浪科技讯 北京时间4月12日晚间消息,微软(Nasdaq:MSFT)和Nuance Communications公司(Nasdaq:NUN)今日宣布,双方已达成最终协议,微软将以197亿美元现金收购
    2026-11-16

最新评论