1. 程式人生 > >詳細介紹jsp中action的功能

詳細介紹jsp中action的功能

Action類是使用者請求和業務邏輯之間的橋樑,每個Action充當客戶的一項業務代理。在RequestProcessor類預處理請求時,在建立了Action的例項後,就呼叫自身的processActionPerform()方法,該方法在呼叫Action類的execute()。下面介紹jsp中action的功能。

1. 完整的action

  1. <action path="/aFullAction"
  2. type="somePackage.someActionClass">  
  3. name="someForm"
  4. input="someJSP.jsp"
  5. <forward name="successful"
     path="someJSP.jsp"/>  
  6. <forward name="failed" path="someOtherJSP.jsp"/>  
  7. </action> 

首先,Struts的ActionServlet接收到一個請求,然後根據struts-config.xml的配置定位到相應的mapping(對映);接下來假如form的範圍是request或在定義的範圍中很難找到這個form,建立一個新的form例項;取得form例項以後,呼叫其reset ()方法,然後將表單中的引數放入form,假如validate屬性不為false,呼叫validate()方法;假如validate()返回非空的ActionErrors,將會被轉到input屬性指定的URI,假如返回空的ActionErrors,那麼執行Action的execute() 方法,根據返回的ActionForward確定目標URI。

這樣做的效果是:execute()僅當validate()成功以後才執行;input屬性指定的是個URI。

2. 僅有Form的action

  1. <action path="/aFormOnlyAction"
  2. type="org.apache.struts.actions.ForwardAction"
  3. name="someForm"
  4. input="someJSP.jsp"
  5. parameter="someOtherJSP.jsp"
  6. /> 

首先,Struts會在定義的scope搜尋someForm,假如找到則重用,假如很難找到則新建一個例項;取得form例項以後,呼叫其reset()方法,然後將表單中的引數放入form,假如validate屬性不為false,呼叫validate()方法;假如validate()返回非空的 ActionErrors,將會被轉到input屬性指定的URI,假如返回空的ActionErrors,那麼轉到parameter屬性指定的目標 URI。

這樣做的效果是:沒有action類能夠存放我們的業務邏輯,所以任何需要寫入的邏輯都只能寫到form的reset()或 validate()方法中。validate()的作用是驗證和訪問業務層。因為這裡的action對映不包括forward(也沒有意義),所以不能重定向,只能用預設的那個forward。這種僅有form的action能夠用來處理資料獲取並forward到另一個JSP來顯示。

3. 僅有Action的action

  1. <action path="/anActionOnlyAction"
  2. type="somePackage.someActionClass">  
  3. input="someJSP.jsp"
  4. <forward name="successful" path="someJSP.jsp"/>  
  5. <forward name="failed" path="someOtherJSP.jsp"/>  
  6. </action> 

首先,ActionServlet接收到請求後,取得action類例項,呼叫execute()方法;然後根據返回的ActionForward在配置中找forward,forward到指定的URI或action。

這樣做的效果是:沒有form例項被傳入execute()方法,於是execute()必須自己從請求中獲取引數。Action能夠被forward或重定向。這種action不能處理通過HTML FORM提交的請求,只能處理連結式的請求。

4. 僅有JSP的action

  1. <action path="/aJSPOnlyAction"
  2. type="org.apache.struts.actions.ForwardAction"
  3. parameter="someOtherJSP.jsp"
  4. /> 

首先,ActionServlet接到請求後呼叫ForwardAction的execute()方法,execute()根據配置的parameter屬性值來forward到那個URI。

這樣做的效果是:沒有任何form被例項化,比較現實的情形可能是form在request更高級別的範圍中定義;或這個action被用作在應用程式編譯好後充當系統引數,只需要更改這個配置文件而無需重新編譯系統。

5. 兩個action對應一個form

  1. <action path="/anAction"
  2. type="somePackage.someActionClass">  
  3. name="someForm"
  4. input="someJSP.jsp"
  5. <forward name="successful" path="/anotherAction.do"/>  
  6. </action>  
  7. <action path="/anotherAction"
  8. type="somePackage.someOtherActionClass">  
  9. name="someForm"
  10. input="someOtherJSP.jsp"
  11. <forward name="successful" path="someResultJSP.jsp"/>  
  12. </action> 

