Struts 2のActionでのWEBリソースへのアクセス

2862 ワード

ActionでWEBリソースにアクセス
一、WEBリソースとは何ですか.
HttpServertRequest,HttpSession,ServertContextなどのオリジナルのServertAPI
二、なぜWEBリソースにアクセスするのか.
BSのアプリケーションのControllerでWEBリソースにアクセスする必要がある
ドメインオブジェクトへの読み書きプロパティ、読み書きCookie、realPathの取得
三、どのように訪問しますか.      
1、:サーブレットAPIとのデカップリング方法:限られたサーブレットAPIオブジェクトのみにアクセスでき、限られたメソッドのみにアクセスできます.(リクエストパラメータを読み込み、ドメインオブジェクトのプロパティを読み書きし、sessionを失効させる)
       
具体的には博文:Struts 2のSessionを参照してください
(1)ActionContextの使用
import comでopensymphony.xwork2.ActionContext;
(2)XxxAwareインタフェースの実現
Actionにより次のインタフェースを実現
   
import org.apache.struts2.dispatcher.SessionMap;
	import org.apache.struts2.interceptor.ApplicationAware;
	import org.apache.struts2.interceptor.SessionAware;

(3)選択した推奨事項:1つのActionクラスに複数のactionメソッドがあり、複数のメソッドがドメインオブジェクトのMapまたはparametersを使用する必要がある場合は、Awareインタフェースを使用することを推奨する
(4)セッション対応のMapは実際にはSessionMapタイプであり,強転後にinvalidate()メソッドを呼び出すとセッションを無効にすることができる.
2.サーブレットAPIと結合する方法:より多くのサーブレットAPIオブジェクトにアクセスでき、元の生態の方法を呼び出すことができる. 
(1)サーブレットActionContextの使用
     
 public String execute(){
		//ServletActionContext:         Action       Servlet API      
		//1、  HttpServletRequest:ServletActionContext.getRequest();
		//2、  HttpSession:ServletActionContext.getRequest().getSession();
		//3、  ServletContext
		HttpServletRequest request=ServletActionContext.getRequest();
		HttpSession session=ServletActionContext.getRequest().getSession();
		ServletContext servletContext=ServletActionContext.getServletContext();
		
		System.out.println("execute...");
		return "success";
	}

(2)サーブレットXxxAwareインタフェースの実現
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.util.ServletContextAware;

//    ServletXxxAware        Struts2     Servlet     
//ServletRequestAware:  HttpServletRequest  (    )
//ServletContextAware:  ServletContext  (    )
//ServletResponseAware:  HttpServletResponse  

public class TestServletAware implements ServletRequestAware,ServletContextAware,ServletResponseAware{

	public void setServletRequest(HttpServletRequest request) {
		System.out.println(request);
	}
	private ServletContext context;
	public void setServletContext(ServletContext context) {
		System.out.println(context);
		this.context=context;
	}

	public void setServletResponse(HttpServletResponse response) {
		System.out.println(response);
	}
	public String execute(){
		System.out.println("ServletContext:" + context);
		return "success";
	}
}