閱讀759 返回首頁    go 技術社區[雲棲]


Struts2中操作request,session,application的方法

 

Map類型——request,session,application

真實類型——HttpServletRequest,HttpSession,ServletContext

Map類型是Struts對真實類型的一個封裝,會將真實類型映射到Map類型中

 

取得上述元素有以下4種方法

1  通過ActionContext來訪問request,session,application對象

2  通過實現RequestAware、SessionAware、ApplicationAware接口來訪問request,session,application對象(常用)

3  通過ServletActionContext來訪問request,session,application對象

4  通過實現ServletRequestAware接口來訪問request,session,application對象

 

馬士兵老師對這裏的內容講得非常詳細,結合馬士兵老師的源碼來看一下:

 

第一種方法

package com.bjsxt.struts2.user.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

 

public class LoginAction1 extends ActionSupport {
 
 private Map request;
 private Map session;
 private Map application;
 
 public LoginAction1() {
  request = (Map)ActionContext.getContext().get("request");
  session = ActionContext.getContext().getSession();
  application = ActionContext.getContext().getApplication();
 }
 
 public String execute() {
  request.put("r1", "r1");
  session.put("s1", "s1");
  application.put("a1", "a1");
  return SUCCESS;
 }


}
通過取得Struts的Action的上下文來取得上述三種元素,map類型的。

 

方法二

package com.bjsxt.struts2.user.action;

import java.util.Map;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction2 extends ActionSupport implements RequestAware,SessionAware, ApplicationAware {
 
 private Map<String, Object> request;
 private Map<String, Object> session;
 private Map<String, Object> application;
 
 // IOC 

 public String execute() {
  request.put("r1", "r1");
  session.put("s1", "s1");
  application.put("a1", "a1");
  return SUCCESS;
 }

 

 @Override
 public void setRequest(Map<String, Object> request) {
  this.request = request;
 }

 

 @Override
 public void setSession(Map<String, Object> session) {
  this.session = session;
 }

 

 @Override
 public void setApplication(Map<String, Object> application) {
  this.application = application;
 }
 
}

通過Struts注入進來三個元素,map類型。

 

前台jsp頁麵獲取後台值的方式

<s:property value="#request.r1> | <%=request.getAttribute("r1")%>

<s:property value="#session.s1"/> | <%=session.getAttribute("s1")%>

<s:property value="#application.a1"/> | <%=application.getAttribute("a1")%>

 

 

 

方法三

package com.bjsxt.struts2.user.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction3 extends ActionSupport {
 
 private HttpServletRequest request;
 private HttpSession session;
 private ServletContext application;
 
 public LoginAction3() {
  request = ServletActionContext.getRequest();
  session = request.getSession();
  application = session.getServletContext();
 }
 
 public String execute() {
  request.setAttribute("r1", "r1");
  session.setAttribute("s1", "s1");
  application.setAttribute("a1", "a1");
  return SUCCESS;
 }
 
}

取得的是真實的類型

 

 

 

方法四

package com.bjsxt.struts2.user.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction4 extends ActionSupport implements ServletRequestAware {
 
 private HttpServletRequest request;
 private HttpSession session;
 private ServletContext application;
 
 
 public String execute() {
  request.setAttribute("r1", "r1");
  session.setAttribute("s1", "s1");
  application.setAttribute("a1", "a1");
  return SUCCESS;
 }

 

 @Override
 public void setServletRequest(HttpServletRequest request) {
  this.request = request;
  this.session = request.getSession();
  this.application = session.getServletContext();
 }
 
}

 

依賴注入,取得的是真實類型

 

 

最後更新:2017-04-02 22:16:02

  上一篇:go Js中的this和window.event.srcElement
  下一篇:go 文本框獲得失去焦點——js和jquery方法的對比