大家好,欢迎来到IT知识分享网。
前言
目前公司有一个运营端的项目,web层使用框架,是年代久远的Struts2,近期打算改造为SpringMVC,而SpringMVC这个称呼,也成为了一个历史了,目前是SpringBoot中的web模块中部分功能而已了,所以系统架构准备一步到位,改造为SpringBoot的体系。
而改造的第一步,便是将SpringBoot平稳引入,便是本文要将的在SpringBoot中集成Struts2的相关内容了。
思路
总结下SpringBoot中集成Struts2的思路,后续再按照这个步骤,一步一步来详细阐述。
- 引入Struts2的Maven依赖;
- 引入传统struts.xml的配置
- 使用注解的方式,完成传统web.xml的中Struts2配置
- 基于Struts2编写HTTP接口测试;
- 测试HTTP接口;
案例
按照思路的方案,编写了一个测试的demo,验证了方案的可行性。
1.引入依赖
我们主要引入Struts2的Maven依赖,具体内容如下:
<!-- struts2 依赖 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.28</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>2.3.28</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>2.3.28</version> </dependency>
2.配置struts.xml
传统的Struts2的项目,都要在资源目录下面,配置一个命名为struts.xml的配置文件,配置Struts2的Action(HTTP接口)相关的属性。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- spring工厂 --> <constant name="struts.objectFactory" value="spring"/> <!-- struts的action包扫描路径 --> <constant name="struts.convention.package.locators.basePackage" value="com.example.springbootstruts2.action"/> <!-- 解决There is no Action mapped for namespace [/xxx] and action name [xxx] associated with context path [].等问题 --> <constant name="struts.convention.exclude.parentClassLoader" value="false"/> </struts>
3.配置web.xml
作为早期JavaWeb开发的同学都知道,我们需要在里边配置一些请求相关的过滤器,等等。只不过到了SpringBoot时代,这个文件的配置,早已被遗弃了,我们现在采用注解式配置,来完成这个不起眼的文件的相关配置。
package com.example.springbootstruts2.config; import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.ArrayList; import java.util.List; / * Struts的web.xml配置 * * @author hongcunlin */ @Configuration public class WebXmlConfig { / * 官网的方法配置过滤器 * * @return Struts2配置 */ @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); // 加入Struts2 filterRegistrationBean.setFilter(new StrutsPrepareAndExecuteFilter()); List list = new ArrayList(); list.add("/*"); filterRegistrationBean.setUrlPatterns(list); return filterRegistrationBean; } }
4.编写HTTP接口
到了检验以上配置是否生效的重要环节了,我们基于Struts2编写一个HTTP接口,并进行接口测试,如若能按照预期的返回,则证明没有问题。
package com.example.springbootstruts2.action; import com.alibaba.fastjson2.JSON; import com.example.springbootstruts2.vo.BaseResult; import lombok.Data; import org.apache.struts2.ServletActionContext; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.springframework.stereotype.Controller; import javax.servlet.ServletOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; / * @author hongcunlin */ @Controller @Namespace("/word") @Data public class WordAction { / * Struts2方法请求入参 */ private String word; / * struts请求 * * @throws IOException ex */ @Action(value = "/get") public void get() throws IOException { ServletOutputStream os = ServletActionContext.getResponse().getOutputStream(); BaseResult result = new BaseResult(); result.setMsg(word); String json = JSON.toJSONString(result); os.write(json.getBytes(StandardCharsets.UTF_8)); } }
我们简单编写了一个http接口,将用户输入的值,传入一个对象中,再返回一个json格式的内容给,这是前后端分离常见的一个交互,很重要。
5.测试HTTP接口
我们在浏览器上面,输入HTTP接口相关的内容,
可以看到,返回我们预期想要的结果,说明我们的环境是OK的,SpringBoot中成功基础了Struts2了
最后
本文作为Struts2改造SpringBoot的第一部分,分享了如何在SpringBoot中集成Struts2。完整的切换改造过程,还有很长的路要走,如过滤器相关的改造、文件上传改造、基于类的HTTP接口改造为基于方法的,等等,后续再做分享。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/164792.html