在web项目中开发webservice接口在发布的时候会遇到url冲突问题,即每个web项目无论使用的是struts或者spring mvc都会有一个地址拦截器,并且拦截的地址一般都会配置成/*,这样就会把所有的请求都会拦截,然后作为一个action或者controller处理。这种情况就导致我们在访问webservice发布的url时也会被拦截,并且提示没有这个action或者controller。(这个报错还是很对的,我们项目中确实没有)我们想要的效果只是通过web项目发布webservice,并不想然web项目处理这个地址,所以必须不让web拦截这个url。我目前知道的有两种方式实现,一种是重写过滤器,还有一种是配置不拦截的url。我使用的重写过滤器,至于配置不拦截的url并不确定是否一定可行
配置拦截器:
spring mvc:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*" />
<mvc:exclude-mapping path="/webservice/*" />
<bean class="com.itcast.oa.interceptor.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
struts:
在struts.xml配置文件中添加
<constant name="struts.action.excludePattern" value="/webservice"></constant>
以上通过配置文件的方式,我没有试过,正确与否并不能保证,重写filter已经实现
可以使用。以spring mvc为例,struts相同
public class DispaDispatcherForWebserviceServlet extends DispatcherServlet{
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throw IOException, ServletException{
HttpServletRequest request = (HttpServletReqeust) req;
String requestUrl = reqeust.getRequestURI();
/*
* 如果是指定的url放过,走下一个过滤器
* 不是:按照原来的流程处理
*/
if(reqeustUrl.contains("/webservice")){
chain.doFilter(req, res);
}else{
super.doFilter(req, res, chain);
}
}
}
web.xml配置
<servlet>
<servlet-name>springMvc</servlet-name>
<servlet-class>com.xu.servlet.DispaDispatcherForWebserviceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
这样就解决webservice发布地址冲突的问题了。