说到这个 Filter-Mapping,可真是折腾我好一阵子。一开始没搞明白,走不少弯路,今天就来跟大家分享一下我的实践过程,希望能帮到大家。
最开始的迷茫
我对这玩意儿完全没概念,就知道好像是用来过滤请求的。然后我就去网上搜教程,看一堆,感觉都说得云里雾里的,什么<filter>、<filter-mapping>标签,看得我头都大。
磕磕绊绊的尝试
我记得我第一次尝试的时候,是照着一个教程,在 * 文件里写一堆配置:
<filter>
<!-- ... -->
</filter>
<filter-mapping>
<!-- ... -->
</filter-mapping>
具体写我现在也记不清,反正就是一通乱写。结果当然是没跑起来,各种报错,当时真是想砸电脑的心都有。
逐渐摸清门路
后来我静下心来,仔细研究一下,才发现这玩意儿没那么复杂。主要就是两步:
- 第一步:先得有个“过滤器”本身。这就像一个筛子,你得先有这个筛子,才能去筛东西。这个“筛子”就是一个 Java 类,它要实现一个叫 Filter 的接口,然后在这个类里面写上你想要过滤的逻辑。
- 第二步:有“筛子”,还得告诉程序,这个“筛子”要筛哪些东西。这就是 <filter-mapping> 的作用。它就像一个说明书,告诉程序,哪个“筛子”对应哪个 URL。
我记得我当时还发现 <filter-mapping> 是有顺序的,按照配置顺序来。网上有个例子,说对于同一个 url,比如 .do,在 * 里的配置顺序决定哪个 Filter 先执行。
实战演练
搞明白原理,我就开始动手实践。我先写一个简单的 Filter 类:
public class MyFilter implements Filter {
然后,在 * 文件里,我这样配置它:
<filter>
<filter-name>myFilter</filter-name>
<filter-class>*</filter-class>
<!--这里是类路径-->
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/</url-pattern>
<!--所有请求都会经过这个-->
</filter-mapping>
这回程序终于跑起来!虽然功能很简单,但看到结果的那一刻,我真是太激动。
一些小坑
实践过程中也遇到一些小坑。比如说,我一开始没搞清楚 <url-pattern> 的写法,写个 “/xxx”,结果发现只有完全匹配 “/xxx” 的请求才会被过滤,而 “/xxx/yyy” 这种就不行。后来才知道,要用 “/” 才能匹配所有请求。
还有,我发现除可以用 <url-pattern>,还可以用 <servlet-name> 来指定要过滤的 Servlet。这两种方式可以根据实际需要来选择。
最终的成果
经过一番折腾,我总算是把 Filter-Mapping 搞明白。我可以熟练地使用它来过滤各种请求,实现各种各样的功能。感觉自己又进步一点点!