Java EE輕量級框架應(yīng)用開發(fā)教程第1章 Struts2基礎(chǔ)知識_第1頁
Java EE輕量級框架應(yīng)用開發(fā)教程第1章 Struts2基礎(chǔ)知識_第2頁
Java EE輕量級框架應(yīng)用開發(fā)教程第1章 Struts2基礎(chǔ)知識_第3頁
Java EE輕量級框架應(yīng)用開發(fā)教程第1章 Struts2基礎(chǔ)知識_第4頁
Java EE輕量級框架應(yīng)用開發(fā)教程第1章 Struts2基礎(chǔ)知識_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第一章Struts2基礎(chǔ)知識本章要點·配置Sturts2運行環(huán)境·

Struts2第一個例子·Struts2框架工作原理·配置Struts2·Action和類型轉(zhuǎn)換配置Sturts2運行環(huán)境Struts已經(jīng)分化成了兩個框架在傳統(tǒng)的Struts1的基礎(chǔ)上,融合了另外的一個優(yōu)秀的

Web框架WebWork的Struts2框架Shale,與原有的Struts1關(guān)聯(lián)很少,使用了全新的設(shè)計思想配置Struts2運行環(huán)境安裝和配置好JDK后,配置JDK環(huán)境變量安裝Java

Web服務(wù)器,選擇開源的Tomcat作為服務(wù)器安裝Struts2框架Struts2框架的安裝Struts的官方網(wǎng)站:,目前最新版本是Struts

2.x下載完畢后,將下載的壓縮包進(jìn)行解壓,然后找到lib文件夾,將類庫struts2-core-2.2.1.jar、xwork2.2.1.jar、freemarker-2.3.1.jar、commons-fileupload-1.2.1.jar以及commons-logging-1.0.4.ja制到Web應(yīng)用的WEB-INF/lib文件夾中·所復(fù)制類庫的作用Struts2的核心庫WebWork的核心庫,需要它的支持OGNL表達(dá)式語言,Struts2支持該EL表達(dá)式表現(xiàn)層框架,定義了Struts2的可視組件主題日志管理文件上傳與下載MyEclipse自帶工具加載Struts2框架·添加Struts框架支持·選擇Struts2框架·加載完成后自動添加了Struts2所需jar包·配置Sturts2運行環(huán)境·

Struts2第一個例子·Struts2框架工作原理·配置Struts2·Action和類型轉(zhuǎn)換Struts2第一個例子實現(xiàn)了一個簡單的登錄功能,用戶打開一個登錄頁面輸入登錄名稱和登錄密碼,如果登錄名稱和登錄密碼輸入正確就進(jìn)入歡迎頁面,否則就重新回到登錄頁面將項目命名為Demo1,功能實現(xiàn)后,目錄結(jié)構(gòu)如下Demo1工作實例Struts2攔截用戶請求·

在web.xml文件中配置Struts2的核心控制器,用來攔截客戶端請求,并把請求轉(zhuǎn)發(fā)到相應(yīng)的Action類來處理,代碼如下:<?xml

version="1.0"

encoding="UTF-8"?><web-app

version="2.5"

xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee

/xml/ns/javaee/web-app_2_5.xsd"><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>創(chuàng)建視圖頁面login.jsp·

Struts2的標(biāo)簽庫是Struts2的重要組成部分,不僅為表現(xiàn)層提供了數(shù)據(jù)處理能力,而且也提供了基本的流程控制功能以及對國際化、Ajax的支持等諸多功能。通過使用Struts2的標(biāo)簽庫可以最大限度地減少試圖頁面的編碼量。login.jsp使用

Struts2標(biāo)簽庫實現(xiàn)了一個表單,核心代碼如下:<body><div

style="font-size:14px;font-weight:bold">用戶登錄</div><div><s:form

action=""

namespace="/login"><s:textfield

name="username"style="font-size:12px;width:120px;"label="登錄名稱"/><s:password

name="password"style="font-size:12px;width:120px;"label="登錄密碼"/><s:submit

value="登錄"/></s:form></div></body>創(chuàng)建歡迎頁面success.jsp·success.jsp為登錄成功后顯示的歡迎頁面,代碼如下<body><div

