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

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暂时保留着。

相关文章:

  • Blender标注工具
  • 【Python】超详细实例讲解python多线程(threading模块)
  • SpringBoot入门-(1) Maven【概念+流程】
  • UNIX网络编程笔记:套接字
  • C#通过API接口返回流式响应内容---SignalR方式
  • 小科普《DNS服务器》
  • 用短说社区打造你的专属游戏社区
  • FreeRTOS列表和列表项
  • flink 写入es的依赖导入问题(踩坑记录)
  • 高并发下保证接口幂等性
  • vscode终端不识别npm 无法解析npm
  • 微信小程序登陆之反向代理
  • llama-factory 微调 Qwen2.5-3B-Instruct
  • python3使用lxml解析xml时踩坑记录
  • 基于STC89C51的太阳自动跟踪系统的设计与实现—单片机控制步进电机实现太阳跟踪控制(仿真+程序+原理图+PCB+文档)
  • 解决stm32引脚如果选择输入模式
  • 响应压缩导致的接口请求response没有响应体问题排查
  • 群晖 DS923 + 功能简介
  • macOS使用brew切换Python版本【超详细图解】
  • 蓝牙音频软件开发--杰理可视化SDK系列学习笔记汇总(持续更新)
  • 在对国宝的探索中,让美育浸润小学校园与家庭
  • 山东枣庄同一站点两名饿了么骑手先后猝死,当地热线:职能部门正调查
  • 何谓“战略稳定”:“长和平”的实现基础与机制
  • 鄂州:锁死中小学教师编制总量,核减小学编制五百名增至初中
  • 印巴战火LIVE丨“快速接近战争状态”:印度袭击巴军事基地,巴启动反制军事行动
  • 4月金融数据前瞻:受去年低基数因素影响,社融增量有望同比大幅多增