spring 整合 Struts1.X [轉]

這篇博客摘自[http://blog.csdn.net/chendc201/article/details/8464008], web

其中也有一些是本身增長的部分 . spring

第一步, 須要爲 Struts 裝載 Spring 應用上下文環境。有如下三種方式:數據庫

1) 在 struts-config.xml 中使用 Struts Pluginapp

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> 
<set-property property="contextConfigLocation"    
   value="/WEB-INF/classes/applicationContext.xml,/WEB-INF/action-servlet.xml"/> 
</plug-in>

2) 在 web.xml 中使用 ContextLoaderListenerjsp

<context-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/classes/applicationContext.xml</param-value> 
</context-param> 
<listener> 
      <listener-class> 
           org.springframework.web.context.ContextLoaderListener 
      </listener-class> 
</listener>

3) 在 web.xml 中使用 ContextLoaderServletspa

<context-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/classes/applicationContext.xml</param-value> 
</context-param> 
<servlet> 
     <servlet-name>SpringContextServlet</servlet-name> 
     <servlet-class> 
         org.springframework.web.context.ContextLoaderServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
</servlet>

須要注意的是:.net

       使用 Struts PlugIn 的方式加載 Spring 配置文件有可能致使 DWR 沒法取得 Spring 中定義的 bean,由於 DWR 有可能先於 Struts 被訪問使用,而此時 Struts 配置文件還未加載!所以,在 Spring、Struts 和 DWR 集成時,應該在 web.xml 中經過 ContextLoaderLisenter 或 ContextLoaderServlet 加載 Spring 配置文件。 code

      最佳實踐是使用 Struts PlugIn 的方式加載 Struts Action 配置文件 /WEB-INF/action-servlet.xml,而使用 ContextLoaderLisenter 或 ContextLoaderServlet 方式加載 Spring 配置文件 applicationContext.xml,經過兩次加載完成 Spring全部配置文件的加載。 orm

第二步, 整合Struts1 和 Spring, 也就是管理 action 的 methodxml

使用 DelegatingActionProxy 將 Struts Action 管理權委託給 Spring

<form-beans>
          <form-bean name="loginForm" type="com.xxx.yyy.struts.LoginForm" />
          <!-- 省略不少-->
</form-beans>
<action-mappings>
    <action
          attribute="loginForm"
          name="loginForm"
          parameter="method"
          path="/login"
          scope="request"
          type="org.springframework.web.struts.DelegatingActionProxy">
          <forward name="login" path="/login.jsp"/>
          <forward name="main" path="/main.jsp"/>
    <!-- 省略不少-->
    </action>
</action-mappings>

      上面的 loginForm 我理解爲一個 POJO , 和數據庫中映射出來的實體類有必定的區別, formbean具備的屬性會比較少, 用於封裝表單數據, 便於傳遞 .

對應的在 Spring 配置文件中應該就有 action 的實現類, 注意 name 屬性, 是帶有斜槓的, 對應 action 配置的 path 屬性.

<bean name="/login" class="com.xxx.yyy.struts.LoginAction">
        <property name="xxxService">
            <ref bean="xxxService"/>
        </property>
        <property name="yyyService">
            <ref bean="yyyService"/>
        </property>
        <property name="zzzService">
            <ref bean="zzzService"/>
        </property>
</bean>

      action 中 method 的編寫和 Struts2 差很少, 只不過不是返回一個邏輯視圖的 String , 而是一個包含了 String 的 ActionForward對象, 道理仍是同樣的 , 也就是邏輯視圖 , 而後再去對應的 action 配置中尋找物理視圖.

public class LoginAction extends BaseAction {
      public ActionForward login(ActionMapping mapping, ActionForm form,
                  HttpServletRequest request, HttpServletResponse response){
            //處理邏輯

           return mapping.findForward("main");
      }
}

上面的 BaseAction繼承自 Struts 核心控制器 DispatchAction, 而且注入必須的業務層的 bean.

 

 

轉自[http://blog.csdn.net/chendc201/article/details/8464008]

相關文章
相關標籤/搜索