精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Struts2實例
 下面我們通過實例來學習一下Struts2的使用。通過本實例的學習,我們將會對struts2的表單以及表單驗證有一個初步的認識、了解struts2的配置以及初探Struts2的本地化輸出。
1.實例說明
  本例是Struts2的簡單實例,通過本工程的學習,我們將會對struts2的表單以及表單驗證有一個初步的認識、了解struts2的配置以及初探Struts2的本地化輸出。

2. 編碼準備
1)包的引入
在MyEclipse或NetBeans中建立web工程,將所需的包放入WebRoot/lib目錄中,本實例所需的包有:
 commons-logging-1.1.jar
 freemarker-2.3.8.jar
 ognl-2.6.11.jar
 struts2-core-2.0.8.jar
 xwork-2.0.3.jar

  這些包在struts-2.0.8-all\struts-2.0.8\lib目錄下都可以找到,請讀者自行下載。
后來我換成了:到struts-2.0.14-lib去找
commons-logging-1.0.4.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.14.jar
xwork-2.0.7.jar
2) web.xml的配置
要使struts能正常工作,需修改web.xml的內容,為其增加struts2的FilterDispatcher,修改后的web.xml的內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee <display-name>Struts Blank</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
在該頁面的頂部,我們需要將struts2的標簽庫引入,語句為:<%@ taglib prefix="s" uri="/struts-tags" %>
在該頁面,主要用到struts2的<s:url>標簽,該頁面主要用到該標簽的兩個屬性,分別為value和action,其中action屬性表示用action來產生url,而value表示使用的目標值。在頁面上點擊“查看源文件”按鈕,可看到生成的語句分別變為:
<link href="/struts2-blank-2.0.8/css/examplecss" rel="stylesheet" type="text/css"/>
<a href="/struts2-blank-2.0.8/example/Login.jsp ">
<a href="/struts2-blank-2.0.8/example/Register.action">
由此可知使用該標簽時,struts2會自動為我們帶上下文路徑,對于加了屬性action的<s:url>標簽,后面會自動帶上“.action”作為后綴。
  點擊“登錄”鏈接后,跳轉到Login.jsp頁面,該頁包含一個登錄表單,讓用戶輸入用戶名和密碼信息,用戶點擊提交按鈕,跳轉到指定的Action——Login進行處理。Login.jsp的內容如下:
該頁用到Struts2的表單標簽<s:form>、<s:textfield>和<s:password>。
 <s:form>的action屬性表示表單提交后跳轉的action的名稱,此處為Login,該標簽最終將生成HTML的form;
 <s:textfield>標簽類同于HTML的<input type=”text” …>,其中name表示屬性域的名稱,label表示其前的提示名;
 <s:password>標簽類同于HTML的<input type=”password” …>,其name和label類同于<s:textfield>,在此略。
 
2)配置文件struts.xml和example.xml
在上述jsp頁面,我們需跳轉到兩個Action地址,需在struts2的配置文件中配置,因當工程變大時,一個龐大的struts2的配置極難維護,建議按包路徑分開配置文件,所以本實例除了struts.xml配置文件外,還新增了一個額外的配置文件example.xml。該文件在struts.xml中引用。struts.xml放在src目錄下,該文件的內容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false"
/>
<constant name="struts.devMode" value="false"
/>
<include file="example.xml"/>
<!-- Add packages here -->
</struts>
 
可看到該文件通過<include file="example.xml"/>將example.xml也作為struts2的配置文件。
接下來,讓我們看看example.xml的配置:
3) Login和ExampleSupport類以及驗證配置類Login-validation.xml的編寫
在配置文件example.xml中,定義了兩個Action,下面我們用代碼來實現這兩個Action
首先讓我們來看看ExampleSupport這個Action,這個Action不做任何操作,集成自ActionSupport,是本工程的各Action類的基類,該類的代碼如下:
package example;
import com.opensymphony.xwork2.ActionSupport;
publicclass ExampleSupport extends ActionSupport {
}
 
接著讓我們來看看Login這個Action,該類繼承自ExampleSupport類,該Action需實現的業務邏輯如下:
a) 當用戶名(username)或密碼(password)有一者或兩者為空時,登錄不成功,跳轉到登錄信息輸入頁面;
b) 當用戶名(username)和密碼(password)都不為空時,登錄成功,跳轉到主菜單頁。
  對于用戶名和密碼的驗證,我們可以先考慮在Login類中用代碼實現的方式,此時該類的代碼如下:
