ssh框架使用springBoot升级迁移替换Struts2
如果一个十来年的ssh项目想使用springboot的便捷性,但又不想从零开始,那么就让我们开始迁移吧。
- 在pom文件添加springboot 依赖
- 创建application 启动类
- 迁移web.xml
web.xml文件中定义了filter, struts2等等一堆filter, 这时我们需要做的一件事是在springboot中使我们的filter, struts2 能正常work。 这样就不需要我们改变项目中已经定义好的大量的action、controller层代码.
//声明当前类为一个配置类
@Configuration
//自动扫描包路径
@ComponentScan({"com.demo.action", "com.demo.util","com.demo.security"})
//引入之前已经存在的配置文件
@ImportResource(locations = {
"classpath:applicationContext-configuration.xml",
"classpath:applicationContext-orm.xml",
"classpath:applicationContext-business.xml",
"classpath:ApplicationContext-RabbitMQ.xml",
"classpath:applicationContext-security-authorization.xml",
})
public class ApplicationConfig {
private static final Logger log = LoggerFactory.getLogger(ApplicationConfig.class);
private LogRequestFilter logRequestFilter = new LogRequestFilter();
private StrutsPrepareAndExecuteFilter strutsPrepareAndExecuteFilter = new StrutsPrepareAndExecuteFilter(); //springboot启动时初始化struts2拦截器
@Bean
@Order(1)
public FilterRegistrationBean loginFilter() {
/*
* <filter>
* <filter-name>LoginFilter</filter-name>
* <filter-class>com.demo.servlet.LoginFilter</filter-class>
* </filter>
* <filter-mapping>
* <filter-name>LoginFilter</filter-name>
* <url-pattern>/login/*</url-pattern>
* <url-pattern>/login.html</url-pattern>
* </filter-mapping>
*/
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new LoginFilter());//注册拦截filter
registrationBean.addUrlPatterns("/login/*", "/login.html");//拦截路径
return registrationBean;
}
@Bean
@Order(2)
public FilterRegistrationBean strutsPrepareAndExecuteFilter() {
/*
* <filter>
* <filter-name>struts2</filter-name>
* <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
* </filter>
* <filter-mapping>
* <filter-name>struts2</filter-name>
* <url-pattern>/*</url-pattern>
* </filter-mapping>
* <filter-mapping>
* <filter-name>struts2</filter-name>
* <dispatcher>FORWARD</dispatcher>
* </filter-mapping>
*/
log.debug("Instantiating StrutsPrepareAndExecuteFilter");
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(strutsPrepareAndExecuteFilter);//注册Struts2拦截器
registrationBean.setName("StrutsPrepareAndExecuteFilter");
registrationBean.addUrlPatterns("/*");//默认拦截所有请求
return registrationBean;
}
}
通过以上code, 我们已经将web.xml的配置完全迁移,这时我们通过springboot 已经可以开始启动项目了。
当然,在springboot中使用Struts2是不合理的也是官方不支持使用的, 后续的工作我们可以逐步整合hiberante, springsecurity,最后将Struts2替换成springmvc. 慢慢减少我们的配置文件。
(1)FilterRegistrationBean: spring 对filter 拦截器的一个注册类, 自带setorder方法, 我们也可以通过在方法前添加@order来控制filter的启动和拦截的优先级。
(2)@Order 控制filter的启动和拦截的优先级。
(3)@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。
(4) StrutsPrepareAndExecuteFilter 这个类就不多说了,相信大部分使用struts2的小伙伴都知道这是struts2的启动类
(5) @ImportResource等同于xml配置。参考:
(6)@Configuration 用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
参考:
springboot 系列教程: