3

我在 web.xml 中定义了一个 servlet:

<servlet-mapping>
  <servlet-name>SessionRebindServlet</servlet-name>
  <url-pattern>*.ppp</url-pattern>
</servlet-mapping>

现在,当有一个带有扩展名的请求时,.ppp它会使用上面的 servlet。

但是我想在这里有一个例外,如果文件名为“popup.ppp”那么根本不调用这个servlet。

是否可以?

更新

我添加了一个过滤器

<filter-mapping>
    <filter-name>AppFilter</filter-name>
    <url-pattern>*.ppp</url-pattern>
</filter-mapping>

并在过滤器代码中:

String url = ((HttpServletRequest) request).getRequestURI();
        if (url.contains("popup.ppp")) {

        } else {
            chain.doFilter(request, response);
        }
4

3 回答 3

1

我在这种情况下使用它:

String lPath = ((HttpServletRequest) request).getRequestURI();
if (lPath.startsWith("/supported")) {
   chain.doFilter(request, response); 
} else {
  // not supported
}
于 2013-01-11T09:23:31.857 回答
1

不,您不能对<url-mapping/>元素执行此操作。有关所有选项,请参见规范第 12 章。

你不能映射到/somepath/*.ppp它不会干扰popup.ppp或调用popup.ppp其他东西吗?

于 2013-01-11T09:26:55.157 回答
1

通过使用过滤器并简单地覆盖过滤器中的 doFilter() 方法:

字符串 url = request.getRequestURL().toString();

然后使用这个 url 并与 popup.ppp 比较它不等于然后 doFilter()

或者

试试这个(我没有检查过这个)

<servlet-mapping>
  <servlet-name>SessionRebindServlet</servlet-name>
  <url-pattern>*.ppp</url-pattern>
</servlet-mapping>


<servlet-mapping>
  <servlet-name>newServletName</servlet-name>
  <url-pattern>popup.ppp</url-pattern>
</servlet-mapping>
于 2013-01-11T09:28:23.127 回答