struts 2のrequestとresponse


Struts 2にはStruts 1のようにActionクラスにexecute()メソッドを書く必要はなく、文字列を返すメソッドであればよい(値を返す必要もない場合もある)、struts 2では元のservletのrequestパラメータとresponseパラメータをブロッカーにカプセル化するが、プログラミング時にこの2つのパラメータを使用する必要がある場合がある.以下に、このパラメータを取得するためのいくつかの方法を示します.
方法1:Struts 2 Awareブロッキングを使用する
この方法は、アクションクラスが対応するブロッキングインタフェースを実装する必要がある.HttpServeretResponseオブジェクトを取得するには
現orgが必要である.apache.struts2.interceptor.サーブレットResponseAwareインタフェース、コードは次のとおりです.
public class MyAction extends ActionSupport implements ServletResponseAware   {
       private javax.servlet.http.HttpServletResponse response;
              
       //   HttpServletResponse         @Override
       public void setServletResponse(HttpServletResponse response)       {
              this.response = response;
       }           
       public String execute() throws Exception       {
              response.getWriter().write("  ServletResponseAware  ");
       }
}

上記のコードでは、MyActionはサーブレットResponseAwareインタフェースを実装し、setサーブレットResponseメソッドを実装しています.
動作クラスにサーブレットResponseAwareインタフェースが実装されている場合、Struts 2はexecuteメソッドを呼び出す前にsetサーブレットResponseメソッドを呼び出す.
responseパラメータをこの方法に入力します.
HttpServereRequest、HttpSession、Cookieなどのオブジェクトを取得するには、動作クラスは、それぞれサーrvereRequestAware、SessionAware、CookiesAwareなどのインタフェースを実現することができます.これらのインタフェースはorg.apache.struts2.interceptorパッケージにあります.
要求パラメータを取得する場合、動作クラスはorgを実現することができる.apache.struts2.interceptor. ParameterAwareインタフェースであるが、あるパラメータが存在するか否かのみを判断したい場合はcomを実現することも可能である.opensymphony.xwork2.interceptor. ParameterName Awareインタフェース.このインタフェースにはacceptableParameterNameメソッドがあり、Struts 2が要求パラメータを取得すると1回呼び出されます.読者は、後で使用するために、この方法ですべての要求パラメータを記録することができる.このメソッドの定義は次のとおりです.
boolean acceptableParameterName(String parameterName);
方法2.RequestAwareブロッキングを使用する方法は、第1の方法と同様である.
動作クラスはorgを実現する必要がある.apache.struts2.interceptor.RequestAwareインタフェース.
異なるのはRequestAwareがcomを取得することである.opensymphony.xwork2.util.OgnlValueStackオブジェクト、
このオブジェクトはresponse、request、その他の情報を得ることができます.
コードは次のとおりです.
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 keys = request.keySet();  
       			
       			//      key 。       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("  RequestAware   ");
       }
}

StrutsStaticsも使用できます.HTTP_REQUEST、StrutsStatics.PAGE_CONTEXTは、HttpServeretRequestオブジェクトとPageContextオブジェクトを取得します.
この方法は少し面倒で,一般的にはあまり使われない.
方法3、ActionContextクラスを使用するこの方法は比較的簡単で、org.apache.struts2.ActionContextクラスのgetメソッドは、対応するオブジェクトを取得します.
コードは次のとおりです.
ActionContext ctx = ActionContext.getContext();
HttpServletRequest request =(HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
HttpServletResponse response = 	(HttpServletResponse)ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE);
		

方法四、サーブレットActionContextクラスの使用
Struts 2は、HttpServeretResponseおよび他のオブジェクトを得る最も簡単な方法を提供します.
これがorgです.apache.struts2.サーブレットActionContextクラス.ServertActionContextクラスのgetRequest、getResponseメソッドを直接使用して、HttpServertRequest、HttpServertResponseオブジェクトを取得できます.
コードは次のとおりです.
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();

この4つの方法から見ると、最後の1つが最も簡単です.