小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Struts2在Action類中獲得HttpServletResponse對象的四種方法

 Erica_Shea 2015-01-23
Struts2 Action類中有很多方法可以獲得這些對象。下面就列出四種獲得這些對象的方法。

【方法1】使用Struts2 Aware攔截器

 

    這種方法需要Action類實(shí)現(xiàn)相應(yīng)的攔截器接口。如我們要獲得HttpServletResponse對象,需要實(shí)現(xiàn)org.apache.struts2.interceptor.ServletResponseAware接口,代碼如下:

package action;

import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.http.*;
import org.apache.struts2.interceptor.*;

public class MyAction extends ActionSupport implements ServletResponseAware
{
    
private javax.servlet.http.HttpServletResponse response;
    
// 獲得HttpServletResponse對象
    public void setServletResponse(HttpServletResponse response)
    {
        
this.response = response;
    }    
    
public String execute() throws Exception
    {    
        response.getWriter().write(
"實(shí)現(xiàn)ServletResponseAware接口");
    }
}

在上面的代碼中,MyAction實(shí)現(xiàn)了一個(gè)ServletResponseAware接口,并且實(shí)現(xiàn)了setServletResponse方法。如果一個(gè)動(dòng)作類實(shí)現(xiàn)了ServletResponseAware接口,Struts2在調(diào)用execute方法之前,就會先調(diào)用setServletResponse方法,并將response參數(shù)傳入這個(gè)方法。如果想獲得HttpServletRequestHttpSessionCookie等對象,動(dòng)作類可以分別實(shí)現(xiàn)ServletRequestAware、SessionAwareCookiesAware等接口。這些接口都在org.apache.struts2.interceptor包中。

如果要獲得請求參數(shù),動(dòng)作類可以實(shí)現(xiàn)org.apache.struts2.interceptor. ParameterAware接口,但如果只想判斷某個(gè)參數(shù)是否存在,也可以實(shí)現(xiàn)com.opensymphony.xwork2.interceptor. ParameterNameAware接口。這個(gè)接口有一個(gè)acceptableParameterName方法,當(dāng)Struts2獲得一個(gè)請求參數(shù)時(shí),就會調(diào)用一次。讀者可以在這個(gè)方法中將所有的請求參數(shù)記錄下來,以便以后使用。這個(gè)方法的定義如下:

boolean acceptableParameterName(String parameterName);

【方法2】使用RequestAware攔截器

    這種方法和第1種方法類似。動(dòng)作類需要實(shí)現(xiàn)一個(gè)org.apache.struts2.interceptor.RequestAware接口。所不同的是RequestAware將獲得一個(gè)com.opensymphony.xwork2.util.OgnlValueStack對象,這個(gè)對象可以獲得responserequest及其他的一些信息。代碼如下所示:


package action;

import java.util.Map;
import org.apache.struts2.*;
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.http.*;
import com.opensymphony.xwork2.util.*;
import org.apache.struts2.interceptor.*;

public class FirstAction extends ActionSupport implements RequestAware
{
    
private Map request;
private HttpServletResponse response;
    
    
public void setRequest(Map request)
    {
        
this.request = request;        
    }    
    
public String execute() throws Exception
    {    
        java.util.Set
<String> keys = request.keySet();
        
// 枚舉所有的key值。實(shí)際上只有一個(gè)key:struts.valueStack
        for(String key: keys)
            System.out.println(key);
        
// 獲得OgnlValueStack 對象
        OgnlValueStack stack = (OgnlValueStack)request.get("struts.valueStack");
        
// 獲得HttpServletResponse對象
        response = (HttpServletResponse)stack.getContext().get(StrutsStatics.HTTP_RESPONSE);
        response.getWriter().write(
"實(shí)現(xiàn)RequestAware 接口");
    }
}

    我們也可以使用StrutsStatics.HTTP_REQUEST、StrutsStatics.PAGE_CONTEXT來獲得HttpServletRequestPageContext對象。這種方法有些麻煩,一般很少用,讀者可以作為一個(gè)參考。

【方法3】使用ActionContext

    這種方法比較簡單,我們可以通過org.apache.struts2.ActionContext類的get方法獲得相應(yīng)的對象。代碼如下:

    HttpServletResponse response = (HttpServletResponse)

ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);

HttpServletRequest request = (HttpServletRequest)

ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);

【方法4】使用ServletActionContext

    Struts2為我們提供了一種最簡單的方法獲得HttpServletResponse及其他對象。這就是org.apache.struts2.ServletActionContext類。我們可以直接使用ServletActionContext類的getRequest、getResponse方法來獲得HttpServletRequest、HttpServletResponse對象。代碼如下:
    HttpServletRequest request = ServletActionContext.getRequest();
    HttpServletResponse response = ServletActionContext.getResponse();

    response.getWriter().write("hello world");

    從這四種方法來看,最后一種是最簡單的,讀者可以根據(jù)自己的需要和要求來選擇使用哪一種方法來獲得這些對象。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多