区别是什么?
请一句话搞明白下面的文字意思,理解可就可以走人。
/ 和 /*区别
/ 拦截所有请求 包括静态资源和动态请求 但是不拦截jsp
/*拦截所有请求 包括静态资源和动态请求 也拦截jsp
区别就在于/ 不拦截jsp /*拦截jsp
/* 和 /** 区别
/**的意思是所有文件夹及里面的子文件夹
/*是所有文件夹,不含子文件夹
注意点案例
理解下面的案例有助于理解如何使用
场景:当我在客户端调用URL:/user/list然后返回user.jsp视图,
- 当配置的是/:DispathcherServlet拿到这个请求然后返回对应的controller,
然后依据Dispather Type为Forward类型转发到user.jsp视图,即就是请求user.jsp视图(/user/user.jsp),此时Dispather没有拦截/user/user.jsp,
因为此时你配置的是默认的/,就顺利的交给ModleAndView去处理显示了。 - 当配置的是/*:DispathcherServlet拿到这个请求然后返回对应的controller,然后通过Dispather Type通过Forward转发到user.jsp视图,
即就是请求user.jsp视图(/user/user.jsp),此时Dispather已经拦截/user/user.jsp,Dispatcher会把他当作Controller去匹配,没有匹配到就会报404错误。
结论:在配置视图的时候尽量用/这种方式。
结论
通过注意点案例我们大概可以理解为什么要有两个的区分。配置/*是为了直接访问静态资源,配置/是为了避免内部forward到视图层时被拦截。所以根据业务决定如何具体控制。另外,无论是拦截器,过滤器,还是安全等本质上都是一样的。上述规则一样有效。
参考:
https://www.cnblogs.com/searain/articles/8391773.html