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オブジェクトを取得するには、次の手順に従います.
セッションオブジェクトの取得:Struts 2では下位レベルのセッションはすべてMapタイプにカプセル化されており、我々はSessionMapと呼ぶが、通常我々が言うセッションはHttpSessionオブジェクトを指し、具体的な取得方法は以下の通りである.
このSessionMapを得るとsessionを読み書きすることができ、元のHttpSessionを得るにはまずHttpService Requestオブジェクトを得てrequestを通過することができる.getSession()を使用して、元のHttpSessionオブジェクトを取得します.一般的にSessionMapはすでにすべての仕事を完成することができて、私たちはもう底のsessionに触れる必要はありません.2.IoC方式は相対的に変化が少なく、具体的な流れは以下の通りである.requestオブジェクトを取得する手順1:ServertRequestAwareインタフェースをactionに実装する手順2:HttpServertRequestタイプのインスタンス変数をactionに宣言する手順3:ServertRequestAwareインタフェースをactionで実装するsetSetServertRequestメソッドは、以下に示すように簡単に実装されます.
Sessionオブジェクトを取得する(この場合のsessionはSessionMapタイプであることに注意):最初のステップ:SessionAwareインタフェースをactionに実装させる第2のステップ:HttpServertRequestタイプのインスタンス変数をactionに宣言する第3のステップ:SessionAwareインタフェースをactionで実装するsetSessionメソッドは、以下に示すように簡単に実装されます.
RequestとSessionの入手に関する別の記事を次に示します.
この例では,インタフェース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でセッションをどのように使用するかの例です.
一般的にプロジェクトでは、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に触れる必要はありません.
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に触れる必要はありません.