執行環境
- Eclipse 3.2 + MyEclipse GA 5.0
- Apache Tomcat 5.5.20
- Struts 1.2 / Spring 1.2
專案結構
Welcome_SS/
├── WebRoot/
│ ├── index.jsp
│ ├── login.jsp
│ ├── reinput_blank.jsp
│ ├── reinput_error.jsp
│ ├── success.jsp
│ └── WEB-INF/
│ ├── struts-config.xml
│ ├── web.xml
│ └── classes/applicationContext.xml
└── src/
└── com/yourcompany/struts/
├── action/LoginAction.java
└── form/LoginForm.java
關鍵配置檔
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"https://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="loginForm" type="com.yourcompany.struts.form.LoginForm"/>
</form-beans>
<action-mappings>
<action path="/login"
type="org.springframework.web.struts.DelegatingActionProxy"
name="loginForm"
scope="request"
input="/login.jsp">
<forward name="success" path="/success.jsp"/>
<forward name="reinput_blank" path="/reinput_blank.jsp"/>
<forward name="reinput_error" path="/reinput_error.jsp"/>
</action>
</action-mappings>
<!-- Spring 整合外掛 -->
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml"/>
</plug-in>
</struts-config>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"https://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean name="/login" class="com.yourcompany.struts.action.LoginAction">
<property name="message"><value>Welcome_</value></property>
</bean>
</beans>
核心類別
LoginForm.java
package com.yourcompany.struts.form;
import org.apache.struts.action.ActionForm;
public class LoginForm extends ActionForm {
private String username;
private String password;
// getter/setter 略
}
LoginAction.java
package com.yourcompany.struts.action;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import com.yourcompany.struts.form.LoginForm;
public class LoginAction extends Action {
private String message; // Spring 注入
public void setMessage(String message) { this.message = message; }
public String getMessage() { return message; }
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm f = (LoginForm) form;
if ("".equals(f.getUsername()) || "".equals(f.getPassword())) {
return mapping.findForward("reinput_blank");
}
if ("success".equals(f.getUsername()) && "success".equals(f.getPassword())) {
request.setAttribute("message", getMessage() + f.getUsername());
return mapping.findForward("success");
}
return mapping.findForward("reinput_error");
}
}
頁面檔案重點
login.jsp:表單 action="login.do" 對應 /login 路徑。
reinput_blank.jsp / reinput_error.jsp:顯示錯誤訊息並保留輸入框。
success.jsp:用 <%=request.getAttribute("message")%> 顯示歡迎訊息。
部署與啟動
- Tomcat
server.xml 新增 <Context path="/wess" docBase=".../Welcome_SS/WebRoot" reloadable="true"/>
- MyEclipse 啟動 Tomcat。
- 瀏覽器訪問
https://localhost:8080/wess → 點擊登入 → 帳密皆輸入 success 即可成功。
整合關鍵點總結
- Action 型別改為
DelegatingActionProxy,將實體 Action 交給 Spring 管理。
ContextLoaderPlugIn 載入 Spring 容器,掃描 applicationContext.xml。
- Action 變成 Spring Bean,可享有 DI、AOP、事務管理等優勢。