就每個單獨的action來講,處理上並沒有和完整的action有什麼實質的區分。這個組合模式能夠被用來傳遞命令物件(form)。需要注意的是在後一個action中同樣會呼叫form的reset()和validate()方法,因此我們必須確保form中的資訊不被重寫。

處理的方式大致分為兩種:

a) 在request中放入一個指示器表明前一個action有意向後一個action傳遞form,從而在後一個action能夠保留那個form中的值,這一方式只能在使用forward時使用。

b) 當使用redirect而不是forward時,能夠把指示器放在session或更高的級別,在命令鏈的最後一環將這個指示器清除。

  1. <action path="/anAction"
  2. type="somePackage.someActionClass">  
  3. name="someForm"
  4. input="someJSP.jsp"
  5. <forward name="successful" path="/anotherAction.do" redirect="true"/>  
  6. </action>  
  7. <action path="/anotherAction"
  8. type="somePackage.someOtherActionClass">"  
  9. name="someOtherForm"
  10. input="someOtherJSP.jsp"
  11. <forward name="successful" path="someResultJSP.jsp"/>  
  12. </action> 

這個組合方式跟前一種在流程上沒有太大區分,只是我們現在對於兩個action分別提供了form,於是程式碼看上去更加清楚。於是我們能夠分別處理WEB應用程式的輸入和輸出。

值得注意的是,後一個action同樣會嘗試往form中寫入那些引數,但是我們能夠這樣處理:

a) 在後一個form中使用另一套屬性名;

b) 只提供getter而不提供setter。

大致的處理是這樣:

前一個action接收輸入、驗證、然後將資料寫入業務層或持久層,重定向到後一個action,後一個action手動的從業務層/持久層取出資料,寫入form(通過其他方式),交給前臺JSP顯示。

這樣做的好處是不必保留輸入form中的值,因此能夠使用redirect而不是forward。這樣就降低了兩個action之間的耦合度,同時也避免了不必要的重複提交。

相關推薦

詳細介紹jspaction功能

Action類是使用者請求和業務邏輯之間的橋樑,每個Action充當客戶的一項業務代理。在RequestProcessor類預處理請求時,在建立了Action的例項後,就呼叫自身的processActionPerform()方法,該方法在呼叫Action類的execute

ViewPager的詳細介紹和圖片滑動功能例項

1、使用場景 在APP設計中,如果涉及到左右滑動功能,如:下方導航條、上方導航條、圖片滑動、翻頁能功能時,則可以直接使用ViewPager進行開發,ViewPager自帶滑動和翻頁效果,可以用ViewPager自身的adapter進行開發,要方便很多。 2、屬性詳解 ViewPage

詳細介紹Flex操作XML (轉)

一  在介紹Flex中操作XML之前,首先簡單介紹下XML中的基本術語。     元素:XML中擁有開始標籤和結束標籤的這一塊稱為“元素”    節點:把XML元素與文字結合起來統稱為節點    根節點:位於整個XML文當頂端的節點    文字節點:包含文字的節點    屬性:元素的組成部分,以鍵/值形式放

Http session詳細介紹(jsp-serlvet技術)

參考文件一、術語session在我的經驗裡,session這個詞被濫用的程度大概僅次於transaction,更加有趣的是transaction與session在某些語境下的含義是相同的。session,中文經常翻譯為會話,其本來的含義是指有始有終的一系列動作/訊息,比如打電話時從拿起電話撥號到結束通話電話這

JSPmeta及http-equiv功能介紹

http-equiv顧名思義,相當於http的檔案頭作用,它可以向瀏覽器傳回一些有用的資訊,以幫助正確和精確地顯示網頁內容,與之對應的屬性值為content,content中的內容其實就是各個引數的變數值。  meat標籤的http-equiv屬性語法格式是:<meta http-equi

ASPFSO功能詳細介紹

在ASP中,FSO的意思是File System Object,即檔案系統物件。    我們將要操縱的計算機檔案系統,在這裡是指位於web伺服器之上。所以,確認你對此擁有合適的許可權。理想情況下,你可以在自己的機器上建立一個web伺服器,這樣就能方便地進行測試。如果運行於Wi

HTMLCss詳細介紹

維護 類型 html 外部 -html css樣式 樣式表 作用 tex 一、樣式表的作用  1、Css樣式表,層疊樣式表  2、類似於人類的衣服,網頁的衣服  3、作用:美化網頁  4、優勢:     1.內容與表現分離,便於維護     2.樣式豐富,頁面布局靈活   

