穩定版本整合:Struts 2.1.8.1、jQuery 1.3.2、Spring 2.5.6。Spring 負責組裝 Action 與業務實現類,jQuery AJAX 送請至 Action。專案結構如下:

所需 JAR 包含 Struts2 核心、Spring 2.5、jQuery 等。
為便於 jQuery 選取表單元素,直接使用原生 HTML 而非 Struts 標籤:
<table class="wwFormTable">
<tr><td class="tdLabel"><label for="Login_username">用戶名:</label></td>
<td><input type="text" name="username" id="Login_username" /></td></tr>
<tr><td class="tdLabel"><label for="Login_password">密碼:</label></td>
<td><input type="password" name="password" id="Login_password" /></td></tr>
<tr><td colspan="2"><div align="right"><input type="button" id="login" value="登錄" /></div></td></tr>
</table>
<div id="message"></div>
<script type="text/javascript">
$(document).ready(function() {
$("#login").click(function() {
$.ajax({
url: "Login.action",
data: "username=" + $("input[name='username']").val() + "&password=" + $("input[name='password']").val(),
success: function(msg) { $("#message").html(msg); }
});
});
});
</script>
public class UserInfo {
private String username, password;
// getter/setter 省略
}
public class UserInfoManager {
public boolean checkUser(String name, String pass) {
return name.trim().equalsIgnoreCase("admin") && pass.equals("admin");
}
}
示範用硬編碼驗證,實際專案可整合 Hibernate。
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<package name="default" extends="struts-default">
<action name="Login" class="userlogin">
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
Action 類別指定為 Spring Bean ID userlogin,實際類別在 Spring 定義。
<beans default-autowire="byName" ...>
<bean id="userUtil" class="com.mag.util.UserInfoManager"/>
<bean id="userlogin" class="com.mag.str2.LoginAction">
<property name="userInfoManager" ref="userUtil"/>
</bean>
</beans>
public class LoginAction implements Action, ModelDriven<UserInfo> {
private UserInfo userInfo = new UserInfo();
public UserInfo getModel() { return userInfo; } // ModelDriven 自動封裝表單資料
private UserInfoManager userInfoManager;
public void setUserInfoManager(UserInfoManager m) { this.userInfoManager = m; }
public String execute() throws Exception {
if (userInfoManager.checkUser(userInfo.getUsername(), userInfo.getPassword())) {
ActionContext.getContext().getSession().put("user", userInfo.getUsername());
return SUCCESS;
}
return ERROR;
}
}
實作 Action 介面取得 SUCCESS/ERROR 常數,ModelDriven 簡化表單綁定。Spring 注入 userInfoManager 實例。
welcome.jsp:歡迎,${sessionScope.user}.您已經登錄!error.jsp:<font color="red">用戶名或密碼錯誤 !</font>jQuery 將回應內容顯示於 #message 區塊。

完整展示 Struts2 + Spring + jQuery AJAX 登入流程:前端原生表單 + jQuery 非同步請求 → Struts2 Filter 分派 → Spring 管理 Action 與業務 Bean 注入 → ModelDriven 自動封裝參數 → 邏輯驗證 → 返回結果片段給前端顯示。程式碼結構清晰,框架整合鬆耦合。