Java_WEB開發_struts2學習的總結

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.jarfreemarker.jarognl.jarstruts2-core.jarxwork.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的資源文件的namemessageResource,且文件放在src/lee路徑下

struts.custom.i18n.resources=lee.messageResource

 

d) 輸出國際化信息:

<s:text name="bookPageTitle"/>:使用s:text標籤來輸出國際化信息

相關文章
相關標籤/搜索