struts2數(shù)據(jù)處理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
Struts2框架框架使用OGNL語(yǔ)言和值棧技術(shù)實(shí)現(xiàn)數(shù)據(jù)的流轉(zhuǎn)處理。值棧就相當(dāng)于一個(gè)容器,用來(lái)存放數(shù)據(jù),而OGNL是一種快速查詢數(shù)據(jù)的語(yǔ)言。
值棧:ValueStack一種數(shù)據(jù)結(jié)構(gòu),操作數(shù)據(jù)的方式為:先進(jìn)后出
OGNL : Object-GraphNavigation Language(對(duì)象圖形導(dǎo)航語(yǔ)言)將多個(gè)對(duì)象的關(guān)系使用一種樹(shù)形的結(jié)構(gòu)展現(xiàn)出來(lái),更像一個(gè)圖形,那么如果需要對(duì)樹(shù)形結(jié)構(gòu)的節(jié)點(diǎn)數(shù)據(jù)進(jìn)行操作,那么可以使用 對(duì)象.屬性 的方式進(jìn)行操作,OGNL技術(shù)底層采用反射實(shí)現(xiàn)。
一:數(shù)據(jù)的提交方式
,<form>表單提交 <form action="/user/login_Login.action" method="post" > 用戶代碼:<inputnameinputname="usercode" type="text" ><br> 用戶密碼:<inputnameinputname="userpswd" type="password"><br> <inputtypeinputtype="submit" value="登錄"> </form>
2,url的方式
http://localhost.egov.com/user/login_Login.action?usercode=admin&userpswd=admin
3,超鏈接
<a href="/user/delete.action?usercode=admin" rel="external nofollow" >刪除</a>
4,異步提交
ajax異步提交數(shù)據(jù)
二:數(shù)據(jù)存儲(chǔ)
數(shù)據(jù)的存儲(chǔ)依賴于框架提供的攔截器功能,攔截器可以對(duì)請(qǐng)求進(jìn)行攔截,獲取所有的請(qǐng)求參數(shù),循環(huán)遍歷設(shè)置到值棧中。框架默認(rèn)將被請(qǐng)求的Action對(duì)象存放到值棧的棧頂。Struts2框架提供三種方式將參數(shù)存入值棧
1,屬性驅(qū)動(dòng)模式
Action中需要提供參數(shù)名稱的set方法,框架會(huì)通過(guò)攔截器將請(qǐng)求參數(shù)獲取到之后,會(huì)循環(huán)遍歷將參數(shù)設(shè)置到值棧(棧頂對(duì)象)中。
<input name="usercode" type="text" > Ognl.setValue("usercode",action,"admin");//此時(shí)根對(duì)象是action
2,模型驅(qū)動(dòng)模式
必須要實(shí)現(xiàn)模型驅(qū)動(dòng)接口,屬于侵入性開(kāi)發(fā)方式,不推薦使用
需要定義數(shù)據(jù)模型的類,將屬性封裝到數(shù)據(jù)模型類中,Action中只需要定義模型對(duì)象的類型屬性(必須創(chuàng)建對(duì)象賦值),模型對(duì)象的get/set屬性并不是必須的。
Action類需要實(shí)現(xiàn)ModelDriven接口,重寫getModel()方法。
<inputnameinputname="usercode" type="text" ><br>表單依然是模型對(duì)象的屬性名稱作為參數(shù)名稱 Ognl.setValue("usercode",user,"admin");//此時(shí)根(棧頂)對(duì)象是user對(duì)象
3,域驅(qū)動(dòng)模式
與屬性驅(qū)動(dòng)的原理是類似,也是通過(guò)參數(shù)攔截器,將請(qǐng)求參數(shù)獲取后循環(huán)設(shè)置到值棧中。
在Action對(duì)象中定義模型對(duì)象屬性,并提供get/set方法;
在表單元素中增加模型對(duì)象屬性的名稱;
<inputnameinputname="user.usercode" type="text" > Ognl.setValue("user.usercode",action,"admin");//此時(shí)根對(duì)象是action
三:數(shù)據(jù)的傳遞
框架將Http對(duì)象和包裝后的Map集合對(duì)象都存放到ActionContext上下文對(duì)象集合中。所以可以根據(jù)ActionContext來(lái)獲取想要使用的對(duì)象。
1,獲取HTTP對(duì)象
ActionContext ac = ActionContext.getContext(); //上下文對(duì)象相當(dāng)于request范圍 HttpServletRequest request =(HttpServletRequest)ac.get(StrutsStatics.HTTP_REQUEST); HttpSession session = request.getSession(false); ServletContext application = session.getServletContext(); ServletContext application = ac.get(StrutsStatics.SERVLET_CONTEXT); HttpServletRequest request = ServletActionContext.getRequest(); (推薦使用) HttpServletResponse response =ServletActionContext.getResponse(); Action類實(shí)現(xiàn)ServletRequestAware,或ServletResponseAware (屬于侵入性開(kāi)發(fā)方式,不推薦使用) private HttpServletRequest request ; //set注入 private HttpServletResponse response ; @Override public void setServletRequest(HttpServletRequest request) { //實(shí)現(xiàn)該方法,該方法由框架調(diào)用,傳遞參數(shù)。 this.request= request ; } @Override public void setServletResponse(HttpServletResponse response) { this.response= response ; }
2,獲取Map集合
ActionContext ac = ActionContext.getContext(); Mapsession = ac.getSession(); Mapsession2 =(Map)ac.get("session"); Mapsession3=(Map)ac.get(ActionContext.SESSION); Mapapplication = ac.getApplication() Mapapplication = ac.get(ActionContext.APPLICATION); Mapapplication = ac.get("application");
3, 獲取值棧對(duì)象以及參數(shù)集合對(duì)象
ActionContext ac = ActionContext.getContext(); ValueStack vs = ac.getValueStack(); Map paramts = ac.getParameters();
四:數(shù)據(jù)的顯示
用El表達(dá)式的形式,取request對(duì)象中的值
${requestScope.username }
而這種表達(dá)式的方式可以表示成java代碼的方式:
<% Stringusername =(String)request.getAttribute("username");//被重寫的方法,底層是通過(guò)ognl查詢值棧中的數(shù)據(jù) out.print(username); %>
從request返回取數(shù)據(jù),實(shí)質(zhì)上底層是通過(guò)Ognl語(yǔ)言操作值棧中的數(shù)據(jù)。 ActionContext對(duì)象的集合和OgnlValueStack值棧的集合為同一個(gè)集合對(duì)象,所以從值棧的Map集合中取數(shù)據(jù),就相當(dāng)于從ActionContext上下文中取數(shù)據(jù)。
總結(jié)
以上所述是小編給大家介紹的struts2數(shù)據(jù)處理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Java struts2 package元素配置及實(shí)例解析
- Java框架Struts2實(shí)現(xiàn)圖片上傳功能
- Java中的Struts2框架攔截器之實(shí)例代碼
- Java框架學(xué)習(xí)Struts2復(fù)選框?qū)嵗a
- struts2簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- struts2標(biāo)簽總結(jié)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- struts2攔截器_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Java struts2請(qǐng)求源碼分析案例詳解
相關(guān)文章
SpringBoot實(shí)現(xiàn)接口返回?cái)?shù)據(jù)脫敏的代碼示例
在當(dāng)今的信息化時(shí)代,數(shù)據(jù)安全尤為重要,接口返回?cái)?shù)據(jù)脫敏是一種重要的數(shù)據(jù)保護(hù)手段,可以防止敏感信息通過(guò)接口返回給客戶端,本文旨在探討如何在SpringBoot應(yīng)用程序中實(shí)現(xiàn)接口返回?cái)?shù)據(jù)脫敏,需要的朋友可以參考下2024-07-07SpringMVC中使用bean來(lái)接收f(shuō)orm表單提交的參數(shù)時(shí)的注意點(diǎn)
本篇文章主要介紹了SpringMVC中使用bean來(lái)接收f(shuō)orm表單提交的參數(shù)時(shí)的注意點(diǎn),具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-05-05SpringBoot2.0整合WebSocket代碼實(shí)例
這篇文章主要介紹了SpringBoot2.0整合WebSocket代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11springmvc+spring+mybatis實(shí)現(xiàn)用戶登錄功能(下)
這篇文章主要為大家詳細(xì)介紹了springmvc+spring+mybatis實(shí)現(xiàn)用戶登錄功能的第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07eclipse漢化及jdk安裝環(huán)境配置超詳細(xì)教程(Java安裝教程)
這篇文章主要介紹了eclipse漢化及jdk安裝環(huán)境配置超詳細(xì)教程(Java安裝教程),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03java實(shí)現(xiàn)把對(duì)象數(shù)組通過(guò)excel方式導(dǎo)出的功能
本文主要介紹了java實(shí)現(xiàn)把對(duì)象數(shù)組通過(guò)excel方式導(dǎo)出的功能的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-03-03基于SpringBoot核心原理(自動(dòng)配置、事件驅(qū)動(dòng)、Condition)
這篇文章主要介紹了基于SpringBoot核心原理(自動(dòng)配置、事件驅(qū)動(dòng)、Condition),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08java實(shí)現(xiàn)隊(duì)列數(shù)據(jù)結(jié)構(gòu)代碼詳解
這篇文章主要介紹了java實(shí)現(xiàn)隊(duì)列數(shù)據(jù)結(jié)構(gòu)代碼詳解,簡(jiǎn)單介紹了隊(duì)列結(jié)構(gòu)以應(yīng)用場(chǎng)景,涉及詳細(xì)實(shí)現(xiàn)代碼,還是比較不錯(cuò)的,這里分享給大家,需要的朋友可以參考下。2017-11-11