詳細介紹360全景在房地產行業的應用

360全景 360全景就是視角超過人的正常視角的圖像,而我們這裏說的全景特指水平360度,上下360度全能觀看的,能看到“天、地”的全景。全景實際上只是一種對周圍景象以某種幾何關系進行映射生成的平面圖片,只有通過全景播放器的矯正處理才能成為360全景。 當前,平面的房產展示已經難以滿足客戶需要

javaAction層、Service層和Dao層的功能區分

封裝 滿足 ont 事務管理 簡單 聲明式 所在 框架搭建 調用接口 Action/Service/DAO簡介:Action是管理業務(Service)調度和管理跳轉的。Service是管理具體的功能的。Action只負責管理,而Service負責實施。DAO只完成增刪改查

HttpWatch功能詳細介紹

響應狀態 time 空行 cor mini source Go nts 請求響應 來源:https://www.cnblogs.com/Chilam007/p/6947235.html HttpWatch是功能強大的網頁數據分析工具,集成在IE工具欄,主要功能有網頁摘要、c

(數據科學學習手劄32)Pythonre模塊的詳細介紹

簡介 print 兩種 clas 就是 HERE 每次 str 通過 一、簡介   關於正則表達式,我在前一篇(數據科學學習手劄31)中已經做了詳細介紹,本篇將對Python中自帶模塊re的常用功能進行總結;   re作為Python中專為正則表達式相關功能做出支持的模

Java HashMap詳細介紹和使用示例(正在整理學習

trac blog null https 學習 ava abs 同步 .com 對HashMap的整體認識 HashMap是一個散列表,它存儲的內容是鍵值對(key-value)映射。 HashMap繼承於AbstractMap,實現了Map、Cloneable、jav

spring boot項目之微信支付功能實現詳細介紹

tab 流程 invalid body 正方形 無法 數據 fmt -s 對接微信支付功能主要有以下幾個步驟, 而其第一個關鍵點就是獲取OpenID,在這裏介紹兩種獲取方式: 一、微信授權 微信網頁授權 如果用戶在微信客戶端中訪問第三方網頁,公

介紹JSP如何使用JavaBeans?

tag prop javabeans use itl 方法 lan 如何使用 rop 在JSP中使用JavaBean常用的動作有: 1)<jsp:useBean />:用來創建和查找bean對象; 2)<jsp:setProperty />

jstypeof用法詳細介紹

css -name iter owin lease implement Language addition 並不是

Drools內部功能詳細介紹

規則檔案     在 Drools 當中,一個標準的規則檔案就是一個以“.drl”結尾的文字檔案,由於它是一個標準的文字檔案,所以可以通過一些記事本工具對其進行開啟、檢視和編輯。規則是放在規則檔案當中的,一個規則檔案可以存放多個規則,除此之外,在規則檔案當中還可以

IDEA的lombok外掛安裝以及各註解的詳細介紹

IDEA中的lombok外掛安裝以及各註解的詳細介紹 其實對於我們來說, 寫好實體類後,直接用快捷方式生成get,set方法,還有 構造方法就行了,但是對於欄位比較多的, 如果修改一個屬性的話,就要再修改他的get ,set方法,這樣容易出錯,但是用了lombok以後,就不必擔心了,下面給大家說下idea中

QTPRO檔案寫法的詳細介紹 Pro檔案變數詳細說明

學習Qt時,發現有些知識看了不經常用就忘了,以下是書本上寫的一些關於qmake的相關知識,自己看後,打算把一些經常用到的記下來,整理整理。   Qt程式一般使用Qt提供的qmake工具來編譯。 qmake工具可以使用與平臺無關的.pro檔案生成與平臺相關的makefile。該工具包含了呼叫Qt

【圖文詳細 】HDFS面試題:介紹HadoopRPC協議,以及底層用什麼框架封裝的

用於將使用者請求中的引數或者應答轉換成位元組流以便跨機傳輸。 函式呼叫層:函式呼叫層主要功能是:定位要呼叫的函式,並執行該函式,Hadoop採用了java的反射機制和動態代理實現了函式的呼叫。 網路傳輸層:網路傳輸層描述了Client和Server之間訊息的傳輸方式,Hadoop採用了基

詳細介紹如何在Eclipse使用SVN

一、在Eclipse中下載安裝Subclipse外掛   1 開啟eclipse,在Help選單中找到marketPlace,點選進入。