cxf 和struts2 整合问题

haobaofufob 2010-07-23 09:52:42
系统中用到webservice,经火龙果指点使用了cxf,现在配置、访问都可以了,但在和struts2整合时问题出现了:
struts2的FilterDispatcher过滤所有的请求
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern/*</url-pattern>
</filter-mapping>

cxf配置到ws目录下
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
这样struts2就把cxf的请求给拦截了,导致访问webservice不成功,如果去掉struts2的配置则webservice访问可以正常进行,现在想找一个方法是cxf和struts2能共存,谢谢大家!!
我试过
修改struts2的拦截为:
<filter-name>struts2</filter-name>
<url-pattern>/struts/*</url-pattern>
<url-pattern>/frame/*</url-pattern>
<url-pattern>*.action</url-pattern>
</filter-mapping>
这样不可以,访问带有struts2 标签的jsp页面会出错,org.apache.jasper.JasperException: The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag.
...全文
635 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wen691 2011-10-12
  • 打赏
  • 举报
回复
<filter-mapping>
<filter-name>struts2Filter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>

<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

这样试试
wjzlhm0214 2011-10-11
  • 打赏
  • 举报
回复
请问楼主解决了没?求解答。。。
wangqiangcattsoft 2011-09-06
  • 打赏
  • 举报
回复
我也遇到类似的问题,可以把jsp 也加入struts2的过滤器中,这样struts2的标签就不会有问题了,如下:
系统中用到webservice,经火龙果指点使用了cxf,现在配置、访问都可以了,但在和struts2整合时问题出现了:
struts2的FilterDispatcher过滤所有的请求
这样struts2就把cxf的请求给拦截了,导致访问webservice不成功,如果去掉struts2的配置则 <filter-name>struts2</filter-name>
<url-pattern>/struts/*</url-pattern>
<url-pattern>/frame/*</url-pattern>
<url-pattern>*.action</url-pattern>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

  • 打赏
  • 举报
回复
为什么一定要把 WebServices 工程与你的 Web 工程揉在一起呢?
yueweiac110 2010-07-23
  • 打赏
  • 举报
回复
struts2 标签缺失
lovepu 2010-07-23
  • 打赏
  • 举报
回复
先看看下··还没有看struts2了··
closewbq 2010-07-23
  • 打赏
  • 举报
回复
把拦截器的顺序位置改变下试验下。
将<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>放置在上面试试。
我记得以前碰到个问题就是通过改变位置就可以了。
同光和尘 2010-07-23
  • 打赏
  • 举报
回复
帮你顶顶 webservice没用过
magong 2010-07-23
  • 打赏
  • 举报
回复
没这么做过,不过,觉得

@ 这样struts2就把cxf的请求给拦截了,导致访问webservice不成功,

这样的说法没道理,过滤器走完之后,自然会再走CXFServlet,没听说Struts2过滤器会吞请求的。我们S1和S2集成,不也是好的么。
是不是其他错误,
有别的出错信息么?
haobaofufob 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bao110908 的回复:]
为什么一定要把 WebServices 工程与你的 Web 工程揉在一起呢?
[/Quote]
当时架构就是这样设计的,整个webservice的服务器端和客户端作为整个项目的一个模块,所以必须柔和在一起,况且这个项目的服务器端还会用到别的模块的service
haobaofufob 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 closewbq 的回复:]
把拦截器的顺序位置改变下试验下。
将<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>放置在上面试试。
我记得以前碰到个问题就是通过改变位置就可以了。
[/Quote]
这样的方法试过了,还是不行
colin_pxx 2010-07-23
  • 打赏
  • 举报
回复
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
wengui_chen 2010-07-23
  • 打赏
  • 举报
回复
改成用后缀名匹配过滤

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