暑期项目经验(九) -- request session application
request、session、application
一、基礎(chǔ)知識(shí)
可以看看? 淺談:request,session,application (http://blog.csdn.net/hzc543806053/article/details/7416007)
要點(diǎn):
作用域: request<session<application
共同方法:都可以使用 setAttribute(String name , Object o ) ,getAttribute(String name)
?
二、在java中獲取這三個(gè)對(duì)象
可以看以下原文 :http://www.blogjava.net/xcp/archive/2009/10/23/struts2_actioncontext1.html?opt=admin
2.1 struts2封裝后的三個(gè)Map? (使用ActionContext)
import java.util.Map; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext;........ActionContext context = ActionContext.getContext(); Map request = (Map) context.get("request"); Map session = context.getSession(); Map application = context.getApplication();2.2 與Servlet API耦合的訪問(wèn)方式(非IoC方式,使用ServletActionContext)
HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); HttpSession session = ServletActionContext.getRequest().getSession();?
三、ActionContext和ServletActionContext的區(qū)別
我們知道struts2接受客戶端請(qǐng)求,在Action中進(jìn)行處理后,將視圖結(jié)果返回。struts2容器自身不依賴于web容器,不用和servlet對(duì)象中的請(qǐng)求(request)、響應(yīng)(response)進(jìn)行關(guān)聯(lián),對(duì)于請(qǐng)求的參數(shù),通過(guò)paramerInterceptor將參數(shù)封裝在Action中,然后通過(guò)調(diào)用get、set方法將參數(shù)值設(shè)置進(jìn)Action之中。如果僅僅獲取參數(shù),可能有時(shí)候滿足不了開(kāi)發(fā)的需求,有時(shí)我們要獲取request或者response中的信息,要對(duì)其進(jìn)行設(shè)置、處理。
3.1 ActionContext
是Action執(zhí)行的上下文,Action的上下文可以看作是一個(gè)容器,里面封裝了請(qǐng)求(Request)、會(huì)話(Session)、 Application等,這里面的Request、Session、Application是Map類(lèi)型的,往里面封裝的是鍵值對(duì),所以這就體現(xiàn)了 struts2不與底層servlet Api打交道,那么對(duì)很多web的相關(guān)對(duì)象進(jìn)行封裝,這樣可以達(dá)到Action與web層解耦。
3.2 ServletActionContext
它繼承ActionContext,所以ServletActionContext也可以得到HttpServetRequest、HttpServletResponse,,它也提供了直接與Servlet相關(guān)對(duì)象訪問(wèn)的功能.
?
總結(jié):不難看出,兩者之間還是存在很多共同功能,那么我們還是根據(jù)自己的需求進(jìn)行選擇,能用ActionContext對(duì)象滿足就盡量使用ActionContext,避免讓我們直接去訪問(wèn)Servlet對(duì)象。另外,不要在Action還沒(méi)實(shí)例化的時(shí)候去通ActionContext調(diào)用方法,因?yàn)锳ction實(shí)例在ActionContext實(shí)例之前創(chuàng)建,ActionContext中一些值還沒(méi)有設(shè)置,會(huì)返回null。
?
4. application實(shí)例? (統(tǒng)計(jì)在線人數(shù) )
4.1 登錄程序中 LoginAction.java
//統(tǒng)計(jì)在線人數(shù)Map application = ActionContext.getContext().getApplication();Integer count = (Integer) application.get("count");if(null == count){count=1;}else{count++;}application.put("count", count);?
?4.2 注銷(xiāo)程序中 ExitAciton.java
Map application = ActionContext.getContext().getApplication();Integer count = (Integer) application.get("count");count--;application.put("count", count);?
轉(zhuǎn)載于:https://www.cnblogs.com/pxjgood/p/3991945.html
總結(jié)
以上是生活随笔為你收集整理的暑期项目经验(九) -- request session application的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 记录一些容易忘记的属性 -- UITab
- 下一篇: amp; 的意思