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