1、構建struts2的基本包有:html
commons-fileupload-...jarjava
commons-logging.jarweb
freemarker.jarapache
ognl-2.7.3.jarapp
struts2-config-browser-plugin.jarjsp
struts2-core-2.1.8.1.jarui
xwork-core-2.1.6.jarthis
2、構建Struts2.X應用:url
1.導入commons-logging.jar,freemarker.jar,ognl.jar,struts2-core.jar,xwork.jar這些struts2的基本包spa
2.修改WEB-INF下的web.xml文件,添加
<!-- 定義Struts 2的FilterDispatcher的Filter --> <filter> <!-- 定義核心Filter的名字 --> <filter-name> struts2 </filter-name> <!-- 定義核心Filter的實現類 --> <filter-class> org.apache.Struts2.dispatcher.FilterDispatcher </filter-class> </filter> <!-- FilterDispatcher用來初始化Struts 2而且處理全部的Web請求 --> <filter-mapping> <filter-name>Struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3.在src根目錄下創建struts.xml文件,內容:
<?xml version="1.0" encoding="GBK"?> <!-- 指定Struts 2配置文件的DTD信息 --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <!-- struts是Struts 2配置文件的根元素 --> <struts> <!-- Struts 2的Action必須放在指定的包空間下定義 --> <package name="strutsqs" extends="struts-default"> <!--定義login的Action,該Action的實現類爲lee.Action類 --> <action name="Login" class="struts2.action.LoginAction"> <!--定義處理結果和資源之間映射關係。 --> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> </action> </package> </struts>
4.添加控制器類,實現接口:com.opensymphony.xwork2.Action,重寫方法:public String execute() throws Exception {},例如:
package struts2.action; import struts2.biz.BookService; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; public class GetBooksAction implements Action { private String[] books; public String[] getBooks() { return books; } public void setBooks(String[] books) { this.books = books; } public String execute() throws Exception { // TODO Auto-generated method stub String name = (String)ActionContext.getContext().getSession().get("user"); if(null != name && "123".equals(name)){ setBooks(BookService.getBooks()); return SUCCESS; }else{ return LOGIN; } } }
5.如需對錶單或其餘提交信息驗證,在對應的Action的同級目錄添加ActionName-validation.xml文件,ActionName替換成你的Action的名字,如GetBooksAction 的驗證文件爲GetBooksAction-validation.xml內容好比:
<?xml version="1.0" encoding="GBK"?> <!-- 指定校驗規則文件的DTD信息 --> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <!-- 校驗規則定義文件的根元素 --> <validators> <!-- 校驗第一個表單域:username --> <field name="name"> <!-- 該表單域必須填寫 --> <field-validator type="requiredstring"> <!-- 若是校驗失敗,顯示user.required對應的信息 --> <message key="user.required" /> </field-validator> </field> <!-- 校驗第二個表單域:password --> <field name="password"> <field-validator type="requiredstring"> <!-- 若是校驗失敗,顯示pass.required對應的信息 --> <message key="密碼校驗失敗" /> </field-validator> </field> </validators>
6.頁面UI顯示標籤如:
<%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>登陸頁面</title> </head> <body> <!-- 使用form標籤生成表單元素 --> <s:form action="Login"> <!-- 生成一個用戶名文本輸入框 --> <s:textfield name="username" label="用戶名"/> <!-- 生成一個密碼文本輸入框 --> <s:textfield name="password" label="密 碼"/> <!-- 生成一個提交按鈕 --> <s:submit value="登陸"/> </s:form> </body> </html>
加入<%@taglib prefix="s" uri="/struts-tags"%>引用
Struts 2爲經常使用表單域都提供了對應的標籤,下面是經常使用的表單域標籤。
— form:對應一個表單元素。
— checkbox:對應一個複選框元素。
— password:對應一個密碼輸入框。
— radio:對應一個單選框元素。
— reset:對應一個重設按鈕。
— select:對應一個下拉列表框。
— submit:對應一個提交按鈕。
— textarea:對應一個多行文本域。
— textfield:對應一個單行文本框。
7.頁面取值,正如GetBooksAction 中的邏輯,將要返回的數據放入到Action的屬性中便可,在頁面取值的方法:
a) 從request的「struts.valueStack」屬性中取得如:
<table border="1" width="360"> <caption>做者李剛的圖書</caption> <% //獲取封裝輸出信息的ValueStack對象 ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack"); //調用ValueStack的fineValue方法獲取Action中的books屬性值 String[] books = (String[])vs.findValue("books"); //迭代輸出所有圖書信息 for (String book : books) { %> <tr> <td>書名:</td> <td><%=book%></td> </tr> <%}%> </table>
b) 在頁面中直接用EL表達式取值:
${books["0"]}
c) 用struts2標籤:
<table border="1" width="360"> <caption>做者李剛的圖書</caption> <!-- 迭代輸出ValueStack中的books對象,其中status是迭代的序號 --> <s:iterator value="books" status="index"> <!-- 判斷序號是否爲奇數 --> <s:if test="#index.odd == true"> <tr style="background-color:#cccccc" mce_style="background-color:#cccccc"> </s:if> <!-- 判斷迭代元素的序號是否不爲偶數 --> <s:else> <tr> </s:else> <td>書名:</td> <td> <s:property/> </td> </tr> </s:iterator> </table>
8.國際化:
a) 在根目錄下創建:basename_語言代碼_國家代碼.properties文件,如:
messageResouce_zh_CN.properties,在其中創建數據:
loginPage=登陸頁面
errorPage=錯誤頁面
succPage=成功頁面
failTip=對不起,您不能登陸!
succTip=歡迎,${0},您已經登陸!
viewLink=查看做者李剛已出版的圖書
bookPageTitle=做者李剛已出版的圖書
bookName=書名:
user=用戶名
pass=密 碼
login=登陸
對應的英文版的文件:messageResouce_en_ US.properties
loginPage=Login Page
errorPage=Error Page
succPage=Welcome Page
failTip=Sorry,You can't log in!
succTip=welcome,{0},you has logged in!
viewLink=View LiGang/'s Books
bookPageTitle=LiGang/'s Books
bookName=BookName:
user=User Name
pass=User Pass
login=Login
b) 在根目錄下創建文件:struts.properties,加載資源文件能夠經過它來定義,本應用的struts.properties文件僅有以下一行代碼:
//定義Struts 2的資源文件的name
struts.custom.i18n.resources = messageResouce_zh_CN
c) 若是將該資源文件保存在src的子目錄下,例如保存在src/lee路徑下,則須要修改struts.properties中的定義以下:
//定義Struts 2的資源文件的name是messageResource,且文件放在src/lee路徑下
struts.custom.i18n.resources=lee.messageResource
d) 輸出國際化信息:
<s:text name="bookPageTitle"/>:使用s:text標籤來輸出國際化信息