You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot内嵌Tomcat运行Struts2 JAR应用:配置问题排查

问题解答

需求可行性确认

你的需求完全可以实现:Spring Boot仅作为内嵌Tomcat的运行载体,无需接管Struts2的Action和Bean管理。Struts2拥有独立的配置解析、Action实例管理机制,只要保证其核心Filter正常生效、配置文件能被正确加载,就能在Spring Boot内嵌容器中正常运行,无需将原有Action转为Spring Bean。


当前报错的解决(Action映射找不到)

你遇到的ConfigurationException是因为Struts2无法匹配请求的命名空间和Action,需要补充以下配置调整:

1. 配置Spring Boot上下文路径

你访问的URL包含/myapplication,但默认Spring Boot上下文路径为空,导致Struts2将/myapplication识别为命名空间而非上下文路径。在application.properties中添加:

server.servlet.context-path=/myapplication

配置后,请求URLhttp://localhost:9191/myapplication/login.action的上下文路径与Struts2的解析逻辑匹配,命名空间将从/开始解析。

2. 确保Struts2配置文件被加载

Struts2默认读取classpath:struts.xml,需保证你的遗留配置能被正确加载:

  • 将原有Struts配置文件(如struts.xml、各模块的配置文件)移至src/main/resources目录下;
  • 若有多个模块配置,在主struts.xml中通过<include>引入,示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "https://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <constant name="struts.devMode" value="true"/>
    <!-- 引入模块配置 -->
    <include file="struts-ui-module1.xml"/>
    <include file="struts-middleware.xml"/>
    <!-- 匹配你的Action命名空间 -->
    <package name="default" namespace="/" extends="struts-default">
        <!-- 可直接配置或引用原有Action映射 -->
        <action name="login" class="com.yourpackage.LoginAction">
            <result name="success">/WEB-INF/login.jsp</result>
        </action>
    </package>
</struts>

如果原有配置在WEB-INF下,需将其移至src/main/resources/META-INF/resources/WEB-INF/,并在struts.xml中指定路径:

<constant name="struts.configuration.files" value="struts-default.xml,struts-plugin.xml,/WEB-INF/struts.xml"/>

3. 调整JSP与静态资源路径

Spring Boot打包为JAR时,资源路径规则与WAR不同:

  • JSP文件需移至src/main/resources/META-INF/resources/WEB-INF/目录下(替代原src/main/webapp/WEB-INF/);
  • 静态资源(JS/CSS)移至src/main/resources/static/,与你配置的spring.web.resources.static-locations匹配。

4. 依赖兼容性检查

你使用的Struts2 7.0.0与Spring Boot 3.x均基于Jakarta EE,版本兼容,但需避免重复引入Servlet API依赖。Struts2核心依赖已包含必要的Jakarta Servlet API,无需额外添加。

5. 确保Action类被正确打包

检查Gradle配置,确保所有遗留模块的Java源码被包含在编译范围内,或通过dependencies引入对应模块的JAR包,保证Action类能被JAR正确加载。


内容的提问来源于stack exchange,提问作者soumitra goswami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:42:33