关于spring-mvc的拦截
一 . web核心
java-web 把资源分成三类 如下
https://blog.csdn.net/xingqibaing/article/details/80716522
配置的是 /,DispatcherServlet 不会拦截jsp
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
注: fiter 什么都拦截不再此讨论范围
配置的是 /* ,DispatcherServlet 会拦截jsp
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
二. 关于拦截器的测试即思考
- DistatcherServlect 配置拦截 /
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
2) spring mvc.xml
2.1) 只配置一个拦截器,不配置静态资相关的标签(拦截器印输出 一句话测试是否进入拦截器)
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="cn.itcast.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
测试: 访问 /aaa.html (项目无该页面)
结果: 404,拦截器中无打印输出
测试: 访问 /login.html (项目有该页面)
结果: 404,拦截器中无打印输出
2.2) 配置拦截 ,和资源管理器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="cn.itcast.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<mvc:default-servlet-handler/>
测试: 访问 /aaa.html (项目并无该页面)
结果: 404,拦截器中有打印输出!
测试: 访问 /login.html (项目有该页面)
结果: 正常响应 ,/login.html
` 2.3) 配置拦截 ,和资源管理器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="cn.itcast.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<mvc:resources mapping="/stu/**" location="/stu/"/>
测试: 访问 /login.html (项目有该页面)
结果: 404,拦截器中无打印输出!
测试: 访问 /stu/aaa.html (项目有该页面)
结果: 404 ,拦截器有打印输出
结论, <mvc:default-servlet-handler/> 这句话 是告诉springmvc 当请求的资源不存在时 拦截后交由tomcat 处理请求
结论, <mvc:resources mapping="/stu/**" location="/stu/"/>这句话 是告诉springmvc当请求的资源不存在时 , 如果是 location="/stu/ 拦截后交由tomcat处理请求,如果是其他路径则mvc 认为资源不存在直接返回404.html
整体结论
当我们访问的资源被 springmvc 认为存在时 一定会被拦截器拦截