style="margin:40px;font-weight:bold">登錄成功,歡迎您!</div></body>創(chuàng)建業(yè)務(wù)控制器LoginAction·

本實例的邏輯控制器組件Action,代碼如下package

com.action;import

com.opensymphony.xwork2.ActionSupport;public

class

LoginAction

extends

ActionSupport

{private

String

username;private

String

password;public

String

getUsername()

{return

username;}public

void

setUsername(String

username)

{this.username

=

username;}public

String

getPassword()

{return

password;}public

void

setPassword(String

password)

{this.password

=

password;}public

String

execute()

throws

Exception{if(this.username.equals("admin")&&this.password.equals("12345")){else

{return

SUCCESS;return

LOGIN;}}}}配置LoginAction當(dāng)Action處理完客戶端請求后就會返回一個字符串,每個字符串都對應(yīng)一個視圖在Struts.xml文件中配置Action時,name屬性定義該Action的名稱,class定義這個Action的實際實現(xiàn)類,method表示checkLogin這個Action由實際實現(xiàn)類LoginAction的checkLogin()方法來處理配置Action時,為每個Action都指定了result元素,每個result元素都定義了一個邏輯視圖,而用

name定義了Action所返回的字符串·struts.xml文件內(nèi)容如下<?xml

version="1.0"

encoding="UTF-8"

?><!DOCTYPE

struts

PUBLIC

"-//Apache

Software

Foundation//DTD

Struts

Configuration2.1//EN"

"/dtds/struts-2.1.dtd"><struts><package

name="default"

extends="struts-default"

namespace="/"><action

name="checkLogin"

class="com.action.LoginAction"><result

name="success">/success.jsp</result><result

name="login">/login.jsp</result></action></package></struts>·說明·

web.xml文件存儲在WEB-INF目錄下struts.xml文件應(yīng)放在WEB-INF\classes目錄下lib下存儲的是所必須的類庫包,如Struts2核心類庫包等效果演示實例部署到Tomcat服務(wù)器上后打開login.jsp頁面在兩個文本框中都輸入admin,單擊“登錄”按鈕,登錄成功后會轉(zhuǎn)向success.jsp頁面login.jspsuccess.jsp本章要點·配置Sturts2運行環(huán)境·

Struts2第一個例子·Struts2框架工作原理·配置Struts2·Action和類型轉(zhuǎn)換Struts2框架工作原理單擊“登錄”按鈕,向服務(wù)器提交登錄請求由于在web.xml文件中配置了Struts2核心控制器FilterDispatcher,此時Struts2就會攔截這個登錄請求由于表單的action值為checkLogin,F(xiàn)ilterDispatcher就會在struts.x配置文件中查找name為checkLogin的Action配置,找到后就會將已經(jīng)攔截的登錄請求轉(zhuǎn)發(fā)給LoginAction來處理由于在struts.xml配置文件中Action的method屬性的值是Checklogin,LoginAction就會調(diào)用自身的checkLogin()方法完成對客戶端的登錄請求的處理。如果登錄成功就返回SUCCESS,登錄失敗就返

回LOGIN由于在struts.xml配置文件中配置LoginAction時指定了<resultname=”success”>/success.jsp</result>,所以當(dāng)LoginAction返回

success時則轉(zhuǎn)向success.jsp頁面,否則轉(zhuǎn)向login.jsp頁面處理流程說明FilterDispatcher是Struts2的核心控制器,負(fù)責(zé)攔截所有的客戶端請求struts.xml文件是Struts2框架的配置文件,主要負(fù)責(zé)配置業(yè)務(wù)邏輯控制器Action,以及用戶自定義的攔截器等,是Struts2各個組件之間的紐帶Action是Struts2的業(yè)務(wù)邏器,負(fù)責(zé)處理客戶端請求并將處理結(jié)果輸出給客戶端,要想處理客戶端請求就必須獲得請求字符串的參數(shù)或從表單提交的數(shù)據(jù)Action在處理完客戶端請求后會通過視圖組件把處理結(jié)果顯示出來本章要點·配置Sturts2運行環(huán)境·

Struts2第一個例子·Struts2框架工作原理·配置Struts2·Action和類型轉(zhuǎn)換配置Struts2任何MVC框架都需要與Web應(yīng)用整合,這就不得不借助/WEB-INF路徑下的web.xml文件,只有配置web.xml文件,Servlet才會被應(yīng)用加載對于Struts2框架而言,需要加載FilterDispatcher配置Web.xml·

