解决servlet被struts的filter截了的问题

做项目的时候,需要用到一个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/.*",按理说应该是一样的,不知为什么后者事实上是成功了的,但控制台上还提示错误。

Mikzone