Web项目同时使用Struts2和SpringMVC

Web项目同时使用Struts2和SpringMVC接手公司历史遗留的一个项目 要在原有系统中添加新的功能 原有系统只使用 Struts2 做 WebMVC 没有用 Spring 做解耦 数据持久层使用 JDBC 连接 数据库连接池是 c3p0 从设计上看 原有系统抛弃了独立的服务层 把服务层和数据持久层合并 控制层 Struts2 的 Action 直接调用持久层对象 新增功能采用 SpringMVC 和 Mybatis 由于原系统和新功能的控制层使用不同的 MVC

接手公司历史遗留的一个项目,要在原有系统中添加新的功能。原有系统只使用Struts2做Web MVC,没有用Spring做解耦,数据持久层使用JDBC连接,数据库连接池是c3p0。从设计上看,原有系统抛弃了独立的服务层,把服务层和数据持久层合并,控制层(Struts2的Action)直接调用持久层对象。新增功能采用SpringMVC和Mybatis。

<!-- Struts2配置 --> <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> <!-- End Struts2配置 -->

从Web.xml的配置上看,Struts2把所有请求都拦截了,在struts.xml配置文件中,实际上Struts2只处理do和action结尾的请求。

<!-- 设置struts的Action请求的后缀,支持多个时以逗号隔开。 --> <constant name="struts.action.extension" value="do,action" />

修改web.xml中的配置,让Struts2过滤器只拦截do和action的路径,修改后的struts2过滤器如下

<!-- Struts2配置 --> <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>*.do</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <!-- End Struts2配置 -->

修改SpringMVC的处理路径,把SpringMVC的请求都改为以mvc结尾,web.xml中的配置如下

<!-- SpringMVC配置 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.mvc</url-pattern> </servlet-mapping> <!-- End SpringMVC配置 -->

经过以上配置,Struts2和SpringMVC分别处理不同的请求,实现了Struts2和SpringMVC共存。只需修改配置文件和少量代码的情况,把新功能集成到老系统中。

完整的web.xml配置如下

<!-- Spring配置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-context.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- End Spring配置 --> <!-- 编码过滤 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>*.mvc</url-pattern> </filter-mapping> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <!-- End 编码过滤 --> <!-- SpringMVC配置 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.mvc</url-pattern> </servlet-mapping> <!-- End SpringMVC配置 --> <!-- Struts2配置 --> <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> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <!-- End Struts2配置 -->










版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230399.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月25日 下午4:01
下一篇 2026年2月25日 下午4:22


相关推荐

  • 常见单元测试工具

    常见单元测试工具常见软件单元测试工具发表于 2010 2 0513 22 作者 未知来源 51Testing 软件测试网采编 ParasoftJtes 是第一个自动化 Java 单元 测试 javascript 工具 Jtest 自动测试任何 Java 类或部件 而不需要您写一个测试用例 驱动程序或桩函数 只要点击一个按钮 Jtest 自动测试代码构造 白盒测试 javascript 测试代码功能性 黑盒测试 javascript 维护代码完整性 回归测试 和静态分析 编程标准执

    2026年3月18日
    2
  • codeforces#256DIV2 D题Multiplication Table

    codeforces#256DIV2 D题Multiplication Table

    2022年1月20日
    37
  • 三天实现独立分析宏基因组数据(有参、无参和分箱等)[通俗易懂]

    三天实现独立分析宏基因组数据(有参、无参和分箱等)[通俗易懂]在广大粉丝的期待下,《生信宝典》联合《宏基因组》在2019年11月1-3日,北京鼓楼推出《宏基因组分析》专题培训第六期,为大家提供一条走进生信大门的捷径、为同行提供一个宏基因组分析学习和…

    2022年6月3日
    74
  • expect教程

    expect教程新建文件 data software expect expect 5 43 bin expect fseta lindex argv0 spawnvi asend i send Thisisatest send 033 nbsp nbsp nbsp 输入 escsend wq n 注意回车 send 后面的内容分两行也可以输出回车 缺点是结果带换行符

    2026年3月16日
    2
  • 色彩学基础知识

    色彩学基础知识一直觉得自己在色彩学上缺少知识,比如多种颜色如何搭配,这在绘图时常常让我纠结不已的,一直耽搁着,下面整理了一些关于色彩学的资料。1、色彩学基础知识RGB和CMKY颜色系统RGB颜色系统是一个基于三

    2022年8月6日
    13
  • Excel VBA 编程练习

    Excel VBA 编程练习根据表单名称从work查找

    2022年6月5日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号