/和/*的区别记不住?我的答案保你终身难忘
前言
你好,我是YourBatman。
这次的标题??吹得有点大,倍感压力。不过没关系,毕竟吹牛不用上睡,也不犯法。在信息大爆炸的时代,连技术圈的标题党也不少啦:
30分钟教你手撸一个ORM框架。其实就一个反射注解拼接字符串 5分钟教你玩转Docker。额,5分钟后包就业吗? 玩转亿级流量高并发缓存方案。全国(乃至全球)能达如此流量级别的屈指可数,你确定? ...
我标榜自己从不标题党,是的这次也不例外。本文将分析/和/*的区别这个老生常谈的问题,看别的博文总是/和看了忘忘了看,本文不同的是,关于此问题这一篇文章就够了,它将成为你的永久记忆(一不小心又吹牛了??)
本文提纲
版本约定 JDK:8 Servlet:4.x tomcat:9.x 正文
什么样的答案终身难忘?学生时代关于记忆经常能听见两种论调:
死记硬背:见效快,但也忘得快,且一般不会灵活运用(指标不治本)
理解性记忆:见效慢,但记忆持久且会灵活运用(治标又治本)
如果是你,你愿意pick哪种?
正所谓授人以鱼不如授人以渔,后者方能形成永久记忆。不谋而合,本文将采用后种讲述方/*式,帮你记忆持久化。
关于/和/*的区别这个问题,依稀记得2015年我自学那会就能把它俩搞得明明白白,并且通过理解形成了“永久记忆”,所以至那会其就从来没有犯过迷糊,难道我就这么重视基础么(md,又在吹牛。。。)
点拨“市面上”的错误答案
如果用谷歌百度一下关键字:/和/*的区别,搜索出来的答案不客气的说,基本全错!!! 错误的姿势基本还一模一样,原因你懂的。
各种错误case,且听我娓娓道来。搜集了下有如下4种主流答案,一一点拨。
环境说明:使用原生Servlet的区,war包方式部署至外置Tomcat作为服务器,端口号8080,context-path为:appcontext
1、/用于Servlet,/*用于Filter
反例:
@WebFilter(urlPatterns = {"/*"}) public class FakeServlet extends HttpServlet { &nbs别记p; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { &不住nbsp; System.out.println("FakeServlet收到请求:" + req.getRequestURI()); } }
启动服务器,浏览器访问:http://localhost:8080/appcontext/api/demo1,控制台输出:
FakeServl?我et收到请求:/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()); 你终 } } @WebFilter(urlPatterns = {"/*"}) public class FakeFilter extends HttpFilter { @Override 身难 protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException { &nbs/和p; 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,控制台输出:
Fake的区Filter收到请求:/appcontext/api/demo1.html FakeServlet收到请求:/appcontext/api/demo1.html
Filter和Servlet都匹配成功,破功了吧!
所以说,局限于该回答本身没有问题,而问题在于.jsp后缀是一种特殊的请求,拿特殊案例当做通用结论肯定是站不住脚的。
3、/*匹配范围比/大
通过本文下面的讲解你就会知道:/属于最大的的匹配范围,而/*恰好是范围和/一样了别记而已,但/*的优先级比/高,并不是它的匹配范围比/大。
4、/匹配所有url(路径+后缀),/*只匹配路径型
用一句话反驳:/*也能匹配上/api/demo1.html这种后缀型url(其实上面已经给出示例了)
这4个结论搜索排名非常靠前,不知误导了多少小朋友呀。与其每次将信将疑,倒不如花点时间写代码自己做个试验来得靠谱。我一向推崇的代码多动手,人云亦云不如自己来上一发。
- ·NVIDIA GeForce RTX 3060发布日期确定2月25日
- ·Google Meet 推出 AI 妆容滤镜:开会也能“素颜变精致”
- ·云安全日报210401:思科交换机操作系统软件发现任意代码执行漏洞,需要尽快升级
- ·云计算核心技术Docker教程:Docker Hub创建一个新的服务帐户
- ·标签: 米哈游 绝区零 番鼠鉴赏家 sijsusu
- ·触目惊心!央视曝光 AI 论文“黑工厂”:枪手靠模板+AI 一天炮制30篇论文
- ·欧洲拟议的人工智能限制规则可能带来全球性后果
- ·美团发布Meeseeks评测基准!o3-mini霸榜,DeepSeek-R1意外垫底引发热议
- ·OpenAI全新Sora 2视频工具开放下载!限时测试与付费模式即将来临
- ·标签: 科大讯飞
- ·标签: 宝马中国 雷军 一汽奥迪 小米
- ·支付宝上线AI招投标神器,6000万中小企业迎来商机拓展利器
- ·标签: 明日方舟:终末地 鹰角网络 PayPal支付事故 游戏公测
- ·日本游戏公司中超半数已采用 AI 技术,任天堂因版权顾虑保持谨慎
- ·标签: 荣耀 郭锐 品牌营销 华为
- ·DeepSeek V3.1被曝“极字Bug”:API调用惊现神秘字符,官方已回应
- ·Facebook董事会否决限制扎克伯格权力的提案
- ·云计算核心技术Docker教程:Swarm模式管理和维护一群 Docker 引擎
- ·豆包编程升级 上线创作与问答双模式
- ·ElevenLabs CEO预言:AI语音模型将走向“商品化”,公司押注“模型+应用”双轮驱动
- ·阿里云百炼全面支持MCP服务部署与调用,几分钟即可搭建Agent
- ·标签: 顾维灏 毫末智行 百度Apollo 酒店服务机器人
- ·月球探索新突破!AI 助力撞击坑研究,效率提升惊人
- ·标签: 美的集团 2025年报 Arbonia 东芝电梯
- ·云安全日报211202:Ubuntu网络安全服务库发现执行任意代码漏洞,需要尽快升级
- ·夸克发力AI生态布局:三大新品齐发,承载阿里AI to C战略重任
- ·https://www.voices.com/talents/search?keywords=谷歌收录霸屏【tg:seogoogle987】,1he
- ·https://www.rollingstone.it/?ID=DVMeu3AlmzZE1cuJ2FmgmO5TSCQRb3yh&s=谷歌收录霸屏【tg:seogoogle987】,hWw
- ·https://www.urmc.rochester.edu/news/search?q=谷歌收录霸屏【tg:seogoogle987】,h7N
- ·https://www.spoiledsweetboutique.com/search/谷歌收录霸屏【tg:seogoogle987】,mk0
- ·https://www.pixiv.net/tags/谷歌收录霸屏【tg:seogoogle987】,Us6
- ·https://www.tmtpost.com/search?q=谷歌收录霸屏【tg:seogoogle987】,22u
- ·https://www.tahiti-infos.com/search/谷歌收录霸屏【tg:seogoogle987】,gC8
- ·https://www.revere.org/search?action=SEARCH&q=谷歌收录霸屏【tg:seogoogle987】,rea
- ·https://yscc1986.net/search/谷歌收录霸屏【tg:seogoogle987】ha6
- ·https://www.universal-music.co.jp/search/?q=谷歌收录霸屏【tg:seogoogle987】,YJ2
