映射路径/和/*的区别在哪

1、/  会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
2./* 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)
3、url-pattern详解
在web.xml文件中,以下语法用于定义映射:
1) 以”/’开头和以”/*”结尾的是用来做路径映射的。
2) 以前缀”*.”开头的是用来做扩展映射的。
3)“/” 是用来定义default servlet映射的。
4)剩下的都是用来定义详细映射的。比如: /aa/bb/cc.action
所以,为什么定义”/*.action”这样一个看起来很正常的匹配会错?因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。

为什么形如.jsp就不会被/拦截,而静态资源如.jpg .png就会被拦截呢? .jsp和.jpg不是都是形如.*的嘛,有什么不同嘛?

找到答案了,/和/*一样都是匹配所有,但是因为/的优先级最低,因为servlet内置了.jsp的拦截器,优先级更高,原文如下:“/”是servlet中特殊的匹配模式,切该模式有且仅有一个实例,优先级最低,不会覆盖其他任何url-pattern,只是会替换servlet容器的内建default servlet ,该模式同样会匹配所有request。配置“/”后,一种可能的现象是myServlet会拦截诸如http://localhost:8080/appDemo/user/addUser.actionhttp://localhost:8080/appDemo/user/updateUser的格式的请求,但是并不会拦截http://localhost:8080/appDemo/user/users.jsp、这是应为servlet容器有内置的“*.jsp”匹配器,而扩展名匹配的优先级高于缺省匹配,所以才会有上述现象。

你可能感兴趣的:(映射路径/和/*的区别在哪)