package example;
public
class Login extends ExampleSupport {
public String execute() throws Exception {
if (isInvalid(getUsername()))
return INPUT;
if (isInvalid(getPassword()))
return INPUT;
return SUCCESS;
}
private boolean isInvalid(String value) {
return (value ==
null
|| value.length() ==
0);
}
private String username;
public String getUsername() {
return username;
}
public
void setUsername(String username) {
this.username = username;
}
private String password;
public String getPassword() {
return password;
}
public
void setPassword(String password) {
this.password = password;
}
}
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"
<validators>
<field name="username">
<field-validator type="requiredstring">
<message key="requiredstring"/>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message key="requiredstring"/>
</field-validator>
</field>
</validators>
 
當驗證未通過時,將不會進入Login Action中的execute方法,此時可刪除掉Login這個Action中的驗證內容,該類的execute方法直接跳轉到SUCCESS即可,修改后的代碼略。
 
4)本地化輸出——資源文件package.properties
為了本地化的輸出驗證錯誤信息,我們可以將參數信息和錯誤信息放入資源文件中,資源文件package.properties位于src/example目錄下,內容如下:
requiredstring = ${getText(fieldName)}不能為空.
password = 密碼
username = 用戶名
Missing.message = 該部分尚未構建,請稍候訪問...
在src/example目下下建立對應的中文資源文件package_zh_CN.properties,為了避免中文亂碼問題,我們編寫一個批處理文件code.bat來對package.properties進行編碼處理,主要用到native2ascii命令,其內容如下:
del package_zh_CN.properties
copy package.properties package_zh_CN.properties.gbk
native2ascii -encoding GBK package_zh_CN.properties.gbk package_zh_CN.properties
del package_zh_CN.properties.gbk
del *.bak
運行該批處理文件,可在package_zh_CN.properties中可看到編碼后的資源文件信息,如下:
requiredstring = ${getText(fieldName)}\u4e0d\u80fd\u4e3a\u7a7a.
password = \u5bc6\u7801
username = \u7528\u6237\u540d
Missing.message = \u8be5\u90e8\u5206\u5c1a\u672a\u6784\u5efa\uff0c\u8bf7\u7a0d\u5019\u8bbf\u95ee...
 
5)Register.jsp和Missing.jsp的編寫
在2中的example.xml中,我們配置了通配符映射,在Welcome.jsp中,我們使用
<a href="<s:url action="Register"/>">注冊</a>
其中的Register在example中找不到相關映射,于是在用戶點擊“注冊”按鈕時,將映射到通配符所映射的Action:example. ExampleSupport.而后跳轉到Register.jsp頁面,其代碼如下:
<%@ page contentType="text/html; charset=UTF-8"
%>
<%@ taglib prefix="s" uri="/struts-tags"
%>
<s:include value="Missing.jsp"/>
該頁面包含Missing.jsp頁面,其代碼如下:
<%@ page contentType="text/html; charset=UTF-8"
%>
<%@ taglib prefix="s" uri="/struts-tags"
%>
<html>
<head><title>未構建頁面</title></head>
<body>
<p>
<!-- 讀取配置文件中的對應信息. -->
<s:text name="Missing.message"/>
</p>
</body>
</html>
 
四. 總結
到此為止,我們的實例已構建完,可通過瀏覽器訪問:http://localhost:8080/struts2-blank-2.0.8/example/Welcome.jsp看到我們的勞動成果。下面總結一下我們在該實例中學到的東西。
常用的一些標簽的使用
在本實例中,我們學習了<s:textfield>、<s:password>、<s:form>以及<s:url>的使用。
表單數據的驗證
本文描述了一個簡單的表單的數據非空驗證。
3. 本地化輸出錯誤提示信息
在驗證失敗時,用資源文件來輸出錯誤提示信息。
4.Strut2配置文件中通配符的使用
對于某些地址,我們可以使用在struts2的配置通配符來使其映射到某個Action中去。
本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 鄯善县| 武功县| 绥芬河市| 偃师市| 黑山县| 甘泉县| 罗源县| 屏东市| 海盐县| 盱眙县| 丰原市| 东至县| 黔西县| 林西县| 含山县| 武宁县| 合川市| 靖边县| 葵青区| 洪洞县| 慈溪市| 固镇县| 沂源县| 林州市| 迁西县| 东城区| 宝坻区| 津南区| 贵阳市| 陵水| 大城县| 普陀区| 庐江县| 山阴县| 乌鲁木齐市| 莒南县| 澜沧| 祁连县| 墨江| 凭祥市| 临澧县|