Struts2將核心控制器設(shè)計成一個過濾器Filter,而不是一個普通的Servlet,需要在Web.xml文件中配置

FilterDispatcher,代碼片段如下<!--struts過濾器--><filter><!--配置Struts2核心Filter的名字--><filter-name>struts2</filter-name><!--配置Struts2核心Filter的實現(xiàn)類--><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><!--配置Struts2的映射--><filter-name>struts2</filter-name><url-pattern>*</url-pattern></filter-mapping>·

子元素<url-pattern>的值為”*”時表示用戶的所有請求都是使用此框架來處理·配置FilterDispatcher類時,還可以指定一系列的初始化參數(shù)actionPackages參數(shù),用來配置Struts2框架默認(rèn)加載的

Action包結(jié)構(gòu),參數(shù)的值是一個字符串類型的包空間,

如果有多個包空間,可以用英文“,”符號隔開配置Struts2常量,每個<init-param>元素配置一個Struts常量,其中<param-name>子元素指定了常量名,而<param-value>子元素指定了常量值初始化參數(shù)的配置示例<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><init-param><!--配置Struts2框架默認(rèn)加載的Action包結(jié)構(gòu)--><param-name>actionPackages</param-name><param-value>org.apache.Struts2.showcase.person</param-value></init-param><!--配置Struts2框架的配置提供者類--><init-param><param-name>configProviders</param-name><param-value>superMos.myconfigurationProvider</param-value></init-param></filter>配置Struts2.xmlStruts框架的核心配置文件,主要負(fù)責(zé)管理Struts2框架的業(yè)務(wù)控制器Action,不對業(yè)務(wù)進(jìn)行真正的操作,調(diào)用的是業(yè)務(wù)邏輯組件的功能。相當(dāng)于Service的功能組件,業(yè)務(wù)邏輯組件又封裝了DAO等操作默認(rèn)情況下,Struts2框架將自動加載放到/WEB-INF/classes路徑下的struts.xml文件中,在EclipseIDE環(huán)境下進(jìn)行Struts2的配置,一定要將struts.xml文件放到

src文件夾Struts2框架通過struts.xml文件自動加載資源完成各種所需的功能Struts.xml基本結(jié)構(gòu)<?xml

version="1.0"

encoding="UTF-8"

?><!DOCTYPE

struts

PUBLIC

"-//Apache

Software

Foundation//DTD

Struts

Configuration

2.1//EN"

"/dtds/struts-2.1.dt<struts><!--基本配置--><constant

name="struts.devMode"

value="false"></constant><constant

name="struts.locale"

value="zh_CN"></constant><constant

name="struts.i18n.encoding"

value="UTF-8"></constant><!--包含文件的配置--><include

file=”struts-chat.xml”/><include

file=”struts-hangman.xml”/><!--默認(rèn)包的配置--><package

name="default"

extends="struts-default"

namespace="/"><!—攔截器的配置--><interceptors><interceptor-stack

name="stack"><interceptor-ref

name="checkbox"></interceptor-ref><interceptor-ref

name="params"></interceptor-ref></interceptor-stack></interceptors><!--Action的配置--><action

name="login"

class="com.action.LoginAction"><result

name="success">/success.jsp</result><result

name="login">/login.jsp</result></action><action

name="welcome"><result>/WEB-INF/jsp/welcome.jsp</result></action></package></struts>配置SpertiesStruts2框架的兩個核心配置文件struts.xml文件主要負(fù)責(zé)管理應(yīng)用中的Action映射,以及該Action包含的Result定義等perties文件,該文件定義了Struts

2框架的大性,開發(fā)者可以通過改變這些屬性來滿足應(yīng)用的需求perties文件通常放在Web應(yīng)用的WEB-INF/classesperties文件是一個標(biāo)準(zhǔn)的Properties文件包含了系列的key-value對象,每個key就是一個

Struts

2屬性,該key對應(yīng)的value就是一個Struts

2屬性值·Struts2提供了兩種方式來管理Struts2的屬性,既可以通過perties文件來配置Struts2屬性,也可以通過在struts.xml文件中配置constant元素來配置Struts2屬性,struts.xml配置文件如下<?xml

