




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Struts開源MVC框架
成為軟件行業(yè)的武林高手
少林派(照著練)注重根基,循序漸進多學,多練,多思,多改。武當派(想著練)善長技巧,以柔克剛多掌握一些編程技巧,多去考慮一下性能,效率,重構一些代碼,多分析一下代碼的優(yōu)劣性逍遙派(創(chuàng)新練)任意發(fā)揮,注重人性化設計〔如何讓使用者更易上手,更易于使用〕,注重美感〔交互性強〕,注重哪種架構〔語言〕的優(yōu)劣選擇,編程軟件就是設計一件藝術作品。Struts1Lession1為什么要用SSH框架使用框架,可以讓我們更簡單的開發(fā),更容易的架構工程,更好的提升程序性能.Struts工作流程第一個struts程序多層架構概述JAVAEE開發(fā)的體系結構管理模型層springController控制層1、Servlet2、Struts1(MVC)3、Struts2(webwork)Hibernate(mybatis)DBDAOPOView視圖層JspHtmlflash…Service多層架構概述分層的目的:將顯示、業(yè)務邏輯、數據訪問等功能完全分開,防止相互之間的影響,實現模塊間的松耦合,簡化維護本錢。所謂“耦合”,指將兩個元素像鏈子一樣連接在一起。在軟件領域,“耦合”一般指軟件組件之間的依賴程度。呈現層:用struts實現MVC。業(yè)務邏輯層:用spring持久化層:用hibernateStruts是什么?Struts的目標是提供一個開發(fā)Web應用的開源框架。Struts鼓勵基于M2模式〔即MVC設計模式〕來開發(fā)程序?;貞汳odel1設計模式以JSP為中心的開發(fā)模型,稱為Model1〔JSP+JAVABEAN〕。1.業(yè)務邏輯與表示邏輯混和,不利維護與重用。2.HTML中嵌入了大量的JAVA代碼3.驗證、流程控制、更新程序的狀態(tài)全部在JSP中完成回憶Model2設計模式ModelViewControllerMVCMVCMVC是一種設計模式M是指數據模型,V是指用戶界面,C那么是控制器。使用MVC的目的是將M和V的實現代碼別離C確保M和V的同步,用來控制M層和V層,一旦M改變,V應該同步更新。被推薦為Sun公司J2EE平臺的設計模式。Struts實現的MVC框架web.xmlStruts框架組件ActionServlet類控制導航流。ActionServlet根據URI來決定哪個Action類被用于處理請求,Action可以校驗輸入,并訪問業(yè)務層以便從數據庫檢索信息。Action需要知道頁面提交了哪些內容,所以由ActionServlet根據請求URI來決定將請求參數綁定到哪個ActionForm中,并傳入Action。Action在完成業(yè)務邏輯后,返回一個ActionForward對象,ActionServlet根據ActionForward對象中的路徑來調用頁面完成響應。Struts將這些信息綁定在一個ActionMapping對象中,一個ActionMapping對應一個請求URI,當請求路徑到達的時候,ActionServlet就會查詢ActionMapping對象,ActionMapping對象將告訴ActionServlet哪個Action類會被調用、哪個ActionForm類被用于傳遞頁面數據以及哪些ActionForward
將被用于轉向。Action、ActionForm、
ActionForward等,Struts通過一個配置文件:struts-config.xml文件來定義。Stringpath=request.getRequestURI();path=path.subString(path.indexOf("/",1),path.lastIndexOf("."));開始一個Struts工程在Apache網站上下載Struts,將文件解壓。將lib路徑下的所有JAR文件復制到Web應用的WEB-INF/lib路徑下。://官方網站下載struts例::///download.cgi#struts13101.31版本或在MyEclipce的集成環(huán)境中加載Struts的JAR文件。第一個Struts工程,實現用戶登錄操作配置ActionServlet配置ActionServlet:修改web工程的web.xml文件,添加如下Servlet映射配置。
<servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param><load-on-startup>2</load-on-startup></servlet><servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>(可選)沒有單位,表示的是效勞器啟動的時候初始化加載的順序,數值越大,加載優(yōu)先級別越低。如果我們在web效勞器啟動的時候加載多個程序,那么就用這個數值的相對大小來確定那幾個程序的加載順序。<load-on-startup>給容器一個actionservlet的權重。如果設置為2,那么允許其他servlet在需要的時候首先裝入 <servlet-mapping>這段告訴容器將匹配*.do格式的文件請求轉發(fā)到actionservlet。這就是我們所配的action。不匹配這種格式的文件請求將不被struts處理。 參數:config缺省值:/WEB-INF/struts-config.xml說明:包含配置信息的xml文件上下問相關路徑參數:debug缺省值:0說明:調試的詳細級別,控制針對這個servlet將記錄多少信息。接受的值為0(off)和1(最不嚴格)直到6(最嚴格)。大多數struts組件設置為級別0或2參數:detail缺省值:0說明:用來處理應用配置文件的Digester的調試詳細級別。接受的值為0(off)和1(最不嚴格)直到6(最嚴格)。編寫幾個必要的文件一個ActionForm〔UserForm〕 填充頁面表單封裝成一個類一個Action〔LoginAction〕 通過action調用業(yè)務邏輯,轉發(fā)等操作進行處理struts-config.xml文件 Struts核心配置文件。JSP頁面登錄頁面〔login.jsp〕成功頁面〔welcome.jsp〕失敗頁面〔error.jsp〕創(chuàng)立struts-config.xml在WEB-INF目錄下創(chuàng)立struts-config.xml文件,并添加如下內容<?xmlversion="1.0"encoding=“UTF-8"?><!DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.3//EN"":///struts/dtds/struts-config_1_3.dtd"><struts-config></struts-config>struts-config.xml文件,是由ActionServlet讀取的配置文件,它定義了所有關于Action、ActionForm、ActionForward等的詳細信息<struts-config><form-beans> <form-beanname="loginForm" type="com.struts.form.LoginForm“/></form-beans><global-forwards> <forwardname="fail"path="/fail.jsp"></forward></global-forwards><action-mappings> <actionpath="/login"name="loginForm"type="com.struts.action.LoginAction"> <forwardname="succ"path="/succ.jsp"></forward> </action></action-mappings></struts-config>創(chuàng)立ActionFormActionForm是一個JavaBean,需繼承org.apache.struts.action.ActionForm類,它捕獲通過HTTP請求傳送的參數ActionForm針對每個HTML表單中的字段具有一個對應的屬性ActionServlet匹配請求中的參數和ActionForm中的屬性,并調用ActionForm中的setter方法,將參數傳入ActionFormActionForm中的內部屬性全部定義為私有的〔private〕,并通過公共(public)的getter/setter方法來訪問創(chuàng)立ActionAction是一個Java類,需繼承org.apache.struts.action.Action類ActionServlet將會組裝ActionForm,并將它傳遞給ActionAction通常負責:輸入校驗調用業(yè)務邏輯類執(zhí)行業(yè)務邏輯操作決定返回哪個ActionForward添加ActionForm配置在struts-config.xml文件中,在<struts-config>標簽的內部,添加如下配置:
<form-beans><form-beanname=""type=""/></form-beans><form-beans>標簽內部可以包含多個<form-bean>標簽<form-bean>標簽必須指定name和type屬性name屬性是給此ActionForm一個標識名稱type屬性指定了此ActionForm是哪個類,必須是全路徑的類名添加Action配置在struts-config.xml文件中,緊接著<form-beans>標簽的下面,添加對LoginAction的配置:<action-mappings><actionpath=""type=""name=""scope=""><forwardname=""path=""/><forwardname=""path=""/></action></action-mappings><action>標簽可以配置的重要屬性包括path-從頁面上通過一個什么樣的URL路徑來訪問Action〔不包含.do〕type–訪問這個URL的時候,調用哪個Action類,這是Action的全路徑類名name–這個屬性用來標識哪個ActionForm將被創(chuàng)立,并將提交的表單組件給它scope–FormBean的作用域范圍,可以取值為session和request,一般取值都是request創(chuàng)立jsp文件創(chuàng)立login.jsp文件,添加一個表單,action為login.do,這個login.do的意思,將會告訴struts的ActionServlet,它將需要調用哪個Action來處理這個表單的請求。創(chuàng)立welcome.jsp文件,輸入登錄成功的歡送信息創(chuàng)立error.jsp文件,輸入登錄失敗的提示信息運行流程從瀏覽器輸入地址:://localhost:8080/StrutsDemo/login.jsp,Tomcat將按通常情況來處理這個JSP并返回瀏覽器。提交表單,實際上是提交到了這樣一個URL地址:://localhost:8080/StrutsDemo/login.do,Tomcat將會根據web.xml的配置,將這個請求發(fā)送給相應的Servlet,在我們的應用中,Tomcat將會把這個請求發(fā)送給org.apache.struts.action.ActionServlet這個類。然后ActionServlet根據struts-config.xml的配置信息,調用LoginAction對象去處理這個請求,在此之前,它會將頁面表單的請求數據封裝到UserForm對象中,并傳遞給LoginAction。LoginAction返回一個ActionForward對象,包含了將要轉向的路徑信息。ActionServlet根據這個ActionForward對象所包含的路徑信息,調用相應的頁面去執(zhí)行響應。運行流程圖Struts1lession2Struts與mvc單例模式Struts中的標簽html,bean,logicStruts中的國際化Struts與MVC視圖〔View〕在使用Struts框架的web應用程序中,JSP以及相關的技術〔如Taglib〕等共同組成視圖層,這一層的主要職責是顯示用戶界面。Struts提供了很多機制讓我們能更加輕松地創(chuàng)立視圖控制器〔Controller〕Struts中,ActionServlet是控制器層組件模型〔Model〕模型包括:系統(tǒng)的內部狀態(tài)以及改變系統(tǒng)狀態(tài)的動作Struts中的Action和ActionForm是模型的一局部Struts建議把”做什么”(Action)和”如何做”(業(yè)務邏輯)相別離創(chuàng)立業(yè)務邏輯處理類使用單例模式(Singleton)來創(chuàng)立業(yè)務邏輯處理類將Action中的業(yè)務處理代碼移到這個類中創(chuàng)立一些異常處理類,由這個類來產生,由Action來捕獲。一般Singleton模式通常有幾種形式:publicclassSingleton{
privateSingleton(){}
//注意這是private只供內部調用
privatestaticSingletoninstance=newSingleton();
//這里提供了一個供外部訪問本class的靜態(tài)方法,可以直接訪問publicstaticSingletongetInstance(){
returninstance;
}}
第二種形式:publicclassSingleton{ privateSingleton(){}privatestaticSingletoninstance=null;
publicstaticsynchronizedSingletongetInstance() {
if(instance==null)
instance=newSingleton();
returninstance; }}頁面之間數據的傳遞如何將數據從Action中傳遞到下一個JSP頁面?一般使用request.setAttribute方法:在Action中,使用request.setAttribute(Stringname,Objectdata)方法往request中設置參數在JSP中,使用request.getAttribute(Stringname)來獲取相應的參數容器接收頁面請求Struts的核心組件是ActionServlet,像其它所有Servlet一樣,它是生存在容器中的,比方Tomcat、WebLogic等,當容器啟動的時候,它會讀取web.xml文件〔部署描述符〕,告訴容器它會裝入哪些Servlet一個標準的Servlet是通過servlet-mapping來設定,哪些請求,將會被提交到哪些servlet中Struts的servlet-mapping配置一般是:<servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>這樣配置的意思是:任何以.do結尾的URL請求,都會被發(fā)送到ActionServlet進行處理Struts標簽庫Jsp頁面應該防止使用java腳本,因為這些腳本會大大降低jsp頁面的可讀性,但jsp頁面依然需要具備動態(tài)輸出的功能,通過標簽可以完成表現層的輸出Struts主要提供了如下3個標簽庫html:用于生成html的標簽bean:用于完成程序國際化,輸出ActionForm的屬性值等logic:用于完成循環(huán),選擇流程控制等在web.xml中引入標簽庫定義。然后在每個JSP文件中引入?;蛘邿o需在web.xml中定義,但在JSP文件中添加如下聲明:<%@taglibprefix="bean"uri=":///tags-bean"%><%@taglibprefix="logic"uri=":///tags-logic"%><%@taglibprefix="html"uri=":///tags-html"%>html標簽html標簽使用struts的html標簽最終將被解釋為標準的html標簽。里面的標簽根本上都和html標簽一一對應建議以后使用struts自帶的html標簽
<html:form
action="/reg"
method="post">
用戶名
<html:text
property="username"/>
密碼
<html:password
property="userpass"/>
性別<html:radio
property="gender"
value="0"/>男
<html:radio
property=“gender”
value=“1”/>女
愛好<html:checkboxproperty="hobby"value="籃球"/>籃球<html:multibox
property="hobby"
value="看書"/>看書
<html:multibox
property="hobby"
value="睡覺"/>睡覺
<html:multibox
property="hobby"
value="編程"/>編程
備注
<html:textarea
property="memo"
rows="5"
cols="60"/>
<html:submit>提交</html:submit>
or<html:submit
value=”提交”/>
<html:reset>去除</html:reset>
<html:cancel>取消</html:cancel>
bean標簽bean標簽 <bean:write/>輸出bean里面的屬性值<bean:define/>將某個bean中的屬性定義成腳本可以訪問的變量<bean:message/>輸出國際化信息<bean:messagekey=“hello”/>會自動查找struts-config.xml中配置的資源文件中的hello這個鍵的值。<bean:defineid="a1"value="helloworld"></bean:define>用來定詢問變量a1,它的值是hello<bean:writename="a1"/>寫出a1變量的值。<jsp:useBeanid="a2"class="com.yourcompany.struts.form.RegForm"></jsp:useBean><jsp:setPropertyname="a2"property="content"value="xxx"/><bean:defineid="a3"value="a2"property="content"toScope="session"></bean:define><bean:writename="${a3}"property="content"/>logic標簽logic標簽<logic:empty/><logic:notEmpty/><logic:present/><logic:notpresent/>存在<logic:match/><logic:notmatch/>是否包含給定的字符串<logic:equal/><logic:notEqual/><logic:greaterEqual/><logic:greaterThan/><logic:lessEqual/><logic:lessThan/><logic:iterate/><logic:iterateid="a"collection="<%=list%>"indexId="index"><logic:iterateid=“a”name=“l(fā)ist”indexId=“index”>在四種作用域中能夠找到變量list,直接寫在name后面Struts標簽通用屬性屬性名稱說明name指出對應Bean的名字。如果給出了scope屬性,則僅僅在scope中查找。否則,根據規(guī)定的順序(page、request、session或application)在各種scope中查找。property指出Bean中的某個屬性,可以在其中檢索值。如果沒有標明,則使用對象本身的值。Struts1lession3選學國際化問題〔I18N問題〕Struts處理消息Struts處理異常Struts驗證框架Form驗證Action驗證I18N問題什么是I18N問題?在英文中,國際化〔Internationalization〕被縮寫為I18N,即只取首尾兩個字母,中間字母為18個有哪些問題?頁面字符串硬編碼異常消息的硬編碼提示信息的硬編碼Java如何支持I18N?java程序的國際化主要通過如下3個類完成
將程序中的標簽和提示等信息放在資源文件中。每個程序需要所有支持的國家和語言,都必須提供對應的資源文件。資源文件是key-value對,每個資源文件中的key是不變的,但value那么隨不同國家和語言而變化資源文件的命名要標準: myMperties(默認的資源文件)myMessage_zh_CN.properties(簡體中文的資源文件)myMessage_en_US.properties(英文的資源文件)資源文件要用native2ascii工具進行轉換。Java如何支持I18Njava程序例如//取得缺省的LocaleLocalel=Locale.getDefault();//綁定資源文件ResourceBundlerb=ResourceBundle.getBundle("myResource",l);System.out.println(rb.getString(""));//格式化消息文本MessageFormatmf=newMessageFormat(rb.getString("error.time"));System.out.println(mf.format(newObject[]{newDate()}));國際化后臺例如LocalecurrentLocale=Locale.getDefault();System.out.println("defaultcountry="+currentLocale.getCountry());System.out.println("defaultlanguage="+currentLocale.getLanguage());//currentLocale=newLocale("en","US");//currentLocale=newLocale("zh","CN");ResourceBundlerb=ResourceBundle.getBundle("com.fd.struts.ApplicationResources",currentLocale);MessageFormatmf=newMessageFormat(rb.getString("notNull"));System.out.println(mf.format(newObject[]{"密碼"}));Struts如何支持I18N需要在struts配置文件中指定資源屬性文件的位置和名稱,如<message-resourcesparameter=“myResources"/>在JSP頁面中使用<bean:messagekey=“keystring”/>來輸出文本,以防止硬編碼message-resources中parameter的值,可以指定資源文件的位置和名稱<message-resourcesparameter=“myResources"/>表示在類路徑根目錄〔WEB-INF/classes目錄〕下有myResources_XX_XX.properties文件<message-resourcesparameter="resources.myResources"/>表示在類路徑根目錄下,有一個resources目錄,在這個resources目錄中存放著所有的myResources_XX_XX.properties資源屬性文件Struts如何支持I18Nstruts利用在session中存放一個Locale對象來到達設置當前語言的目的默認的情況下,struts根據網頁向后臺提交時所包含的語言編碼信息來提供缺省的Locale對象,這就是我們?yōu)槭裁纯梢酝ㄟ^更改網頁顯示語言設置,就能顯示不同的語言文字的原因。struts在session中存放的這個Locale對象,取值:org.apache.struts.Globals.LOCALE_KEYStruts消息處理為什么需要消息處理?比方登錄成功的提示比方創(chuàng)立失敗的提示等等……總之,程序總是要通過界面來跟用戶交互,所以,在交互的過程中,就產生了眾多的消息文本struts提供了專門的處理機制,來將這些消息文本國際化,防止消息文本的硬編碼消息處理,就是在Action和JSP之間傳遞的消息文本的處理〔區(qū)別于JSP頁面硬編碼文本的消息,JSP頁面消息可以使用<bean:message/>標簽來處理〕Struts交互消息,是通過ActionMessages等對象,以及相應的<html:messages/>標簽來處理的如何創(chuàng)立消息對象?ActionMessages與ActionMessage對象ActionMessages對象是ActionMessage對象的集合一個ActionMessage對象,代表一個國際化消息文本〔字符串〕如何創(chuàng)立ActionMessages對象?ActionMessagesmessages=newActionMessages();如何創(chuàng)立ActionMessage對象?ActionMessagemsg=newActionMessage(“key”);其構造方法帶的參數,就是一個在資源屬性文件中的key,所以,它能表示一個國際化消息文本如何將ActionMessage對象添加到ActionMessages對象中?messages.add(“message_id”,msg);第一個參數(message_id)表示本ActionMessage對象在ActionMessages對象中區(qū)別于其它ActionMessage對象的標識符消息對象如何傳遞?首先要決定的是,要傳遞的消息是普通消息還是錯誤消息?普通消息:即普通的消息文本錯誤消息:即提示錯誤的消息文本本質上,這兩種消息沒有什么區(qū)別,都是消息文本,但是如果一個頁面同時需要顯示普通的消息文本和錯誤消息文本的時候,就需要進行區(qū)分了,比方不同類型的消息文本可能要用不同的樣式來顯示通過一句簡單的代碼,將ActionMessages對象保存到HttpServletRequest對象中保存普通消息:this.saveMessages(request,messages);保存錯誤消息:this.saveErrors(request,messages);這就是調用父類〔Action〕所提供的方法saveMessages()/saveErrors()來保存消息對象實際上,父類的saveMessages()方法,將消息對象保存在了request中,并命名為Globals.MESSAGE_KEYsaveErrors()方法,將消息對象保存在了request中,并命名為Globals.ERROR_KEY<html:errors/>標簽<html:errors/>標簽只顯示錯誤消息<html:errors/>標簽與<html:messages/>標簽類似,但無id屬性<html:errors/>標簽通過提供header/footer屬性以及prefix/suffix屬性來定制每條消息的顯示格式header/footer–定義整個錯誤消息顯示之前〔之后〕要顯示的內容,這些內容也是在資源屬性文件中定義的一些key值,默認的情況下,它們的取值分別為:errors.header和errors.footerprefix/suffix–定義每條錯誤消息顯示之前〔之后〕要顯示的內容,這些內容也是在資源屬性文件中定義的一些key值,默認的情況下,它們的取值分別為:errors.prefix和errors.suffix舉例如下:errors.header=<UL>errors.prefix=<LI>errors.suffix=</LI>errors.footer=</UL>Struts的異常自動處理機制編程式異常處理即我們在Action中調用業(yè)務邏輯層對象的方法時,用try{}catch的方式來截獲異常之后,手工對異常進行處理我們以前的開發(fā)過程中,都是使用編程式的異常處理在編程式異常處理的時候,我們可以使用struts的消息處理機制來對這些異常信息進行處理自動異常處理機制即在Action中不捕捉異常,而是將異常拋出給struts框架處理我們需要在配置文件中指示struts如何處理這些被拋出的異常使用<exception/>元素來定義自動異常處理<exception/>元素的配置及使用<exception/>元素的配置,指示了struts如何處理異常的方式在通常的情況下,我們得到異常以后,需要將頁面導航到一個錯誤提示的頁面,提示錯誤信息<exception/>元素配置的關鍵屬性是:key–即這個異常所對應的錯誤提示消息文本的key,這個key的值,需要在資源屬性文件中進行定義type–即定義需要處理哪種類型的Exceptionpath–定義一旦出現異常,需要轉向哪個頁面來進行提示,如果不定義path屬性,默認情況下,將使用Action配置中的input屬性的值來作為轉向的頁面如何顯示錯誤消息?在JSP頁面中,使用<html:errors/>標簽,即可將其異常對應的錯誤消息文本進行顯示publicclassByZeroExceptionextendsException{publicByZeroException(Stringmessage){ super("除零異常");}}<exceptiontype="com.struts.ByZeroException"key="exception2"></exception><exceptiontype="java.lang.Exception"key="exception1">
頁面中:<html:errorskey="exception1"/>ActionForm對象ActionForm的要求必須擴展自如果要獲取表單的值,必須定義與表單元素一一對應的屬性如果要求在將ActionForm傳遞到Action之前進行校驗,必須實現validate方法如果想要在組裝前初始化屬性,必須實現reset方法DynaActionForm使用動態(tài)ActionForm,可以完全不再需要書寫ActionForm,所有ActionForm只需要在struts-config.xml文件中配置即可<form-property>元素屬性:name,type進一步了解ActionForm對象ActionForm作為表單字段收集器ActionForm作為類型轉換器(所有從表單提交到后臺的數據均為字符串類型,利用ActionForm自動轉換int、double、boolean等數據類型)ActionForm可以被其它bean或者過程作為數據載體動態(tài)ActionForm
使用動態(tài)Form實現用戶登錄<form-beans><form-beanname="userDynaForm" type=""><form-propertyname=“username"type="java.lang.String"/><form-propertyname=“pwd"type="java.lang.String"/></form-bean></form-beans>以配置的方式創(chuàng)立FormDynaActionFormmyForm=(DynaActionForm)form;Stringusername=(String)myForm.get("uname");Stringpwd=myForm.getString("upass");//其他驗證操作Action代碼從動態(tài)Form中取值演示例如:使用動態(tài)Form開發(fā)“用戶登錄”功能ActionForm數據校驗ActionForm的代碼校檢重寫ActionForm的validate方法假設有錯誤,把錯誤消息封裝在ActionMessage對象里將多個ActionMessage組合成ActionErrors對象應對action配置input屬性jsp頁面使用<html:errors/>標簽輸出出錯提示結合commons-validator.jar的校驗編寫ActionForm使其繼承ValidatorForm。編寫校驗規(guī)那么文件,validator-rules.xml和validations.xml由配置action的input屬性在struts-config.xml文件中配置<plug-in>元素,負責加載校驗規(guī)那么文件加載國際化資源文件,在JSP頁面使用<html:messages>標簽ActionForward對象ActionForward能做什么?ActionForward會回傳給ActionServletActionForward中的路徑,可以是一個帶參數的URIActionForward的屬性namepathredirect全局ActionForward與局部ActionForward,規(guī)那么:先在局部找,局部沒有的話,再到全局找;<global-forwards>元素:name,path,redirect動態(tài)創(chuàng)立ActionForward將ActionForward定義在一個Struts配置文件中是個好的選擇,但也可以在Action中動態(tài)創(chuàng)立ActionForward,而不需要在配置文件中指定,例如:ActionForwardforward=newActionForward(“/chap08/welcome.jsp");ActionMapping對象理解ActionMappingpath,action的訪問路徑,以“/”開頭type,action的完整類名name,與action關聯的formbean的標識IDscope,與action關聯的formbean的存在范圍。(request\session默認)validate,是否調用validate方法校驗input,校驗失敗轉向的路徑unknow,處理用戶發(fā)出的無效ActionURLparameterforwardincludescope屬性在Action映射配置中,scope屬性可以取值為:request或sessionscope屬性表示:Struts框架在將ActionForm對象〔與目標Action匹配的ActionForm〕傳送到Action之前,會將ActionForm對象保存的位置如:scope=“request”配置,將指示struts調用request.setAttribute(“ActionForm名稱”,ActionForm對象)方法,將ActionForm對象保存到request。其中,ActionForm名稱與struts-config.xml配置中的ActionForm名稱一致,如:<form-beanname=“addForm”type=“com.fendou.web.form.addActionForm”/>,其中addForm就是其名稱。Action對象如果應用需要保存一個記錄到數據庫中,典型的過程可能是ActionForm捕獲輸入ActionMapping配置ActionAction將輸入送到數據庫中〔通常會將這一步操作委托給業(yè)務邏輯類去實現〕ActionForward提供一個鏈接到輸入頁面J2EE是一個多線程的環(huán)境,效勞器針對每個請求啟動一個線程來處理。所以有可能會有多個線程同時訪問一個Servlet實例的情況。在Struts里面也是一樣的,有可能會有多個線程同時訪問一個Action實例的情況。所以必須保證Action類中的方法具有“可重入性”,即不能在Action的方法里改變實例變量的值。Action的主要職責校驗輸入數據調用業(yè)務邏輯方法檢測處理異常根據邏輯進行轉向操作幾種不同的ActionDispatchAction:該Action可以在一個action內同時完成多個action功能DispatchAction的配置方法,添加parameter屬性到Action的配置中,parameter屬性值任意。但是請求的URL必須是URL?parameter屬性值=Action方法名unspecified方法,在調用DispatchAction的時候參數是不能為空的,如果空,DispatchAction會調用unspecified(不精確)方法并拋出異常。
DispatchActionpublicActionForwardadd(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){returnnull;}publicActionForwardupdate(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){returnnull;}注意:類中excute()方法不能重寫,否那么將調用excute方法。
<actionname="loginForm“parameter="method“path="/login" type="com.fendou.struts.action.LoginAction"/>Action中的代碼配置Jsp頁面:增加一個隱藏域,名字為method,值設置為待訪問action中方法的名稱<formaction="<%=path%>/edit.do"method="post">
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦公大樓保潔承包合同
- 技術開發(fā)合同模板簡明
- 院企合作科研合同標準模板
- 工業(yè)品交易合同模板轉讓合作協(xié)議
- 銀行軟件服務合同
- 小學生冬季滑冰知識
- 藥理學第二十章 抗心絞痛藥課件
- 微特電機在無人機飛行控制系統(tǒng)的應用考核試卷
- 搪瓷材料在實驗室環(huán)境的應用考核試卷
- 地下綜合管廊工程光纜敷設技術考核試卷
- 中醫(yī)食療藥膳學智慧樹知到答案2024年四川護理職業(yè)學院
- NB/T 11431-2023土地整治煤矸石回填技術規(guī)范
- 中醫(yī)師承跟師筆記50篇
- 聚乳酸-標準規(guī)程
- ISO28000:2022供應鏈安全管理體系
- 《中國傳統(tǒng)文化》教案全套張建第1-10模塊歷史的天空中國傳統(tǒng)文化-絢麗的生活中國古代的生活方式
- 【重慶市S區(qū)部分居民糖尿病知識知曉情況調研報告(含問卷)11000字(論文)】
- 臨床營養(yǎng)技術操作規(guī)范(2010版)
- 智能掃地機器人設計與制作說明書
- 中南財經政法大學806經濟學(宏、微觀)考試大綱解析
- 卵巢癌術后護理查房
評論
0/150
提交評論