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インタフェース、コードは次のとおりです.
上記のコードでは、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、その他の情報を得ることができます.
コードは次のとおりです.
StrutsStaticsも使用できます.HTTP_REQUEST、StrutsStatics.PAGE_CONTEXTは、HttpServeretRequestオブジェクトとPageContextオブジェクトを取得します.
この方法は少し面倒で,一般的にはあまり使われない.
方法3、ActionContextクラスを使用するこの方法は比較的簡単で、org.apache.struts2.ActionContextクラスのgetメソッドは、対応するオブジェクトを取得します.
コードは次のとおりです.
方法四、サーブレットActionContextクラスの使用
Struts 2は、HttpServeretResponseおよび他のオブジェクトを得る最も簡単な方法を提供します.
これがorgです.apache.struts2.サーブレットActionContextクラス.ServertActionContextクラスのgetRequest、getResponseメソッドを直接使用して、HttpServertRequest、HttpServertResponseオブジェクトを取得できます.
コードは次のとおりです.
この4つの方法から見ると、最後の1つが最も簡単です.
方法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つが最も簡単です.