五步搞定Spring整合Strus

发表于:2009-8-13 10:38

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

#
java

  1. 项目需要有Struts包和Spring的core,aop,web 三个包(注意不是Spring自己的Web MVC),将Spring整合Strus。具体的 .classpath 文件如下所示:

  1. ﹤?xml version="1.0" encoding="UTF-8"?﹥
  2. ﹤classpath﹥
  3.   ﹤classpathentry kind="src" path="src"/﹥
  4.   ﹤classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/﹥
  5.   ﹤classpathentry kind="con" path="com.genuitec.core.J2EE14_CONTAINER"/﹥
  6.   ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/antlr.jar"/﹥
  7.   ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/beanutils.jar"/﹥
  8.   ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/digester.jar"/﹥
  9.   ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/fileupload.jar"/﹥
  10.  ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/logging.jar"/﹥
  11.  ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/validator.jar"/﹥
  12.  ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/jakarta-oro.jar"/﹥
  13.  ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/struts.jar"/﹥
  14.  ﹤classpathentry kind="lib" path="WebRoot/WEB-INF/lib/mysql-connector-java--bin.jar"/﹥
  15.  ﹤classpathentry kind="con" path="melibrary.com.MYECLIPSE_SPRING20_CORE"/﹥
  16.  ﹤classpathentry kind="con" path="melibrary.com.MYECLIPSE_SPRING20_AOP"/﹥
  17.  ﹤classpathentry kind="con" path="melibrary.com.MYECLIPSE_SPRING20_WEB"/﹥
  18.  ﹤classpathentry kind="output" path="WebRoot/WEB-INF/classes"/﹥
  19.﹤/classpath﹥

  2. 对Struts 配置文件做修改加入Spring 托管功能。

  创建 Spring 配置文件,将文件放到src 目录下,文件名称为 applicationContext。xml,编译后放到WEB-INF/classes/ 下。

  配置struts-config.xml文件,添加 spring的插件,位置在 struts-config 文件的最末尾。

  1. <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
  2. <set-property property="contextConfigLocation"
  3. value="/WEB-INF/classes/applicationContext.xml" />
  4. </< SPAN>plug-in>

  3. 修改 Struts 的 struts-config.xml 中的Action配置。原来的代码:

  1. <action
  2. attribute="loginForm"
  3. input="/login.jsp"
  4. name="loginForm"
  5. path="/login"
  6. scope="request"
  7. validate="true"
  8. type="com.test.struts.action.LoginAction" />

  改变后的代码:

  1. <action
  2. attribute="loginForm"
  3. input="/login.jsp"
  4. name="loginForm"
  5. path="/login"
  6. scope="request"
  7. validate="true"
  8. type="org.springframework.web.struts.DelegatingActionProxy" />

  type 部份为修改内容, 这里将使用spring的代理器来对Action进行控制。当提交到/login。do是将控制权交给了spring,然后由spring来把它转回到struts的Action。

  4. Spring整合Strus,需要配置spring来实例化上一步中被删除的 Action 类。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. >
  3.
  4. <beans>
  5. <bean name="/login" class="com.test.struts.action.LoginAction"></< SPAN>bean>
  6.
  7. </< SPAN>beans>

  Spring 通过 org.springframework.web.struts.DelegatingActionProxy 这个类,然后根据 Struts 配置文件中的 和 Spring 配置文件中的来将 Spring 管理下的 Struts Action 类和提交的路径匹配起来,这些就是关于转交控制权的配置内容。

  实践的过程中发现必须把 singleton="false"去掉才行,否则就会无法初始化 Spring 框架,不知道具体的原因是什么。

  既然这个 Struts的Action 已经通过 Spring 来初始化,所以就可以加入依赖注入,整合Hibernate 的功能了。 例如典型的情况:

  1. com.test.struts.action.LoginAction
  2.
  3. private UserManager userManager;
  4.
  5. public UserManager getUserManager()...
  6. public void setUserManager(UserManager userMgmr) ...
  7.
  8. public ActionForward execute(ActionMapping mapping,
  9. ActionForm form,
  10.     HttpServletRequest request, HttpServletResponse response) {
  11.     System.out.println("userManager=" + getUserManager());
  12.     getUserManager().someBusinessMethods();
  13.     .....
  14. }

  然后就可以配置:

  1. <bean name="/login" class="com.test.struts.action.LoginAction">
  2.   <property name="userManager">
  3.    <ref bean="userManagerBean" />
  4.   </< SPAN>property>
  5. </< SPAN>bean>
  6.
  7. <bean id="userManagerBean" class="manager.UserManager" />

  同理 Spring整合Hibernate 和没Struts 的时候一样,也可以在这个文件中进行配置即可。

  5. Spring整合Strus最后一步,测试,只要能打印出来 userManager 不为空,就说明整合成功了。如果出现 404 action servlet 不可用的错误,一般都是 Spring 配置文件出错导致的。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号