SSH旅程(六)Spring和struts结合(方案二)
来源:互联网 发布:树莓派3kail linux 编辑:程序博客网 时间:2024/05/21 05:24
Spring和struts结合.
上篇Spring和Struts结合方案一中,我们是在Model层应用spring,在Action中取得BeanFactory,然后通过SpringIOC来找到Model层的bean。但是这这样存在一些问题,我们在Action中使用的是Spring相关的静态类,这就说明我们依赖的是Spring的静态类,我们希望所依赖的是接口而不是类,符合设计原则,面向接口编程,这样也容易扩展和维护。于是在此基础上进行改进。
第二种方案是将Struts的Action交给Spring创建,这样业务逻辑对象将被注入,这样就避免了依赖查找,而Spring中会有一个代理Action,通过代理ActionProxy取得banFactory。方案一和方案二的对比图如下图所示。
这样就不用Spring的Listener了,所以我们的web.xml配置文件代码如下所示。
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4"
- xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <servlet>
- <servlet-name>action</servlet-name>
- <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
- <init-param>
- <param-name>config</param-name>
- <param-value>/WEB-INF/struts-config.xml</param-value>
- </init-param>
- <init-param>
- <param-name>debug</param-name>
- <param-value>2</param-value>
- </init-param>
- <init-param>
- <param-name>detail</param-name>
- <param-value>2</param-value>
- </init-param>
- <load-on-startup>2</load-on-startup>
- </servlet>
同时再struts的配置文件,struts-config.xml中,在<action-mappings>标签中配置Action,也不再配置我们自己建立的Action,而是配置Spring自己的代理Action。代码如下所示。
- <?xml version="1.0" encoding="ISO-8859-1" ?>
- <!DOCTYPE struts-config PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
- "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
- <struts-config>
- <form-beans>
- <form-bean name="loginForm" type="com.bjpowernode.usermgr.web.forms.LoginActionForm"></form-bean>
- </form-beans>
- <action-mappings>
- <action path="/login"
- type="org.springframework.web.struts.DelegatingActionProxy"
- name="loginForm"
- scope="request"
- >
- <forward name="success" path="/login_success.jsp"/>
- </action>
- </action-mappings>
- <message-resources parameter="resources.MessageResources" />
- </struts-config>
Spring对Aciton的配置文件如下所示。applicationContext-actions.xml.
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
- <bean name="/login" class="com.bjpowernode.usermgr.web.actions.LoginAction" scope="prototype">
- <property name="userManager" ref="userManager"/>
- </bean>
- </beans>
在这里配置对应的本系统实际的Action,注意名字一定要和struts中代理Action一致!并且设置每次创建一个新的Action,而不是共用一个Action,scope="prototype"。
这样在LoginAction中,我们不用再看到创建Model和工厂的细节,使用SpringIOC,创建Model,UserManager,并且配置文件中注入LoginAction,这样LoginAction代码如下所示。
- public class LoginAction extends Action {
- private UserManager userManager;
- // 让spring注入,LoginAction让Spring管理, 不是让strus创建而是由spring创建.
- public void setUserManager(UserManager userManager) {
- this.userManager = userManager;
- }
- @Override
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- LoginActionForm laf = (LoginActionForm) form;
- String username = laf.getUsername();
- String password = laf.getPassword();
- userManager.login(username, password);
- return mapping.findForward("success");
- }
- }
小结:
Spring框架就相当于我们的工具,我们把工具挖掘和使用的淋漓尽致才好,这可能就是人和工具的区别,人利用创造和利用工具,工具被创造和被利用。这中间的过程就是磨合了。
- SSH旅程(六)Spring和struts结合(方案二)
- SSH旅程(六)Spring和struts结合(方案二)
- SSH旅程(六)Spring和struts结合(方案一)
- struts旅程(二)Struts登录示例
- struts旅程(二)Struts登录示例
- struts旅程(二)Struts登录示例
- struts旅程(二)Struts登录示例
- Struts旅程(六)Struts页面转发控制ActionForward和ActionMapping
- Struts旅程(六)Struts页面转发控制ActionForward和ActionMapping
- Struts旅程(一)Struts简介和原理
- Struts旅程(一)Struts简介和原理
- Struts旅程(一)Struts简介和原理
- 最简单的SSH(Struts+Spring+Hibernate)[二]配置文件
- SSH框架学习(二、在struts基础上加入spring)
- JSTL与Struts的结合(六)
- JSTL与Struts的结合(六)
- Struts、Hibernate复习 && 了解与Spring结合的SSH
- spring加载及和struts的结合
- ZOJ-2829
- Android自学笔记-13-ContentObserver内容观察者
- 并查集的学习
- [Unity3D]Unity3D游戏开发之基于Terrain Toolkit实现地形的制作
- 重新开张
- SSH旅程(六)Spring和struts结合(方案二)
- LeetCode || Single Number II
- 郝斌数据结构(三):动态栈
- 淘宝高性能可伸缩平台架构简介
- fzu 2155 并查集的删除
- 2014.4.9 今天自己写了个计算器,帮基友算东西
- 【转】Windows下资源泄漏检测
- 菜鸟学EJB(一)——第一个实例
- 对单链表实现就地逆置