webservice发布地址和项目冲突问题(url拦截冲突)

来源:互联网 发布:python读html文件 编辑:程序博客网 时间:2024/06/05 10:00

 在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{@Overridepublic 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发布地址冲突的问题了。




原创粉丝点击