JavaWeb中URL匹配规则详解
URL的匹配规则
- 精确匹配
- 扩展名匹配
- 路径匹配
- 任意匹配
- 匹配所有
- 路径匹配优先顺序
- 多映射URL的实现方式
精确匹配
精确匹配是指中配置的值必须与url完全精确匹配。
扩展名匹配
在允许使用统配符“”作为匹配规则,“”表示匹配任意字符。在扩展名匹配中只要扩展名相同都会被匹配和路径无关。注意,在使用扩展名匹配时在中不能使用“/”,否则容器启动就会抛出异常。
路径匹配
根据请求路径进行匹配,在请求中只要包含该路径都匹配。“*”表示任意路径以及子路径。注意这里是指该项目下以love为路径开头进行访问;
比如访问 like/love 就不可以
任意匹配
匹配“/”。匹配所有但不包含JSP页面
匹配所有
但是这就会有一个问题,当一个路径符合多个匹配规则时,那么该怎么办呢?
路径匹配优先顺序
当一个url与多个Servlet的匹配规则可以匹配时,则按照 “ 精确路径 > 最长路径 >扩展名”这样的优先级匹配到对应的Servlet
案例分析
Servlet1映射到 /abc/*
Servlet2映射到 /*
Servlet3映射到 /abc
Servlet4映射到 *.do
当请求URL为“/abc/a.html”,“/abc/”和“/”都匹配,Servlet引擎将调用Servlet1。
当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,Servlet引擎将调用Servlet3。
当请求URL为“/abc/a.do”时,“/abc/”和“.do”都匹配,Servlet引擎将调用Servlet1。
当请求URL为“/a.do”时,“/”和“.do”都匹配,Servlet引擎将调用Servlet2。
当请求URL为“/xxx/yyy/a.do”时,“/”和“.do”都匹配,Servlet引擎将调用Servlet2。
URL映射方式
在web.xml文件中支持将多个URL映射到一个Servlet中,但是相同的URL不能同时映射到两个Servlet中。
多映射URL的实现方式
黑大帅的菜腿子: 没发完整?
炒冷饭: 其实,对于Math类的静态导入和普通导入还有一些细微的区别,希望能多注意一些。 Math类在普通导入时,为了更快的性能,使用的是计算中关于浮点数计算的例程,但是如果你为了保证在任何的计算机上获取的结果都完全一致,可以使用StrictMath导入,它确保在所有平台上获取的结果都是一致的。
普通网友: 文章构思巧妙,结构紧凑,既有深度又有广度,读后让人受益匪浅,确实是一篇值得一读的佳作。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】
普通网友: 感谢大佬分享好文,学到了不少新知识,支持大佬,期待大佬持续输出优质文章!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】
普通网友: 大佬高质量文章,图文并茂,逻辑清晰,受益匪浅,期待大佬新作。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】