一、welcome-file-list
1.
a.jsp
b.html
c.html
首页也可以是WEB-INF目录下的文件。
2、首页的路径只能是一个实际存在的物理文件地址,不能将首页设置成Servlet或Controller的地址,再通过来Servlet或Controller返回一个页面,例如以下,tomcat会在根目录下的view文件夹查找addUser文件,找不到则报404.
/view/addUser
如果确实需要使用控制器来返回页面,可以通过在页面中跳转到控制器路径来实现。建立首页文件home.html,内容如下,URL为跳转路径,再将该页面设置为主页。
3. 可以不设置首页,由SpringMVC来处理根路径应该返回的页面,注意2中是设置首页为控制器路径,此处是不设置首页,不要混淆。不设置首页直接去掉welcome-file-list标签或者
对根路径进行映射
@RequestMapping("/")
public String indexPage() throws Exception {
return "index";
}
或使用
1. 重定向
即如果当前路径是/ 则重定向到/view/index
2. view name
如果当前路径是/ 则交给相应的视图解析器直接解析为视图 。
得到的视图时 /WEB-INF/jsp/view/index.jsp
二、url-pattern匹配规则
1. servlet容器中的匹配规则既不是简单的通配,也不是正则表达式,而是特定的规则。所以不要用通配符或者正则表达式的匹配规则来看待servlet的url-pattern。
2. 当servlet容器接收到浏览器发起的一个url请求后,容器会用url减去当前应用的上下文路径,以剩余的字符串作为servlet映射,如url是http://localhost:8080/appDemo/addUser,其应用上下文是appDemo,容器会将http://localhost:8080/appDemo去掉,用剩下的/addUser部分拿来做servlet的映射匹配
注:http://localhost:8080/appDemo/user/addUser/ 是非法的url,不会被当作http://localhost:8080/appDemo/user/addUser识别
3. 当有一个servlet匹配成功以后,不会再继续匹配剩下的servlet。
4. Servlet 2.5开始,一个servlet可以使用多个url-pattern规则。以下3个url-pattern都可以映射到MyServlet
MyServlet
/user/users.html
/index.html
/user/addUser.action
1. 精确匹配。形如/add。
注:/user/*/index也是精确匹配,其中的*不是通配符而是字符*。只有/user/*/index才能匹配上,/user/a/index,/user/b/index都是无法匹配的。
2. 路径匹配。形如/*,/user/*,以以/开头,/*结尾
3. 扩展名匹配。形如*.do
注以上三种匹配不能组合混用。
4. 默认匹配/,当以上都无法匹配时,就是用默认的Servlert。优先级最低
匹配优先级
精确匹配>路径匹配(长路径优先级大于短路径优先级)>扩展名匹配>缺省匹配
“/*”属于路径匹配,并且可以匹配所有request,由于路径匹配的优先级仅次于精确匹配,所以“/*”会覆盖所有的扩展名匹配,很多404错误均由此引起,一般只用于filter的url-pattern。
“/”默认匹配模式,优先级最低,不会覆盖其他任何url-pattern,只是会替换servlet容器的内建default servlet ,该模式同样会匹配所有request(除了jsp文件)。
配置“/”后,会拦截诸如http://localhost:8080/appDemo/user/addUser.action、http://localhost:8080/appDemo/user/updateUser的格式的请求,但是并不会拦截http://localhost:8080/appDemo/user/users.jsp、http://localhost:8080/appDemo/index.jsp,这是因为servlet容器有内置的“*.jsp”匹配器,而扩展名匹配的优先级高于缺省匹配,所以才会有上述现象。
/*与/都会拦截.css,.js,.html等静态资源。
在SpringMVC框架中我们会配置请求默认由DispatcherServlet来处理,这样静态资源的处理也会被拦截到由DispatcherServlet处理,而我们并没与写Controller来进行映射,常报404。
1. 使用web服务器默认的servlet来做处理,它会根据请求路径正确找到资源,tomcat默认servlet名称为default
default
*.jpg
default
*.js
default
*.css
要写多个,要配置多个,每种文件配置一个
2、使用
配置
3. 使用
使用
Spring会先执行order值比较小的。当访问一个a.jpg图片文件时,先通过DefaultAnnotationHandlerMapping来找处理器,一定是找不到的,我们没有叫a.jpg的Action。再按order值升序找,由于最后一个SimpleUrlHandlerMapping是匹配"/**"的,所以一定会匹配上,再响应图片。
转自:
servlet的url-pattern匹配规则
基础7——url-pattern匹配规则
https://www.cnblogs.com/dflmg/p/6393416.html
https://blog.csdn.net/z69183787/article/details/41654039