手把手建立第一個 Struts 2 應用,涵蓋依賴管理、配置檔案、Action/JSP 編寫與執行原理解析。
官網下載 struts-2.0.9,核心 JAR:
struts2-core-2.0.9.jarxwork-2.0.4.jar(核心基礎)ognl-2.6.11.jar(表達式語言)freemarker-2.3.8.jar(標籤模板引擎)commons-logging-1.0.4.jar(日誌介面)
<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>
所有 .action 請求經 FilterDispatcher 進入框架。
<!DOCTYPE struts PUBLIC ...>
<struts>
<package name="default" extends="struts-default"/>
</struts>
放置 WEB-INF/classes(或 src 自動編譯)。
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>Hello World!</title></head>
<body>
<s:form action="hello">
<s:textfield name="name" label="name" />
<s:submit/>
</s:form>
</body>
</html>
<s:form> 自動生成 <form action="hello.action" method="post">。
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {
private String name;
public String execute() throws Exception {
return SUCCESS;
}
public void setName(String name) { this.name = name; }
public String getName() { return name; }
}
屬性 name 自動綁定表單欄位,execute() 回傳 SUCCESS(常數 "success")。
<package name="tutorial" extends="struts-default">
<action name="HelloWorld" class="tutorial.HelloWorld">
<result>/HelloWorld.jsp</result>
</action>
</package>
https://localhost:8080/tutorial/HelloWorld.actionFilterDispatcher 攔截,委派 ActionProxyHelloWorld,調用 execute()SUCCESS → 匹配 <result>/HelloWorld.jsp</result><s:property value="name"/> 呼叫 getName() 顯示輸入值
<action name="Logon" class="tutorial.Logon">
<result type="redirect-action">Menu</result> <!-- success 導向 Menu action -->
<result name="input">/tutorial/Logon.jsp</result> <!-- input 導向登入頁 -->
</action>
type="redirect-action":重導向至另一 Actionname="input":對應 execute() 回傳 "input" 時name="success", type="dispatcher"(轉發 JSP)驗證失敗時回傳 INPUT,顯示表單錯誤;成功則重導向避免重複提交。