Struts2框架(MVC框架)+Spring框架融合配置

Struts2框架以WebWork优秀的设计思想为核心,吸收了 Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架,本文主要是与Spring整合关键配置和实例

Struts2框架(MVC框架)+Spring框架融合配置

所属分类: JAVA
专题标签: Struts2 Spring 配置

MVC框架

MVC全名是Model View Controller,表示采用了MVC涉及模式的框架。
是模型(model)-视图(view)-控制器(controller)的缩写。
使用业务逻辑、数据、界面显示分离的方法组织代码,业务逻辑聚集到一个部件里面。
当改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

配置核心过滤器与自定义配置

位于WEB应用的web.xml中配置Struts2核心Filter。
Struts2框架与SpringMVC最大的区别在于转发通过过滤器,SpringMVC使用Servlet。

  1. <filter>
  2. <!-- 配置Struts2核心Filter的名字 -->
  3. <filter-name>struts2</filter-name>
  4. <!-- 注意:一定是org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter -->
  5. <!-- 不是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter -->
  6. <!-- 也不是org.apache.struts2.dispatcher.Filterdispatcher -->
  7. <!-- struts的版本不同,导致jar包目录的改变,写错了,会报找不到类的错误 -->
  8. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  9. <init-param>
  10. <!-- 多个Strust配置文件用,号隔开 -->
  11. <param-name>config</param-name>
  12. <param-value>struts-default.xml,conf/mebugs.struts.xml</param-value>
  13. </init-param>
  14. <init-param>
  15. <!-- 扩展struts2的ConfigurationProvider接口,在web.xml中配置自定义的加载类 -->
  16. <!-- 自定义扫描所有的Strust配置文件,实际应用中可以不配置 -->
  17. <param-name>configProviders</param-name>
  18. <param-value>com.mebugs.MyConfigProviders</param-value>
  19. </init-param>
  20. </filter>
  21. <filter-mapping>
  22. <filter-name>struts2</filter-name>
  23. <url-pattern>*.action</url-pattern>
  24. </filter-mapping>

自定义的struts配置文件

如上文中我们使用的mebugs.struts.xml实例,以及几类比较常见的配置内容。

  1. <!DOCTYPE struts PUBLIC
  2. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  3. "http://struts.apache.org/dtds/struts-2.0.dtd">
  4. <struts>
  5. <!-- struts.devMode也就是struts的开发模式,默认值为false,改为true就是以后一旦就改这个文件中的配置就不用去重启tomcat -->
  6. <constant name="struts.devMode" value="false" />
  7. <package name="mebugsServices" extends="struts-default" namespace="/">
  8. <!-- Action -->
  9. <!-- 一般情况下,**这个类也要配置在Spring的bean配置文件**,用于类对象的维护 -->
  10. <!-- **此处便是与Spring框架融合的地方,我们的bean依旧统一交给Spring的IOC容器来管理** -->
  11. <!-- action name便是前端请求的地址 method则绑定对应的方法入口 -->
  12. <action name="createUser" class="com.mebugs.user.action.UserAction" method="createUser">
  13. <!-- 以下内容均为选用 -->
  14. <!-- 绑定一个拦截器/组 -->
  15. <interceptor-ref name="security" />
  16. <!-- 绑定一个需要传参的拦截器/组 -->
  17. <interceptor-ref name="runMode">
  18. <param name="target">https</param>
  19. </interceptor-ref>
  20. <!-- 特定的返回字符串标识 -->
  21. <result name="success">/jsp/some.jsp</result>
  22. <!-- 特定的返回字符串标识,且指定为重定向 -->
  23. <result name="main" type="redirect">main.action</result>
  24. </action>
  25. </package>
  26. </struts>

Action类的基本结构

以上文配置的UserAction为例

  1. public class UserAction extends BASCAction {
  2. /*
  3. * 序列号
  4. */
  5. private static final long serialVersionUID = 373832410111011420L;
  6. /*
  7. * 日志
  8. */
  9. private static final DebugLog LOGGER = LogFactory.getDebugLog(UserAction.class);
  10. /*
  11. * 实体类,与视图交互的对象
  12. */
  13. private User user;
  14. /*
  15. * Service层类注入
  16. */
  17. private UserServ userServ;
  18. /*
  19. * 通过Bean配置中<property name="user" ref="user"></property> 进行关联
  20. * Bean管理依旧交给Spring
  21. */
  22. public User getUser() {
  23. return user;
  24. }
  25. public void setUser(User user) {
  26. this.user = user;
  27. }
  28. public UserServ getUserServ() {
  29. return userServ;
  30. }
  31. public void setUserServ(UserServ userServ) {
  32. this.userServ = userServ;
  33. }
  34. /*
  35. * action中配置指定的方法
  36. */
  37. public void createUser() {
  38. // step1: 调用业务处理类 获取返回体
  39. // 这个返回体结构是我们自定义的通用返回体,便于Jackson解析
  40. // 其结构一个返回码一个返回描述
  41. ReturnDes returnDes = userServ.createUser(user);
  42. // step2: 打印接口返回消息
  43. List<Object> rtn = new ArrayList<Object>();
  44. rtn.add(returnDes);
  45. // step3: 构造返回体,建议剥离为一个公共方法
  46. // 此处引用了Jacson开源Jar工具包
  47. response.setCharacterEncoding("UTF-8");
  48. response.setContentType("text/html");
  49. PrintWriter out = null;
  50. try {
  51. ObjectMapper mapper = new ObjectMapper();
  52. String json = mapper.writeValueAsString(rtn);
  53. out = response.getWriter();
  54. out.print(json);
  55. } catch(JsonProcessingException e) {
  56. LOGGER.error(e.toString(), e);
  57. } catch (IOException e) {
  58. LOGGER.error(e.toString(), e);
  59. } finally {
  60. if (null != out) {
  61. out.close();
  62. }
  63. }
  64. }
  65. }

其他小结

在JAVA语言中新的WEB项目中,Struts2框架的身影也越来越少见。
由于Struts2框架是一个存粹的控制层框架,Bean还需要交给Spring框架维护,增加很多的配置项。
因此现在比较多见的依旧是Spring+SpringMVC的组合。
尤其是注解方式配置面市后,使用其他控制层框架与Spring框架融合开发效率始终弱于Spring+SpringMVC。
亲儿子毕竟是亲儿子~哈哈哈~