struts 2 Sessionメソッドとrequestメソッドの取得


Struts 1.*では、request、response、sessionなどのサーブレットオブジェクトにアクセスするには便利です.これは、常にパラメータとして各メソッド間で伝達されているためです.Struts 2では、フォームの値が予め設定されたgetメソッドを介して得られるため、それらのトレースが見えにくくなります.パラメータがあればrequestを通過しなければなりませんgetParametreまたはsession.getAttributeで手に入れるには、どうすればいいのでしょうか.Maxのチュートリアルでは、IoC方式と非IoC方式の2つに分けることができますが、この2つの方式の違いをどのように理解しますか?IoCはSpringの特徴の1つで、字面の意味は反転制御で、はっきり言って依存注入で、例えば類A依存類B、それでは積極的にAに1つの類Bの対象を注入して、以下はこの2つの方法の具体的な実現を見てみましょう.1.非Ioc方式この方式は主にcomを利用する.opensymphony.xwork2.ActionContextクラスおよびorg.apache.struts2.サーブレットActionContextクラス、具体的な方法は以下の通りです.requestオブジェクトを取得するには、次の手順に従います.
HttpServletRequest request = ServletActionContext.getRequest (); 
ActionContext ct= ActionContext.getContext() 
HttpServletRequest request= 
(HttpServletRequest)ct.get(ServletActionContext.HTTP_REQUEST); 

 
セッションオブジェクトの取得:Struts 2では下位レベルのセッションはすべてMapタイプにカプセル化されており、我々はSessionMapと呼ぶが、通常我々が言うセッションはHttpSessionオブジェクトを指し、具体的な取得方法は以下の通りである.
Map session=ActionContext.getSession(); 
Map session=(Map)ActionContext.getContext().getActionContext.SESSION); 

 
このSessionMapを得るとsessionを読み書きすることができ、元のHttpSessionを得るにはまずHttpService Requestオブジェクトを得てrequestを通過することができる.getSession()を使用して、元のHttpSessionオブジェクトを取得します.一般的にSessionMapはすでにすべての仕事を完成することができて、私たちはもう底のsessionに触れる必要はありません.2.IoC方式は相対的に変化が少なく、具体的な流れは以下の通りである.requestオブジェクトを取得する手順1:ServertRequestAwareインタフェースをactionに実装する手順2:HttpServertRequestタイプのインスタンス変数をactionに宣言する手順3:ServertRequestAwareインタフェースをactionで実装するsetSetServertRequestメソッドは、以下に示すように簡単に実装されます.
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}

Sessionオブジェクトを取得する(この場合のsessionはSessionMapタイプであることに注意):最初のステップ:SessionAwareインタフェースをactionに実装させる第2のステップ:HttpServertRequestタイプのインスタンス変数をactionに宣言する第3のステップ:SessionAwareインタフェースをactionで実装するsetSessionメソッドは、以下に示すように簡単に実装されます.
private Map session;
publicvoid setSession(Map session) {
this. session = session;
}

RequestとSessionの入手に関する別の記事を次に示します.
 Struts2 ,     Action   session,             
1.  ActionContext class    getSession   
2.Action  org.apache.struts2.interceptor.SessionAware       session     
  
             , action   session    
package s2.ex.action; 
  
  
import java.util.Map; 
  
  
import com.opensymphony.xwork2.ActionContext; 
  
import com.opensymphony.xwork2.ActionSupport; 
  
  
public class SessionTestAction extends ActionSupport {  
  
  
    public String execute() {  
  
     ActionContext actionContext = ActionContext.getContext(); 
  
       Map session = actionContext.getSession(); 
  
       session.put("USER_NAME", "Test User"); 
  
       return SUCCESS; 
  
    }  
  
} 
      ,  ActionContext  session,  session     key USER_NAME,  Test User   。 
  
       org.apache.struts2.interceptor.SessionAware    session      
