由SSH改造至Springboot
最近刚入职新公司,接到的第一个需求就是将网上的一个开源项目改造成适配本公司业务需求的项目。
技术选型
开源项目使用的技术框架:
- struts2,spring,hibernate3,mysql,jsp,maven。
计划改造后使用的技术框架:
- springboot1.5,hibernate5,oracle,jsp,maven。
改造步骤
从改造前后的技术选型对比不难看出,主要的工作量集中于struts2到springboot改造这一块,但是工作量依然不容小觑。
- 梳理原工程所有页面入口和接口,以防改造过程中遗漏
- 新建一个空的springboot工程
- 拷贝所有代码至新工程,目录结构与之前大致相同,不需要web.xml。
- 在pom文件中删除有关struts2的所有依赖
- 删除代码中由于struts2依赖移除而产生的报错
- 根据第0步骤中所梳理的接口清单,逐个将aciton改写为controller,主要的工作量就在这里,如下所示。(特别要注意的是,struts2会对每一个请求生成一个Action对象,而springmvc是为每一个请求分配一个线程,所以原本在Action对象中的某些成员变量在改到controller中后会是线程不安全的,请根据实际情况将其改为方法入参或以其他线程安全的方式来获取)
@Namespace("/demo")
@Results({
@Result(name="success",location="/WEB-INF/page/content/demo/demo.jsp",type="dispatcher")
})
@AllowedMethods({"method1","method2"})
public class DemoAction {
public String method1() throws Exception {
/*
* 业务逻辑1
*/
return "success";
}
public String method2() throws Exception {
/*
* 业务逻辑2
*/
return "success";
}
}
改造后:
@Controller
@RequestMapping("/demo")
public class DemoController {
@GetMapping("/method1.action")
public String method1() throws Exception {
/*
* 业务逻辑1
*/
return "content/demo/demo";
}
@GetMapping("/method2.action")
public String method2() throws Exception {
/*
* 业务逻辑2
*/
return "content/demo/demo";
}
}
- 去xml,将所有和spring相关的xml配置按照springboot中的configuration规则进行配置。
- 更改springboot配置,使其支持jsp的使用
spring.mvc.view.suffix=.jsp
spring.mvc.view.prefix=/WEB-INF/page/
# 禁用模板引擎thymeleaf
spring.thymeleaf.cache=false
spring.thymeleaf.enabled=false
- 更改maven打包方式,由jar包改为war包。
其他:
在改造过程中可能还有许多框架版本升级的兼容性问题和其他细节性问题,笔者就不在这里赘述了,以上内容仅仅提供改造思路上的参考,请勿照搬。