Java Servlet映射

时间:2013-01-11 09:15:18

标签: java exception servlets servlet-filters

我有一个在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);
        }

3 个答案:

答案 0 :(得分:1)

我在这种情况下使用它:

String lPath = ((HttpServletRequest) request).getRequestURI();
if (lPath.startsWith("/supported")) {
   chain.doFilter(request, response); 
} else {
  // not supported
}

答案 1 :(得分:1)

不,你不能用<url-mapping/>元素做到这一点。有关所有选项,请参阅spec chapter 12

您是否无法映射到/somepath/*.ppp,因此它不会干扰popup.ppp或致电popup.ppp其他内容?

答案 2 :(得分:1)

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

String 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>