jdk1.6环境下struts2改spring boot方案

简介:

公司目前上线的两个项目都是比较老的,java版本是jdk1.6,mvc框架使用的是strus2。
随着不久前struts2官方公布新的安全漏洞,我们也不得不做出相应的整改措施,除了之前博文中所说把struts2改为spring mvc外,还把其中部分项目的struts2改成了spring boot,由于各种原因,领导安排由我给出相应的整改方案,然后其他同事参考。
Spring boot中内嵌tomcat服务器,不需要再专门对tomcat软件进行维护,同时遵循“约定优于配置”,如果整个项目都改成spring boot的话,将会少很多配置文件,不过我们只是改struts2涉及的地方,相对而言改动实际并不是很大。
要给出可行方案,自然需要实际操作成功整合,以下是整个整改过程:

一、使用maven创建springboot项目,spring boot版本选择为1.4.3,自动依赖的spring版本是4.3.5,选择了web启动依赖。
需要说明的是,我这里创建项目时使用了eclipse中的spring tools插件,目前能创建的最低版本是1.4.7,然后默认导入的spring相关的jar包是4.3.9。
但是应上边领导要求,目前不能升级jdk,导致4.3.9的spring在启动项目时抛出jdk版本不兼容的异常,于是手动把spring boot的版本改为了1.4.3,默认导入的spring版本降为了4.3.5。
这种方式创建项目后,maven的pom.xml文件主要的几个内容如下:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
</dependency>
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
</build>

二、增加jdk1.6和tomcat7相关配置
Spring boot项目默认使用的是jdk1.7和tomcat8.5,官方也建议使用1.7以上的jdk,但由于我们暂时不能升级,因此只能使用jdk1.6,这就需要更改默认的配置,把jdk改为支持1.6,把tomcat改为tomcat7,根据spring boot的官方说明,需要在pom.xml文件中加入一些配置:
首先是properties中加入如下配置

<java.version>1.6</java.version>
<tomcat.version>7.0.59</tomcat.version>
<jetty.version>8.1.15.v20140411</jetty.version>
<jetty-jsp.version>2.2.0.v201112011158</jetty-jsp.version>

其次是dependences中加入如下配置

<dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-juli</artifactId>
            <version>${tomcat.version}</version>
</dependency>

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.eclipse.jetty.websocket</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
</dependency>

三、克隆项目代码和配置
使用struts2,或者说常规的web项目都有web.xml文件,而spring boot不需要web.xml文件,因此拷贝的时候,web.xml就可以略过。
其他部分,不论是具体代码还是配置文件,都按原来的层级结构原封不动的拷过来,以期尽可能小的改动,改动越小,出错几率越低。

四、根据编译报错的地方补全jar包
原本的项目没有使用maven,所依赖的jar包都是放在lib文件夹下,也就是全部手动导入,而spring boot项目本身就使用了maven创建,因此所有依赖包也都已maven配置的方式导入。
在初始spring boot项目下考入之前整个项目代码,自然就会缺少相关的jar包从而编译出错,此时首要任务便是根据eclipse工具中醒目的错误提示依次补全相关依赖包。

五、改造struts2的action为spring的controller
原本提供给外部的控制层是继承了struts2的actionsupport类,然后再在struts2的配置文件中配置url,改为spring boot方式后,web控制器这部分实际上就是spring mvc,因此需要把原本的action改为spring mvc的方式,也就是加上spring mvc控制器相关的注解,如@Controller和@RequestMapping。
与此同时,struts2相关的jar包和xml配置文件自然也都不在需要了。

六、添加配置文件加载类
原本启动项目时tomcat需要加载web.xml文件,同时在web.xml中配置了spring初始文件的加载,spring boot项目中没有了web.xml,也不再依赖外部tomcat,因此需要采用其他措施在启动时加载spring初始文件,也就是使用spring boot的文件加载类

package com;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
@Configuration
@ImportResource(value = "classpath:config1/applicationContext.xml")
public class MyConfig {
}

这里有一个需要注意的细节是:spring boot默认只扫描spring boot启动类同包以及启动类所在包的子包下的内容,因此如果想要不手动配置扫描路径的话,就需要把这个类放在启动类所在包或子包下。
如果没有放在启动类所在包或子包下,就需要在启动类上加入@ComponentScan注解指定需要扫描的包。

七、解决运行时的异常
上边已经借助eclipse的提示解决了编译错误,再配置好相应的启动配置文件后,就可以启动项目,根据启动过程抛出的异常再做具体的处理,例如spring装配bean的过程中找不到对应的类。
当解决完启动的一些异常之后,项目看起来便像是成功改造了,但实际上只是看起来而已,我们还需要浏览器访问配置的url,看运行时是否还有异常,例如具体的类中注入某个对象时发现相应的bean不存在。

经过这样七个步骤之后,我们的struts2改spring boot的任务便算是大功告成了。只不过,这里只是改struts2模块而已,所以原本的配置文件依然都还存在,如果后期需要把整个项目都改成spring boot方式,或许那些xml文件就都将不复存在了。

目录
相关文章
|
2月前
|
Java
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
335 3
|
2月前
|
Cloud Native Java 对象存储
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
展望未来,随着5G、边缘计算等新技术的兴起,微服务架构的设计理念将会更加深入人心,Spring Cloud和Netflix OSS也将继续引领技术潮流,为企业带来更为高效、灵活且强大的解决方案。无论是对于初创公司还是大型企业而言,掌握这些前沿技术都将是在激烈市场竞争中脱颖而出的关键所在。
63 0
|
15天前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
4月前
|
Java Linux
Linux复制安装 jdk 环境
Linux复制安装 jdk 环境
109 3
|
9天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
21 2
|
1月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
1月前
|
Java 关系型数据库 开发工具
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
本文提供了解决方案,如何在IDEA中创建Spring 2.X版本的项目并使用JDK8,尽管Spring 2.X已停止维护且IDEA不再直接支持,通过修改pom.xml或使用阿里云的国内源来创建项目。
81 0
idea创建不了spring2.X版本,无法使用JDK8,最低支持JDK17 , 如何用idea创建spring2.X版本,使用JDK8解决方案
|
1月前
|
Cloud Native Java 对象存储
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
面向未来的架构设计:Spring Cloud和Netflix OSS在云原生环境下的发展趋势
48 1
|
2月前
|
前端开发 Java Spring
【非降版本解决】高版本Spring boot Swagger 报错解决方案
【非降版本解决】高版本Spring boot Swagger 报错解决方案
|
2月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
下一篇
无影云桌面