version="1.0"

encoding="UTF-8"

?><!DOCTYPE

struts

PUBLIC

"-//Apache

Software

Foundation//DTD

Struts

Configuration2.1//EN"

"/dtds/struts-2.1.dtd"><struts><!—通過constant元素配置Struts2的屬性--><constant

name="struts.custom.il8n.resources"

value="messageResource"/><constant

name="struts.locale"

value="zh_CN"></constant><constant

name="struts.i18n.encoding"

value="UTF-8"></constant>……</struts>本章要點·配置Sturts2運行環(huán)境·

Struts2第一個例子·Struts2框架工作原理·配置Struts2·Action和類型轉(zhuǎn)換Action和類型轉(zhuǎn)換在Struts2中,一個Action類代表一次請求或調(diào)用,每個請求的動作都對應(yīng)于一個相應(yīng)的Action類一個Action類是一個獨立的工作單元每次用戶的請求,都會轉(zhuǎn)到一個相應(yīng)的Action類里面,由這個Action類來進(jìn)行處理實現(xiàn)Action控制類·Struts2通常直接使用Action來封裝HTTP請求參數(shù),因此需要為Action中的屬性添加setter()與getter()方法,LoginAction.java代碼如下public

class

LoginAction

{private

String

userName;private

String

password;public

String

execute()

throws

Exception{return

"success";}public

String

getUserName()

{return

userName;}public

void

setUserName(String

userName)

{this.userName

=

userName;}public

String

getPassword()

{return

password;}public

void

setPassword(String

password)

{this.password

=

password;}}·為了更加規(guī)范的開發(fā)Action,Struts提供了一個

Action接口,代碼如下·一般寫Action類通常不用實現(xiàn)該接口,而是繼承該接口的實現(xiàn)類ActionSupportpublic

interface

Action

