springMVC中配置servlet的url-pattern的四种方式(转载 笔记)

https://www.cnblogs.com/canger/p/6084846.html
1.精确匹配

<url-pattern>/book/listBook</url-pattern>

controller

@Controller
@RequestMapping("/book")
public class BookController {

@Autowired
private IBookService ibs;

public void setIbs(IBookService ibs) {
	this.ibs = ibs;
}
@RequestMapping("/listBook")
@ResponseBody
public void testMVC(Book book) {
	System.out.println(book);
}

项目名:maven
则url请求必须为 localhost:8080/maven/book/listBook,才能访问到方法
其他所有的请求都无法进入servlet容器
2.路径匹配

以“/”字符开头,并以“/*”结尾的字符串用于路径匹配,匹配特定路径
3扩展名匹配

以“*.”开头的字符串被用于扩展名匹配,
 url:  localhost:8080/maven/book/listBook.action
 controller中对应方法的路径上不要加/

@RequestMapping("listBook")
@ResponseBody
public void testMVC(Book book) {
	System.out.println(book);
}

<url-pattern>*.action</url-pattern>

缺省匹配

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

匹配顺序

精确匹配,servlet-mapping1:/user/users.html,servlet-mapping2:/。当一个请求http://localhost:8080/appDemo/user/users.html来的时候,servlet-mapping1匹配到,不再用servlet-mapping2匹配
路径匹配,先最长路径匹配,再最短路径匹配servlet-mapping1:/user/,servlet-mapping2:/。当一个请求http://localhost:8080/appDemo/user/users.html来的时候,servlet-mapping1匹配到,不再用servlet-mapping2匹配
扩展名匹配,servlet-mapping1:/user/,servlet-mapping2:.action。当一个请求http://localhost:8080/appDemo/user/addUser.action来的时候,servlet-mapping1匹配到,不再用servlet-mapping2匹配
缺省匹配,以上都找不到servlet,就用默认的servlet,配置为/
注意事项
"/“和”/"含义并不相同

“/”属于路径匹配,并且可以匹配所有request,由于路径匹配的优先级仅次于精确匹配,所以“/”会覆盖所有的扩展名匹配,很多404错误均由此引起,所以这是一种特别恶劣的匹配模式,一般只用于filter的url-pattern
“/”是servlet中特殊的匹配模式,切该模式有且仅有一个实例,优先级最低,不会覆盖其他任何url-pattern,只是会替换servlet容器的内建default servlet ,该模式同样会匹配所有request。

猜你喜欢

转载自blog.csdn.net/weixin_42410730/article/details/84573009