当前位置: 首页 > article >正文

struts1+struts2项目兼容升级到了spring boot 2.7

原项目比较复杂,集成了各种框架(struts1 struts2 spring3等),趁工作之余练练手,学习一下springboot。大概花了一周时间才调通。

一、调整jar版本,寻找合适的版本。

第一步、首先原项目JDK6,要用springboot JDK肯定要升级了。原来的struts2也有漏洞了,也要升级。

在不升级其他框架的情况下。jdk21 17都可以运行,索性选择jdk21,反正是练手。

第二步、struts2 已经停止更新,就选最新版本了,目标是先按原来的框架跑起来,逐步把struts2废弃掉。升级后界面标签属性有点变化,批量替换。

s:iterator的 id 改成var 

s:property escape属性没了。

过滤器路径也改了:org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

第三步、一切正常之后,可以说装载springboot 。3.0之后javaee9,最重要的是javax 变jakata了,变化太大,如果选3.0之前的程序肯定跑不起来。在这里折腾了好几天,调整版本兼容性。最终选择boot2.7.18  2.7的最高版本了。对应spring5.3

第四步、先把springboot空的应用正常启动,配置好能够对空的jsp访问,这里出现过不渲染JSp的问题,不知道怎么消失了。

第五步、把WEB.xml 里的配置 全部放到配置类中。把过滤器、监听器、servlet等注册到spring配置类中。 这里会出现版本兼容的问题,如果springboot选择3.0 就要求过滤器要继承jakata路径。

这里会把struts1和struts2在web.xml的配置全部注册完毕。

第六步、修改JSP ,主要是标签错误。

每一步都有不少问题,基本上不停的问百度、豆包、元宝

spring 配置如下

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.18</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

struts2配置如下

    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-json-plugin</artifactId>
      <version>2.5.30</version>
    </dependency>
    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>2.5.30</version>
    </dependency>

struts1配置如下:

    <dependency>
      <groupId>struts</groupId>
      <artifactId>struts</artifactId>
      <version>1.1</version>
      <exclusions>
        <exclusion>
          <groupId>javax.sql</groupId>
          <artifactId>jdbc-stdext</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

JSP支持配置如下:

   <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
    </dependency>

与struts1相关启动报错问题,但不影响使用,解决版本,在main类中增加方法:

    @Bean
    public TomcatServletWebServerFactory tomcatFactory() {
        return new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                ((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
            }
        };
    }

另外理论上web.xml可以删除了。但是struts1还会读取web文件,如果文件不存在会抛异常,web.xml暂时保留着。


http://www.kler.cn/a/595386.html

相关文章:

  • AI Agent系列(七) -思维链(Chain of Thought,CoT)
  • 5.特征工程与维度降维实践指南——Python数据挖掘代码实践
  • AI 护航:企业数据治理的安全蜕变
  • Python 编程题 第十二节:柠檬水找零、统计数字、合并排序数组、插入5、字符串置换
  • 尝试使用tauri2+Django+React的项目
  • 《南京日报》专题报道 | 耘瞳科技“工业之眼”加码“中国智造”
  • Floyd 算法——97. 小明逛公园
  • Umi-OCR- OCR 文字识别工具,支持截图、批量图片排版解析
  • 2025年渗透测试面试题总结- 某亭-安全研究员(题目+回答)
  • 【一起学Rust | Tauri2.0框架】基于 Rust 与 Tauri 2.0 框架实现全局状态管理
  • java每日精进 3.21 【SpringBoot规范2.0】
  • [AI速读]CHISEL vs. SystemVerilog:用RISC-V核心对比两种硬件设计语言
  • 网络故障排查指南:分治法与排除法结合的分层诊断手册
  • 快速上手pg_basebackup
  • MAC地址和IP地址是如何互相配合的?
  • 普通浏览器 vs. 防关联/指纹浏览器:有什么区别?
  • 批量删除 PPT 文档的删除页眉页脚
  • 华为网路设备学习-16 虚拟路由器冗余协议(VRRP)
  • 深入解析 Java Stream API:筛选根节点的优雅实现!!!
  • C++从入门到实战(六)类和对象(第二部分)C++成员对象及其实例化,对象大小与this详解