做项目的时候,需要用到一个servlet,但是很不幸的是,servlet对应的url被struts截断了,无法解析到正确的servlet上面去。解决这个问题暂时发现两种方法。
第一种方法,写一个filter。
public class CometdFilter implements Filter {
private String ingoreUrl;
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)res;
String URL = request.getRequestURI().substring(request.getContextPath().length());
//System.out.println(URL);
if (URL.indexOf("/cometd") == 0) {
request.getRequestDispatcher(request.getServletPath()).forward(request, response);
} else {
chain.doFilter(request, response);
}
}
public void init(FilterConfig config) throws ServletException {
ingoreUrl = config.getInitParameter("ingore-url");
}
}
之后去web.xml配置一下filter。
第二种方法,使用struts的excludePattern:
struts自带了一个excludePattern的配置项,可以取消过滤一部分url。
注意事项:要较新的版本才支持(貌似是版本2.1.8后) 方法如下
<constant name="struts.action.excludePattern" value=".*cometd.*"></constant>
一开始用的不是".cometd.“而是”/cometd/.*",按理说应该是一样的,不知为什么后者事实上是成功了的,但控制台上还提示错误。