在下也是刚刚学习java,写的比较简单,不喜勿喷
先上3个代码我们看结果,然后再讨论
拦截:以前我对这个词的理解不深入,以前的理解为,拦截了就不让进了,就没用了。实则不然,一个请求如果连拦截都没有,那么显然是不起任何作用的。filter的过滤器,先拦截请求,经过一系列的校验,然后如果通过,那么放行,再进入servlet里,此时的请求才会起作用,如果连拦截都没有,就是连过滤器都没有经过,那么就更不会进入servlet里面,更不要说起作用了。
filter与servlet的大致流程:
整个流程大致为,请求先被filter过滤器过滤,拦截,放行,然后进入到servlet,找到与servlet中url-pattern映射匹配的路径,如果一致,则进入到相应的servlet,执行相应的方法。
++++++++++案例一:
如发送一个x.action,则此时可以被filter过滤器拦截,放行,之后就找servlet,但是servlet找不到以*.action结尾的url路径映射,所以请求资源不存在404。反之x.do,过滤器匹配不到,所以不会被放行,就不会进入servlet,故404
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
----------------------
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
===========结果1:404
++++++++++案例二:
如发送一个x.do,因为配置的为/*,则表明该过滤器可以拦截所有的HTTP 请求。但是只有以.do为结尾的请求才可进入servlet
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
----------------------
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
==================结果:只要是以.do结尾的请求都可以被拦截
++++++++++案例三:
不解释
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
----------------------
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
==================结果:只有.action结尾的请求都可以被拦截