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

本文介绍了解决在Web项目中发布WebService接口时遇到的URL冲突问题的方法。提供了两种解决方案:一是通过配置文件设置排除模式;二是重写过滤器,具体演示了SpringMVC环境下如何实施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值