




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第一章Struts2基礎知識本章要點·配置Sturts2運行環境·
Struts2第一個例子·Struts2框架工作原理·配置Struts2·Action和類型轉換配置Sturts2運行環境Struts已經分化成了兩個框架在傳統的Struts1的基礎上,融合了另外的一個優秀的
Web框架WebWork的Struts2框架Shale,與原有的Struts1關聯很少,使用了全新的設計思想配置Struts2運行環境安裝和配置好JDK后,配置JDK環境變量安裝Java
Web服務器,選擇開源的Tomcat作為服務器安裝Struts2框架Struts2框架的安裝Struts的官方網站:,目前最新版本是Struts
2.x下載完畢后,將下載的壓縮包進行解壓,然后找到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應用的WEB-INF/lib文件夾中·所復制類庫的作用Struts2的核心庫WebWork的核心庫,需要它的支持OGNL表達式語言,Struts2支持該EL表達式表現層框架,定義了Struts2的可視組件主題日志管理文件上傳與下載MyEclipse自帶工具加載Struts2框架·添加Struts框架支持·選擇Struts2框架·加載完成后自動添加了Struts2所需jar包·配置Sturts2運行環境·
Struts2第一個例子·Struts2框架工作原理·配置Struts2·Action和類型轉換Struts2第一個例子實現了一個簡單的登錄功能,用戶打開一個登錄頁面輸入登錄名稱和登錄密碼,如果登錄名稱和登錄密碼輸入正確就進入歡迎頁面,否則就重新回到登錄頁面將項目命名為Demo1,功能實現后,目錄結構如下Demo1工作實例Struts2攔截用戶請求·
在web.xml文件中配置Struts2的核心控制器,用來攔截客戶端請求,并把請求轉發到相應的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>創建視圖頁面login.jsp·
Struts2的標簽庫是Struts2的重要組成部分,不僅為表現層提供了數據處理能力,而且也提供了基本的流程控制功能以及對國際化、Ajax的支持等諸多功能。通過使用Struts2的標簽庫可以最大限度地減少試圖頁面的編碼量。login.jsp使用
Struts2標簽庫實現了一個表單,核心代碼如下:<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>創建歡迎頁面success.jsp·success.jsp為登錄成功后顯示的歡迎頁面,代碼如下<body><div
style="margin:40px;font-weight:bold">登錄成功,歡迎您!</div></body>創建業務控制器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當Action處理完客戶端請求后就會返回一個字符串,每個字符串都對應一個視圖在Struts.xml文件中配置Action時,name屬性定義該Action的名稱,class定義這個Action的實際實現類,method表示checkLogin這個Action由實際實現類LoginAction的checkLogin()方法來處理配置Action時,為每個Action都指定了result元素,每個result元素都定義了一個邏輯視圖,而用
name定義了Action所返回的字符串·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><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文件應放在WEB-INF\classes目錄下lib下存儲的是所必須的類庫包,如Struts2核心類庫包等效果演示實例部署到Tomcat服務器上后打開login.jsp頁面在兩個文本框中都輸入admin,單擊“登錄”按鈕,登錄成功后會轉向success.jsp頁面login.jspsuccess.jsp本章要點·配置Sturts2運行環境·
Struts2第一個例子·Struts2框架工作原理·配置Struts2·Action和類型轉換Struts2框架工作原理單擊“登錄”按鈕,向服務器提交登錄請求由于在web.xml文件中配置了Struts2核心控制器FilterDispatcher,此時Struts2就會攔截這個登錄請求由于表單的action值為checkLogin,FilterDispatcher就會在struts.x配置文件中查找name為checkLogin的Action配置,找到后就會將已經攔截的登錄請求轉發給LoginAction來處理由于在struts.xml配置文件中Action的method屬性的值是Checklogin,LoginAction就會調用自身的checkLogin()方法完成對客戶端的登錄請求的處理。如果登錄成功就返回SUCCESS,登錄失敗就返
回LOGIN由于在struts.xml配置文件中配置LoginAction時指定了<resultname=”success”>/success.jsp</result>,所以當LoginAction返回
success時則轉向success.jsp頁面,否則轉向login.jsp頁面處理流程說明FilterDispatcher是Struts2的核心控制器,負責攔截所有的客戶端請求struts.xml文件是Struts2框架的配置文件,主要負責配置業務邏輯控制器Action,以及用戶自定義的攔截器等,是Struts2各個組件之間的紐帶Action是Struts2的業務邏器,負責處理客戶端請求并將處理結果輸出給客戶端,要想處理客戶端請求就必須獲得請求字符串的參數或從表單提交的數據Action在處理完客戶端請求后會通過視圖組件把處理結果顯示出來本章要點·配置Sturts2運行環境·
Struts2第一個例子·Struts2框架工作原理·配置Struts2·Action和類型轉換配置Struts2任何MVC框架都需要與Web應用整合,這就不得不借助/WEB-INF路徑下的web.xml文件,只有配置web.xml文件,Servlet才會被應用加載對于Struts2框架而言,需要加載FilterDispatcher配置Web.xml·
Struts2將核心控制器設計成一個過濾器Filter,而不是一個普通的Servlet,需要在Web.xml文件中配置
FilterDispatcher,代碼片段如下<!--struts過濾器--><filter><!--配置Struts2核心Filter的名字--><filter-name>struts2</filter-name><!--配置Struts2核心Filter的實現類--><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類時,還可以指定一系列的初始化參數actionPackages參數,用來配置Struts2框架默認加載的
Action包結構,參數的值是一個字符串類型的包空間,
如果有多個包空間,可以用英文“,”符號隔開配置Struts2常量,每個<init-param>元素配置一個Struts常量,其中<param-name>子元素指定了常量名,而<param-value>子元素指定了常量值初始化參數的配置示例<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><init-param><!--配置Struts2框架默認加載的Action包結構--><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框架的核心配置文件,主要負責管理Struts2框架的業務控制器Action,不對業務進行真正的操作,調用的是業務邏輯組件的功能。相當于Service的功能組件,業務邏輯組件又封裝了DAO等操作默認情況下,Struts2框架將自動加載放到/WEB-INF/classes路徑下的struts.xml文件中,在EclipseIDE環境下進行Struts2的配置,一定要將struts.xml文件放到
src文件夾Struts2框架通過struts.xml文件自動加載資源完成各種所需的功能Struts.xml基本結構<?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”/><!--默認包的配置--><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文件主要負責管理應用中的Action映射,以及該Action包含的Result定義等perties文件,該文件定義了Struts
2框架的大性,開發者可以通過改變這些屬性來滿足應用的需求perties文件通常放在Web應用的WEB-INF/classesperties文件是一個標準的Properties文件包含了系列的key-value對象,每個key就是一個
Struts
2屬性,該key對應的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運行環境·
Struts2第一個例子·Struts2框架工作原理·配置Struts2·Action和類型轉換Action和類型轉換在Struts2中,一個Action類代表一次請求或調用,每個請求的動作都對應于一個相應的Action類一個Action類是一個獨立的工作單元每次用戶的請求,都會轉到一個相應的Action類里面,由這個Action類來進行處理實現Action控制類·Struts2通常直接使用Action來封裝HTTP請求參數,因此需要為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;}}·為了更加規范的開發Action,Struts提供了一個
Action接口,代碼如下·一般寫Action類通常不用實現該接口,而是繼承該接口的實現類ActionSupportpublic
interface
Action
{public
static
final
java.lang.String
SUCCESS="success";//定義靜態常量SUCCESS,即字符串successpublic
static
final
java.lang.String
NONE="none";//定義靜態常量NONE,即字符串nonepublic
static
final
java.lang.String
ERROR="error";//定義靜態常量ERROR,即字符串errorpublic
static
final
java.lang.String
INPUT="input";//定義靜態常量INPUT,即字符串inputpublic
static
final
java.lang.String
LOGIN="login";//定義靜態常量LOGIN,即字符串Loginpublic
abstract
String
execute()throws
Exception;//定義execute()方法}訪問和配置Action在Struts2中,Action已經與Servlet
API完全分離,這使得Struts2的Action具有更加靈活和低耦合的特性在實現業務邏輯處理時,經常需要訪問Servlet中的對象,例如session、request和application等。Struts2供了一個名稱為ActionContext的類可以通過下面的代碼來創建和使用ActionContext·
ActionContext
ac
=
ActionContext.getContext();·ActionContext類的常用方法ActionContext訪問示例創建應用程序的根目錄為ch1,添加Struts2應用創建登錄頁面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的文件,實現Action在struts.xml文件中對LoginAction.java進行配置<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,顯示登錄頁面動態方法調用·指定method屬性·在struts.xml配置文件中配置<action/>元素的時候,可以為其指定method屬性,可以讓Action調用指定的方法來處理用戶的請求,而不是使用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,但是對應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,這三個屬性都支持通配符,這種通配符的調用是另一種形式的動態調用,使
得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屬性使用了一個表達式{1},該表達式的意思是使用name
屬性第一個*的值,例如,如果用戶請求的URL是:
”/login_login”,那么調用LoginAction里login方法,如果用戶請求的URL是:”/login_register”,那么調用LoginAction里register方法·使用通配符對result元素也可以采用通配符配置<action
name="login_*"
class="com.action.LoginAction"
method="{1}"><result
name="input">/input.jsp</result><result>/{1}.jsp</result></action>當處理結果是input時,會轉到/input.jsp頁面,當處理結果是success時,如果login_create.action,則會執行
com.action.LoginAction中的create方法,并且跳轉到/create.jsp;如果login_delete.action,則會執行com.action.LoginAction中的delete方法,并且跳轉到/delete.jsp使用Struts2內建類型轉換器Struts2支持的數據類型的自動轉換,這種轉換以
OGNL(Object-Graph
Navigation
Language)為基礎OGNL的具體實現是:數據轉移和類型轉換數據轉移就是把頁面上的參數轉換成屬性,或將屬性顯示在頁面上類型轉換就是如何將頁面上提交的字符串數據轉換成屬性中的int、float等,或反過來簡單類型轉換·Struts2內建的類型轉換器通常都能滿足應用需求。將客戶端輸入的數量和價格分別轉換為int和double類型,視圖頁面goods.jsp的內容如下<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="商品數量"size="15"/><s:submit
value="添加"/></s:form></body>·
實現了添加商品的表單,用戶輸入商品的名稱、價格和數量。表單提交后,信息被作為字符串傳遞給了服務器端的Action·AddAction.java的代碼如下·Action中的price和num屬性分別是double和int類型,而客戶端提交的都是字符串格式的數據,商品價格需要從字符串類型轉換為double類型和int類型package
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論