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 配置如下

  
    org.springframework.boot
    spring-boot-starter-parent
    2.7.18
     
  
    
      org.springframework.boot
      spring-boot-starter-web
    

struts2配置如下

    
      org.apache.struts
      struts2-json-plugin
      2.5.30
    
    
      org.apache.struts
      struts2-core
      2.5.30
    

struts1配置如下:

    
      struts
      struts
      1.1
      
        
          javax.sql
          jdbc-stdext
        
      
    

JSP支持配置如下:

   
      org.apache.tomcat.embed
      tomcat-embed-jasper
      compile
    
    
      javax.servlet
      jstl
    

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

你可能感兴趣的:(struts,spring,boot,java)