{public

static

final

java.lang.String

SUCCESS="success";//定義靜態(tài)常量SUCCESS,即字符串successpublic

static

final

java.lang.String

NONE="none";//定義靜態(tài)常量NONE,即字符串nonepublic

static

final

java.lang.String

ERROR="error";//定義靜態(tài)常量ERROR,即字符串errorpublic

static

final

java.lang.String

INPUT="input";//定義靜態(tài)常量INPUT,即字符串inputpublic

static

final

java.lang.String

LOGIN="login";//定義靜態(tài)常量LOGIN,即字符串Loginpublic

abstract

String

execute()throws

Exception;//定義execute()方法}訪問和配置Action在Struts2中,Action已經(jīng)與Servlet

API完全分離,這使得Struts2的Action具有更加靈活和低耦合的特性在實現(xiàn)業(yè)務(wù)邏輯處理時,經(jīng)常需要訪問Servlet中的對象,例如session、request和application等。Struts2供了一個名稱為ActionContext的類可以通過下面的代碼來創(chuàng)建和使用ActionContext·

ActionContext

ac

=

ActionContext.getContext();·ActionContext類的常用方法ActionContext訪問示例創(chuàng)建應(yīng)用程序的根目錄為ch1,添加Struts2應(yīng)用創(chuàng)建登錄頁面login.jsp<body><h2>用戶登錄</h2><s:form

action="checkLogin"

namespace="/"><s:textfield

name="name"label="登錄名稱"size="15"/><s:password

name="pwd"label="登錄密碼"size="15"/><s:submit

value="登錄"/></s:form></body>新建名稱為LoginAction.java的文件,實現(xiàn)Action在struts.xml文件中對LoginAction.java進(jìn)行配置<package

name="default"

extends="struts-default"

namespace="/"><action

name="checkLogin"

class="com.action.LoginAction"

method="checkLogin"><result>/index.jsp</result></action></package>·新建文件名為index.jsp的文件,顯示登錄信息<body

>讀取session中的信息:歡迎<s:property

value="#session.login"/>。<br>讀取application中的信息:歡迎<s:property

value="#application.login"/></body>·在瀏覽器地址欄中輸入http://localhost:8080/ch1/login.jsp,顯示登錄頁面動態(tài)方法調(diào)用·指定method屬性·在struts.xml配置文件中配置<action/>元素的時候,可以為其指定method屬性,可以讓Action調(diào)用指定的方法來處理用戶的請求,而不是使用execute()方法來處理<package

name="default"

extends="struts-default"

namespace="/"><!--使用LoginAction類中的login方法來處理登錄請求--><action

name="login"

class="com.action.LoginAction"

method="login"><result>/index.jsp</result></action><!--使用LoginAction類中的register方法來處理注冊請求--><action

name="register"

class="com.action.LoginAction"

method="register"><result>/register.jsp</result></action></package>·不指定method屬性·

表單元素的action屬性并不是直接等于某個Action的名字,form表單不需要指定method屬性,而是如下形式來指定<s:form

action=”Action名稱!方法名稱”>或<s:form

action=”Action名稱!方法名稱.action”>·使用這種方式將請求提交到Action時,如果在JSP頁面中有多個提交按鈕,每個按鈕的提交事件都交給同一個Action,但是對應(yīng)Action中的不同方法,這時,在struts.xml文件中只需要配置該Action,而不必配置每個方法<s:form

action=”login.login”>….<action

name="login"

class="com.action.LoginAction"><result>/index.jsp</result></action>·使用通配符

在配置<action/>時,需要填寫name、class、method,這三個屬性都支持通配符,這種通配符的調(diào)用是另一種形式的動態(tài)調(diào)用,使

得Action的配置更加方便<package

name="default"

extends="struts-default"

namespace="/"><action

name="login_*"

class="com.action.LoginAction"

method="{1}"><result>/index.jsp</result></action></package>

<action

name="login_*">是定義了一系列的Action,只要用戶請求的URL是login_*的方式,都可以使用此Action來處理

該method屬性使用了一個表達(dá)式{1},該表達(dá)式的意思是使用name

屬性第一個*的值,例如,如果用戶請求的URL是:

”/login_login”,那么調(diào)用LoginAction里login方法,如果用戶請求的URL是:”/login_register”,那么調(diào)用LoginAction里register方法·使用通配符對result元素也可以采用通配符配置<action

name="login_*"

class="com.action.LoginAction"

method="{1}"><result

name="input">/input.jsp</result><result>/{1}.jsp</result></action>當(dāng)處理結(jié)果是input時,會轉(zhuǎn)到/input.jsp頁面,當(dāng)處理結(jié)果是success時,如果login_create.action,則會執(zhí)行

com.action.LoginAction中的create方法,并且跳轉(zhuǎn)到/create.jsp;如果login_delete.action,則會執(zhí)行com.action.LoginAction中的delete方法,并且跳轉(zhuǎn)到/delete.jsp使用Struts2內(nèi)建類型轉(zhuǎn)換器Struts2支持的數(shù)據(jù)類型的自動轉(zhuǎn)換,這種轉(zhuǎn)換以

OGNL(Object-Graph

Navigation

Language)為基礎(chǔ)OGNL的具體實現(xiàn)是:數(shù)據(jù)轉(zhuǎn)移和類型轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)移就是把頁面上的參數(shù)轉(zhuǎn)換成屬性,或?qū)傩燥@示在頁面上類型轉(zhuǎn)換就是如何將頁面上提交的字符串?dāng)?shù)據(jù)轉(zhuǎn)換成屬性中的int、float等,或反過來簡單類型轉(zhuǎn)換·Struts2內(nèi)建的類型轉(zhuǎn)換器通常都能滿足應(yīng)用需求。將客戶端輸入的數(shù)量和價格分別轉(zhuǎn)換為int和double類型,視圖頁面goods.jsp的內(nèi)容如下<body><h2>添加商品</h2><s:form

action="addAction"

namespace="/"

method="add"><s:textfield

name="name"label="商品名稱"size="15"/><s:textfield

name="price"label="商品價格"size="15"/><s:textfield

name=”num”label="商品數(shù)量"size="15"/><s:submit

value="添加"/></s:form></body>·

實現(xiàn)了添加商品的表單,用戶輸入商品的名稱、價格和數(shù)量。表單提交后,信息被作為字符串傳遞給了服務(wù)器端的Action·AddAction.java的代碼如下·Action中的price和num屬性分別是double和int類型,而客戶端提交的都是字符串格式的數(shù)據(jù),商品價格需要從字符串類型轉(zhuǎn)換為double類型和int類型package

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論