最近项目遇到webService配置cxf过滤器时与struts冲突问题,原因是web.xml的过滤地址匹配问题,看了很多网上能找到的解决方案,在这里总结一下:
cxf在spring的配置不变,
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
.........
web.xml配置:
cxf在web.xml配置不变
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/schemas/*</url-pattern>
</servlet-mapping>
方案一:
网上说的最多,但有时不一定有效的一种方法
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern><!--此处把/* 改成 *.action-->
</filter-mapping>
方案二:
方法很巧妙,也是在Iteye上看的帖
http://www.iteye.com/topic/673231
该贴中用到的FilterDispatcher 在2.1.x以后的版本都不建议使用,所以我们可以重写StrutsPrepareAndExecuteFilter来实现过滤
public class StrutsFilter extends StrutsPrepareAndExecuteFilter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
String url = ((HttpServletRequest)req).getRequestURI();
if (url.indexOf("schemas") < 0) { //另外一种过滤cxf方式
super.doFilter(req, res, chain);
} else {
chain.doFilter(req, res);
}
}
}
这个类在我的com.chyx.web.filter包下面
web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>com.chyx.web.filter.StrutsFilter</filter-class>
</filter><!--此处把StrutsPrepareAndExecuteFilter改成了重写的StrutsFilter-->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern><!-- 此处不变 -->
</filter-mapping>
方案三:
利用struts2自带的正则匹配,应该说这算是最官方的解决方案了
在struts.properties中加正则匹配
struts.action.excludePattern=/schemas/.*
web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
struts的配置2处都不变
分享到:
相关推荐
Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、高效且易于管理的企业级应用程序。从2.3.24版本升级到2.5.26版本,这是一个重要的更新,涉及到许多改进、安全修复以及对新特性的支持。在进行这样的...
在IT行业中,CXF、Spring和Struts2是三个非常重要的开源框架,分别用于Web服务、依赖注入和MVC架构。下面将详细讲解这三个框架以及它们的整合。 **CXF (Camel eXtensible Framework)** 是一个开源的Java服务框架,...
这个项目可能包含了CXF的必要配置,如web.xml中的CXFServlet配置,以及Spring的配置文件,用于加载CXF服务的bean。通过这样的项目,开发者可以快速启动一个提供Web服务的服务器。 为了实现"零配置",我们还需要了解...
Struts2、Spring和CXF是...总之,Struts2、Spring和CXF的集成提供了从用户界面到业务逻辑再到服务接口的全方位解决方案,是Java开发中常见的一种技术栈。了解和掌握这三个框架的使用,对于提升Java开发能力大有裨益。
在IT行业中,Web服务是一种基于开放标准(如XML、WSDL和SOAP)的软件系统,它允许不同应用程序之间进行交互和数据交换。本示例将详细介绍如何使用XFire、Struts和Spring框架来开发Web服务。这三个技术是Java Web开发...
压缩包中的"SSMC"可能包含了以下内容:Spring的配置文件(如 applicationContext.xml),Struts2的配置文件(struts.xml),MyBatis的Mapper接口和XML配置文件,以及CXF的服务接口和实现类。除此之外,还有可能包含...
3、修改 WEB-INF\classes 目录下struts.xml 文件,加上: <constant name="struts.enable.DynamicMethodInvocation" value="true"/> <constant name="struts.convention.action.mapallmatches" value="true"/> 这...
在本文中,我们将探讨如何将Apache CXF 3.0.2版本集成到Spring框架中,以及在这个过程中可能遇到的问题和解决方案。Apache CXF是一个开源的SOA(Service-Oriented Architecture)框架,它允许开发人员创建和消费各种...
本案例中,我们将讨论如何将MyBatis、Spring和CXF这三个关键框架整合在一起,以构建一个功能强大的Web服务。首先,让我们逐一了解这些框架的核心概念。 MyBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架...
通过以上步骤,我们可以实现一个集成了Spring、CXF、Struts的Web应用程序,具备了处理HTTP请求、提供SOAP和RESTful服务的能力,同时也具备了Action的业务处理能力,为企业级应用开发提供了强大而灵活的解决方案。...
SSH(Struts2、Spring、Hibernate)是一个常见的 Java Web 开发框架组合,而 CXF 是一个用于构建和开发 Web 服务的开源框架。本教程将详细介绍如何在 SSH 项目中集成 CXF 来创建和消费 WebService。 **1. 项目环境*...
【标题】"csh框架+cxf+spring+hibernate+mysql 注解 annotation xml json" 提到的是一个基于Java技术栈的Web服务开发架构,涵盖了多个关键组件和技术,这些技术在现代企业级应用中广泛应用。以下是这些知识点的详细...
本教程将深入探讨如何在SSH(Spring、Struts、Hibernate)架构中集成Web服务,以及如何利用CXF和Spring框架发布这些服务。 **1. SSH架构** SSH(Spring、Struts、Hibernate)是Java开发中的经典MVC(Model-View-...
2. **Spring框架集成**:Spring与CXF的集成使得服务组件可以通过Spring的XML配置或者注解进行管理,这样可以方便地利用Spring的功能,如事务管理、数据访问等。 3. **SSH框架集成**:Struts处理HTTP请求和视图展示...
SSH(Secure Shell)服务端与Apache CXF的集成是企业级Web服务开发中的常见实践,主要涉及Spring、Spring MVC和CXF这三个核心组件。这里,我们深入探讨一下这些技术及其在构建WebService时的角色。 首先,SSH是一个...
本文将深入探讨如何利用CXF创建带有用户认证的Web服务接口,并将其与SSH(Spring、Struts、Hibernate)框架整合。 首先,让我们了解一下CXF创建Web服务的基本步骤: 1. **设置项目环境**:确保你的开发环境中已经...
Apache CXF入门范例以及对传递ListMap类型的疑惑】中,可能会详细解释如何创建和调用一个使用CXF的Web服务,同时也可能讨论了在处理复杂数据类型如List, Object>>时遇到的问题和解决方案。通常,CXF允许你通过JAXB或...
在本文中,我们将讨论如何在已有的 Struts2+Spring3 项目中搭建 WebService 服务,使用 CXF2.6 实现。该方法适合新手维护老系统搭建 WebService,使用非注解方式,比较老的方式。 Struts2+Spring3+Hibernate 环境 ...
在SSH(Spring、Struts、Hibernate)架构中,我们需要配置Spring上下文以便CXF能够识别和处理Web服务。这通常涉及到在Spring配置文件中定义CXF的Bus实例、服务端点接口和服务实现。例如,我们会创建一个CXF的Servlet...
在SSH+CXF的整合中,Struts2负责视图层和控制层,Spring处理依赖注入和事务管理,Hibernate处理持久化操作,而CXF则作为Web服务的发布平台。这种组合使得开发人员能够利用SSH的成熟性和CXF的灵活性,轻松地创建和...