1. 项目需要有Struts包和Spring的core, aop, web 三个包(注意不是Spring自己的Web MVC), 将Spring整合Strus。具体的 .classpath 文件如下所示:
- ﹤?xml version="1.0" encoding="UTF-8"?﹥
- ﹤classpath﹥
- ﹤classpathentry kind="src" path="src"/﹥
- ﹤classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/﹥
- ﹤classpathentry kind="con" path="com.genuitec.core.J2EE14_CONTAINER"/﹥
- ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/antlr.jar"/﹥
- ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/beanutils.jar"/﹥
- ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/digester.jar"/﹥
- ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/fileupload.jar"/﹥
- ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/logging.jar"/﹥
- ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/validator.jar"/﹥
- ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/jakarta-oro.jar"/﹥
- ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/struts.jar"/﹥
- ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/mysql-connector-java--bin.jar"/﹥
- ﹤classpathentry kind="con" path="melibrary.com.MYECLIPSE_SPRING20_CORE"/﹥
- ﹤classpathentry kind="con" path="melibrary.com.MYECLIPSE_SPRING20_AOP"/﹥
- ﹤classpathentry kind="con" path="melibrary.com.MYECLIPSE_SPRING20_WEB"/﹥
- ﹤classpathentry kind="output" path="WebRoot/WEB-INF/classes"/﹥
- ﹤/classpath﹥
2. 对Struts 配置文件做修改加入Spring 托管功能.
创建 Spring 配置文件,将文件放到src 目录下,文件名称为 applicationContext.xml, 编译后放到WEB-INF/classes/ 下.
配置struts-config.xml文件,添加 spring的插件, 位置在 struts-config 文件的最末尾.
- <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
- <set-property property="contextConfigLocation"
- value="/WEB-INF/classes/applicationContext.xml" />
- < SPAN>plug-in>
3. 修改 Struts 的 struts-config.xml 中的Action配置。原来的代码:
- <action
- attribute="loginForm"
- input="/login.jsp"
- name="loginForm"
- path="/login"
- scope="request"
- validate="true"
- type="com.test.struts.action.LoginAction" />
改变后的代码:
- <action
- attribute="loginForm"
- input="/login.jsp"
- name="loginForm"
- path="/login"
- scope="request"
- validate="true"
- type="org.springframework.web.struts.DelegatingActionProxy" />
type 部份为修改内容, 这里将使用spring的代理器来对Action进行控制. 当提交到/login.do是将控制权交给了spring,然后由spring来把它转回到struts的Action.
4. Spring整合Strus,需要配置spring来实例化上一步中被删除的 Action 类.
- xml version="1.0" encoding="UTF-8"?>
- >
- <beans>
- <bean name="/login" class="com.test.struts.action.LoginAction">< SPAN>bean>
- < SPAN>beans>
Spring 通过 org.springframework.web.struts.DelegatingActionProxy 这个类, 然后根据 Struts 配置文件中的
实践的过程中发现必须把 singleton="false"去掉才行, 否则就会无法初始化 Spring 框架, 不知道具体的原因是什么.
既然这个 Struts的Action 已经通过 Spring 来初始化, 所以就可以加入依赖注入, 整合Hibernate 的功能了. 例如典型的情况:
- com.test.struts.action.LoginAction
- private UserManager userManager;
- public UserManager getUserManager()...
- public void setUserManager(UserManager userMgmr) ...
- public ActionForward execute(ActionMapping mapping,
- ActionForm form,
- HttpServletRequest request, HttpServletResponse response) {
- System.out.println("userManager=" + getUserManager());
- getUserManager().someBusinessMethods();
- .....
- }
然后就可以配置:
- <bean name="/login" class="com.test.struts.action.LoginAction">
- <property name="userManager">
- <ref bean="userManagerBean" />
- < SPAN>property>
- < SPAN>bean>
- <bean id="userManagerBean" class="manager.UserManager" />
同理 Spring整合Hibernate 和没Struts 的时候一样, 也可以在这个文件中进行配置即可.
5. Spring整合Strus最后一步, 测试, 只要能打印出来 userManager 不为空, 就说明整合成功了. 如果出现 404 action servlet 不可用的错误, 一般都是 Spring 配置文件出错导致的.
【编辑推荐】