1

我写了一个过滤器来决定用户登陆页面在它到达我的欢迎文件之前。欢迎文件的编写方式是,它从过滤器获取输入并将用户导航到特定页面。

我的欢迎文件标签是...

<welcome-file-list>
   <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

我的过滤器配置是

<filter>
    <filter-name>LandingPageFilter</filter-name>
    <filter-class>com.mypack.test.filters.LandingPageFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>LandingPageFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

当每个请求都通过这个过滤器时,上述格式运行良好,我想避免这种情况。当我点击http://localhost:8000/landing它时,它应该只第一次到达过滤器,以后即使我访问http://localhost:8000/landing/edit它也应该绕过过滤器实际执行相关的 servlet。

我也试过这个,<url-pattern>/*/index.jsp</url-pattern>但没有用。为什么我使用它,因为上下文可能会有所不同,但应用程序会相同。

4

1 回答 1

2

利用

<url-pattern>/index.jsp</url-pattern>

代替

<url-pattern>/*/index.jsp</url-pattern>

所以你的过滤器映射部分会变成这样

<filter-mapping>
    <filter-name>LandingPageFilter</filter-name>
    <url-pattern>/index.jsp</url-pattern>
</filter-mapping>

无论上下文如何,这都有效,因为它/代表上下文路径之后的路径。

例如,如果您有两个上下文路径,例如ab,在您的服务器中有两个相同应用程序的部署,并且您正在使用 URL 访问它们

http://localhost:8000/a/

http://localhost:8000/b/

然后/在上下文根和之后url-pattern表示。因此,您的过滤器将仅针对 index.jsp 执行。/ab

于 2013-09-05T14:57:14.823 回答