歡迎您光臨本站 註冊首頁

五步搞定Spring整合Strus

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

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 文件的最末尾.

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/classes/applicationContext.xml" />
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">bean>

beans>

Spring 通過 org.springframework.web.struts.DelegatingActionProxy 這個類, 然後根據 Struts 配置文件中的 和 Spring 配置文件中的 來將 Spring 管理下的 Struts Action 類和提交的路徑匹配起來, 這些就是關於轉交控制權的配置內容.

實踐的過程中發現必須把 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" />
property>
bean>

<bean id="userManagerBean" class="manager.UserManager" />

同理 Spring整合Hibernate 和沒Struts 的時候一樣, 也可以在這個文件中進行配置即可.

5. Spring整合Strus一步, 測試, 只要能列印出來 userManager 不為空, 就說明整合成功了. 如果出現 404 action servlet 不可用的錯誤, 一般都是 Spring 配置文件出錯導致的.


[火星人 ] 五步搞定Spring整合Strus已經有579次圍觀

http://coctec.com/docs/java/show-post-61141.html