package s2.ex.action; 
  
  
import java.util.Map; 
  
  
import org.apache.struts2.interceptor.SessionAware; 
  
  
import com.opensymphony.xwork2.ActionSupport; 
  
  
public class SessionTest1Action extends ActionSupport implementsSessionAware {  
  
    private Map session; 
  
    public void setSession(Map session) {  
  
       this.session = session; 
  
  
    }  
  
    public String execute() {  
  
       this.session.put("USER_NAME", "Test User 1"); 
  
       return SUCCESS; 
  
    }  
  
} 

この例では,インタフェースSessionAwareにおけるsetSessionメソッドを実現した.上記の2つの方法でsessionが得られ、実現できる機能は同じです.ここでは第2の方法でsessionを使用することをお勧めします.単量体テストが容易であるためです.第2の方法では、Mapを1つ構築するだけでaction classを単量体テストすることができます.1つのプロジェクトではセッションを使用する必要があるactionがたくさんあるかもしれません.各actionがorgを実現する場合は.apache.struts2.interceptor.SessionAwareというインタフェースは、面倒に見えるかもしれないので、orgを実現するために抽象的なBaseActionクラスを提案します.apache.struts2.interceptor.SessionAwareインタフェースは,以降すべてのactionがこのBaseActionを継承すればよい.次はJSPでセッションをどのように使用するかの例です.
<%@ page contentType="text/html; charset=UTF-8" %> 
  
<%@page pageEncoding="utf-8" %> 
  
<%@taglib prefix="s" uri="/struts-tags" %> 
  
<html> 
  
<head> 
  
    <title>Session Test</title> 
  
</head> 
  
  
<body> 
  
<h1><s:property value="#session.USER_NAME"/></h1> 
  
<h1></h1> 
  
</body> 
  
</html> 

一般的にプロジェクトでは、sessionにObjectを配置することが多い.必ずuser、userにboolean adminとString userNameがあり、userにisAdminの方法が存在する場合、jspではでユーザーの管理権限の有無を判断し、またはユーザー名を取得することができる. 
IOC方式:actionクラスはサーブレットRequestAwareインタフェースを実現し、H t t pサーブレットRequest requestpublic class UserLoginAction extends ActionSupport implementsサーブレットRequestAware{public void setサーブレットRequest(HttpサーブレットRequest){this.request=request;}生成可能なrequestは、requestのようなオブジェクトを得る.getRemoteAddr()actionクラスはSessionAwareインタフェースを実装し、MAPオブジェクトsessionpublic class UserLoginAction extends ActionSupport implements Service RequestAware,SessionAware{public void setService Request(HttpService Request request){this.request=request;  }public void setSession(Map session) {  this.session=session;   }
非IOC方式
この方式は主にcomを利用する.opensymphony.xwork2.ActionContextクラスおよびorg.apache.struts2.サーブレットActionContextクラス、具体的な方法は以下の通りです.Requestオブジェクトの取得:A.HttpServertRequest request=ServertActionContext.getRequest (); B.ActionContext ct= ActionContext.getContext()   HttpServletRequest request= (HttpServletRequest)ct.get(ServletActionContext. HTTP_REQUEST ); セッションオブジェクトの取得:Struts 2では下位レベルのセッションはすべてMapタイプにカプセル化されており、我々はSessionMapと呼ぶが、通常我々が言うセッションはHttpSessionオブジェクトを指し、具体的な取得方法は以下の通りである.A.Map session=ActionContext.getSession();B.Map session=(Map)ActionContext.getContext().get(ActionContext.SESSION);このSessionMapを得るとsessionを読み書きすることができ、元のHttpSessionを得るにはまずHttpService Requestオブジェクトを得てrequestを通過することができる.getSession()を使用して、元のHttpSessionオブジェクトを取得します.一般的にSessionMapはすでにすべての仕事を完成することができて、私たちはもう底のsessionに触れる必要はありません.