當(dāng)你向一個框架提交HTML表單的時候,輸入的數(shù)據(jù)并不是被發(fā)送到一個服務(wù)端頁面,而是傳送到一個你自己提供的稱為Action的java類,產(chǎn)生的結(jié)果會選擇一個資源來繪制響應(yīng)。該資源通常為一個服務(wù)端的頁面,但也可以是一個pdf的文檔,也可以是一個Excel電子數(shù)據(jù)表格,或者是Java applet窗口。
假設(shè)你希望創(chuàng)建一個簡單的“Hello World”例子來顯示歡迎消息。下載struts2的空web應(yīng)用(即struts2-blank-2.0.6.war),你需要做以下三件事:
1.創(chuàng)建一個服務(wù)頁面來展示消息
2.創(chuàng)建一個Action類來創(chuàng)建消息
3.創(chuàng)建一個連接Action類和頁面的映射
讓我們來看看這個Action,服務(wù)頁面和映射的例子。如果你喜歡也可以使用IDE來編輯代碼。
代碼如下:
首先,定義一個服務(wù)頁面顯示數(shù)據(jù)
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h2><s:property value="message" /></h2>
</body>
</html>
其次,我們需要一個Action類來創(chuàng)建消息
package tutorial;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorld extends ActionSupport {
public static final String MESSAGE = "Struts is up and running...";
private String message;
public String execute() throws Exception {
setMessage(MESSAGE);
return SUCCESS;
}
public void setMessage(String message) {
this.message = message;
}
代碼是如何工作的:
1.容器接收到HelloWorld.action的請求。根據(jù)web.xml的設(shè)置,容器會尋找所有被發(fā)送到org.apache.struts2.dispatcher.FilterDispatcher的請求,包括所有的*.action的請求。FilterDispatcher是框架的入口點(diǎn)。
2.框架尋找一個映射名為HelloWorld的Action類。它找到與HelloWorld類相關(guān)的映射,并調(diào)用Action的execute方法。
3.execute方法設(shè)置了消息并返回SUCCESS。如果返回的是SUCCESS,框架會檢查Action類映射的哪個頁面將被裝載??蚣軙嬖V容器繪制HelloWorld.jsp作為請求的響應(yīng)。
4.當(dāng)HelloWorld.jsp被調(diào)用,<s:property value="message" />標(biāo)簽調(diào)用HelloWorld的Action類的getter方法getMessage,并將message的值合并到響應(yīng)中去。
5.一個純粹的響應(yīng)被發(fā)送回瀏覽器。
測試Actions類,代碼如下
package tutorizl
import junit.framework.TestCase;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldTest extends TestCase {
public void testHelloWorld() throws Exception {
HelloWorld hello_world = new HelloWorld();
String results = hello_world.execute();
assertTrue("Expected a success results!", ActionSupport.SUCCESS.equals(results));
assertTrue("Expected the default message!",HelloWorld.MESSAGE.equals(hello_world.getMessage()));
}
}
需要記住的是:框架使用Action類來處理HTML表單和其他請求,Action類返回一個諸如SUCCESS,ERROR,或INPUT名稱。根據(jù)來自struts.xml的映射,一個返回的名稱會選擇相應(yīng)的頁面,另外的Action,或其他web資源(圖象,PDF)。
當(dāng)一個服務(wù)端頁面被繪制,大多情況下會包括由Action類提供的動態(tài)數(shù)據(jù)??蚣軙峁┮幌盗械腍TML標(biāo)簽創(chuàng)建頁面來使得顯示動態(tài)數(shù)據(jù)更加簡單。