這是一個Web Project
首先是web.xml檔案
<?xml version="1.0" encoding="UTF-8"?><br /><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"<br />xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />xsi:schemaLocation="http://java.sun.com/xml/ns/javaee<br />http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"></p><p><!-- 指定Spring的設定檔,預設從web根目錄下開始尋找設定檔 --><br /><!-- 我們可以通過Spring提供的classpath:首碼指定從類路徑下尋找 --><br /><!-- 這裡【contextConfigLocation】是固定的 --><br /><!-- 通過ContextLoaderListener類的第53行的new ContextLoader()跳轉到ContextLoader.java類中 --><br /><!-- 在ContextLoader.java類的第93行發現CONFIG_LOCATION_PARAM的值就是contextConfigLocation --><br /><!-- 這個值就是Spring系統內部使用的,所以是不能更改的,如果修改了的話,那麼就找不到Spring的設定檔了 --><br /><context-param><br /><param-name>contextConfigLocation</param-name><br /><param-value>classpath:applicationContext.xml</param-value><br /></context-param></p><p><!-- 執行個體化Spring容器 --><br /><!-- 當應用啟動的時候,ContextLoaderListener就會被執行,然後就會讀取Spring的相關設定檔 --><br /><!-- 它預設會到//當前Web應用//WebRoot//WEB-INF//目錄中尋找applicationContext.xml檔案 --><br /><listener><br /><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class><br /></listener></p><p><!-- 解決亂碼問題 --><br /><filter><br /><filter-name>SpringCharacterEncodingFilter</filter-name><br /><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><br /><init-param><br /><param-name>encoding</param-name><br /><param-value>UTF-8</param-value><br /></init-param><br /></filter><br /><filter-mapping><br /><filter-name>SpringCharacterEncodingFilter</filter-name><br /><url-pattern>/*</url-pattern><br /></filter-mapping></p><p><servlet><br /><servlet-name>action</servlet-name><br /><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><br /><init-param><br /><param-name>config</param-name><br /><param-value>/WEB-INF/struts-config.xml</param-value><br /></init-param><br /><init-param><br /><param-name>debug</param-name><br /><param-value>2</param-value><br /></init-param><br /><init-param><br /><param-name>detail</param-name><br /><param-value>2</param-value><br /></init-param><br /><load-on-startup>2</load-on-startup><br /></servlet><br /><servlet-mapping><br /><servlet-name>action</servlet-name><br /><url-pattern>*.do</url-pattern><br /></servlet-mapping></p><p><welcome-file-list><br /><welcome-file>login.jsp</welcome-file><br /></welcome-file-list><br /></web-app>
然後是位於//WebRoot//WEB-INF//中的struts-config.xml檔案
<?xml version="1.0" encoding="UTF-8"?><br /><!DOCTYPE struts-config PUBLIC<br /> "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"<br /> "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"><br /><struts-config><br /><form-beans><br /><form-bean name="loginForm" type="com.jadyer.usermgr.web.forms.LoginActionForm" /><br /></form-beans></p><p><global-forwards><br /><forward name="success" path="/login_success.jsp" /><br /></global-forwards></p><p><action-mappings><br /><!-- 這裡type屬性需改為Spring的代理Action類org.springframework.web.struts.DelegatingActionProxy --><br /> <!-- 代理Action的作用:取得BeanFactory,然後到IoC容器中將本次請求對應的Action取出 --><br /><!-- 測試時可能會提示No action instance for path /login22 could be created --><br /> <!-- 經檢查發現,所使用的Sping2.5.SEC01所提供的類庫中的spring.jar裡面沒有DelegatingActionProxy類 --><br /><!-- 而在Spring2.0中,該代理Action類是捆綁在spring主包中的,而在Spring2.5.6中就被分隔出來了 --><br /><!-- 我們可以到spring-framework-2.5.6.SEC01//dist//modules//spring-webmvc-struts.jar中找到了該代理類 --><br /><!-- 所以將spring-webmvc-struts.jar包import當前Web工程後,即可解決該錯誤提示 --><br /><!-- 【補充】關於Spring與Struts的另一種整合方式,請參見http://blog.csdn.net/jadyer/archive/2011/02/20/6196545.aspx --><br /><action path="/login" type="org.springframework.web.struts.DelegatingActionProxy" name="loginForm" scope="request"/><br /></action-mappings><br /></struts-config>
接著是用於輸入使用者名稱和密碼的login.jsp頁面
<%@ page pageEncoding="UTF-8"%></p><p><h2>Spring2.5.6和Struts1.2.9整合</h2></p><p><form action="<%=request.getContextPath()%>/login.do" method="POST"><br />使用者:<input type="text" name="username"><br/><br />密碼:<input type="password" name="password"><br/><br /><input type="submit" value="整合測試" /><br /></form>
當使用者名稱和密碼正確時顯示給使用者的login_success.jsp頁面
<%@ page pageEncoding="UTF-8"%><br />恭喜<span style="color:blue;font-size:28px" mce_style="color:blue;font-size:28px">${loginForm.username}</span>登入成功
接著是位於src根目錄下的applicationContext.xml檔案
<?xml version="1.0" encoding="UTF-8"?><br /><beans xmlns="http://www.springframework.org/schema/beans"<br />xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />xmlns:aop="http://www.springframework.org/schema/aop"<br />xmlns:tx="http://www.springframework.org/schema/tx"<br />xsi:schemaLocation="<br />http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br />http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd<br />http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"></p><p><bean id="userManager" class="com.jadyer.usermgr.manager.UserManagerImpl"/></p><p><!-- 將Action交給Spring建立。這裡應該配置一下商務邏輯對象,將其注入給Action --><br /><!-- 建議將scope設定為prototype,這樣struts的Action就是安全執行緒的了 --><br /><!-- 這裡必須使用name屬性,而且name值必須和struts-config.xml檔案中<action>標籤的path屬性值一致 --><br /><!-- 【另外】<bean>的id和name區別:id值不能加特殊符號,name可以加類似斜杠/的特殊符號 --><br /><bean name="/login" class="com.jadyer.usermgr.web.actions.LoginAction" scope="prototype"><br /><property name="userManager" ref="userManager"/><br /></bean><br /></beans>
然後是用到的服務層的介面以及實作類別
package com.jadyer.usermgr.manager;<br />public interface UserManager {<br />public void login(String username, String password);<br />}</p><p>/**<br /> * 上面的UserManager是服務層的介面<br /> * 下面的UserManagerImpl是服務層介面的實作類別<br /> */</p><p>package com.jadyer.usermgr.manager;<br />public class UserManagerImpl implements UserManager {<br />public void login(String username, String password) {<br />//System.out.println(this.getClass() + ", username=" + username);<br />System.out.println(UserManagerImpl.class + ", username=" + username);<br />}<br />}
然後是Struts1.x中用於收集前台表單資訊的ActionForm類
package com.jadyer.usermgr.web.forms;</p><p>import org.apache.struts.action.ActionForm;</p><p>public class LoginActionForm extends ActionForm {<br />private String username;<br />private String password;</p><p>public String getUsername() {<br />return username;<br />}<br />public void setUsername(String username) {<br />this.username = username;<br />}<br />public String getPassword() {<br />return password;<br />}<br />public void setPassword(String password) {<br />this.password = password;<br />}<br />}
最後是Struts1.x中用於處理請求分發的Action類
package com.jadyer.usermgr.web.actions;</p><p>import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</p><p>import org.apache.struts.action.Action;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;</p><p>import com.jadyer.usermgr.manager.UserManager;<br />import com.jadyer.usermgr.web.forms.LoginActionForm;</p><p>public class LoginAction extends Action {<br />private UserManager userManager; //讓Spring注入該對象<br />public void setUserManager(UserManager userManager) {<br />this.userManager = userManager;<br />}</p><p>@Override<br />public ActionForward execute(ActionMapping mapping, ActionForm form,<br />HttpServletRequest request, HttpServletResponse response) throws Exception {<br />LoginActionForm laf = (LoginActionForm)form;<br />String username = laf.getUsername();<br />String password = laf.getPassword();<br />userManager.login(username, password);<br />return mapping.findForward("success");<br />}<br />}