您好,登錄后才能下訂單哦!
這篇文章主要介紹“JSP中Action屬性的功能是什么”,在日常操作中,相信很多人在JSP中Action屬性的功能是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JSP中Action屬性的功能是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1. 完整的action
﹤action path="/aFullAction" type="somePackage.someActionClass"﹥ name="someForm" input="someJSP.jsp" ﹤forward name="successful" path="someJSP.jsp"/﹥ ﹤forward name="failed" path="someOtherJSP.jsp"/﹥ ﹤/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
﹤action path="/aFormOnlyAction" type="org.apache.struts.actions.ForwardAction" name="someForm" input="someJSP.jsp" parameter="someOtherJSP.jsp" /> |
首先,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
﹤action path="/anActionOnlyAction" type="somePackage.someActionClass"﹥ input="someJSP.jsp" ﹤forward name="successful" path="someJSP.jsp"/﹥ ﹤forward name="failed" path="someOtherJSP.jsp"/﹥ ﹤/action﹥ |
首先,ActionServlet接收到請求后,取得action類實例,調用execute()方法;然后根據返回的ActionForward在配置中找forward,forward到指定的URI或action。
這樣做的效果是:沒有form實例被傳入execute()方法,于是execute()必須自己從請求中獲取參數。Action能夠被forward或重定向。這種action不能處理通過HTML FORM提交的請求,只能處理鏈接式的請求。
4. 僅有JSP的action
﹤action path="/aJSPOnlyAction" type="org.apache.struts.actions.ForwardAction" parameter="someOtherJSP.jsp" /﹥ |
首先,ActionServlet接到請求后調用ForwardAction的execute()方法,execute()根據配置的parameter屬性值來forward到那個URI。
這樣做的效果是:沒有任何form被實例化,比較現實的情形可能是form在request更高級別的范圍中定義;或這個action被用作在應用程式編譯好后充當系統參數,只需要更改這個配置文檔而無需重新編譯系統。
5. 兩個action對應一個form
﹤action path="/anAction" type="somePackage.someActionClass"﹥ name="someForm" input="someJSP.jsp" ﹤forward name="successful" path="/anotherAction.do"/﹥ ﹤/action﹥ ﹤action path="/anotherAction" type="somePackage.someOtherActionClass"﹥ name="someForm" input="someOtherJSP.jsp" ﹤forward name="successful" path="someResultJSP.jsp"/﹥ ﹤/action﹥ |
就每個單獨的action來講,處理上并沒有和完整的action有什么實質的區分。這個組合模式能夠被用來傳遞命令對象(form)。需要注意的是在后一個action中同樣會調用form的reset()和validate()方法,因此我們必須確保form中的信息不被重寫。
處理的方式大致分為兩種:
a) 在request中放入一個指示器表明前一個action有意向后一個action傳遞form,從而在后一個action能夠保留那個form中的值,這一方式只能在使用forward時使用。b) 當使用redirect而不是forward時,能夠把指示器放在session或更高的級別,在命令鏈的***一環將這個指示器清除。
﹤action path="/anAction" type="somePackage.someActionClass"﹥ name="someForm" input="someJSP.jsp" ﹤forward name="successful" path="/anotherAction.do" redirect="true"/﹥ ﹤/action﹥ ﹤action path="/anotherAction" type="somePackage.someOtherActionClass"﹥" name="someOtherForm" input="someOtherJSP.jsp" ﹤forward name="successful" path="someResultJSP.jsp"/﹥ ﹤/action﹥ |
這個組合方式跟前一種在流程上沒有太大區分,只是我們現在對于兩個action分別提供了form,于是代碼看上去更加清楚。于是我們能夠分別處理Web應用程式的輸入和輸出。值得注意的是,后一個action同樣會嘗試往form中寫入那些參數,但是我們能夠這樣處理:
a) 在后一個form中使用另一套屬性名;
b) 只提供getter而不提供setter。
大致的處理是這樣:
前一個action接收輸入、驗證、然后將數據寫入業務層或持久層,重定向到后一個action,后一個action手動的從業務層/持久層取出數據,寫入form(通過其他方式),交給前臺JSP顯示。
這樣做的好處是不必保留輸入form中的值,因此能夠使用redirect而不是forward。這樣就降低了兩個action之間的耦合度,同時也避免了不必要的重復提交。
到此,關于“JSP中Action屬性的功能是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。