Struts 2 的Action中如何获取request、response、session、application等web元素(1)

来源:互联网 发布:java 接口传递文件流 编辑:程序博客网 时间:2024/05/22 14:23

package com.lx.action;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsStatics;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionContext;

public class ShowAction implements
 SessionAware,RequestAware,ServletRequestAware,ApplicationAware {
 
 //组合list对象,只要放到这里就会自动绑定list
 private List<Object> list ;
 
 //通过注入获得  四大属性范围,推荐 implements SessionAware,RequestAware,ServletRequestAware,ApplicationAware
 //实现这些接口后必须覆盖其接口的setter方法
 private Map session;
 private Map map_request;
 private HttpServletRequest request;
 
 private Map application;
 
 public String execute(){
  System.out.println("进了action了===list");
  //调用service 得到一个集合
  //绑定集合
  list = new ArrayList<Object>();
  list.add("aa");
  list.add("bb");
  list.add("cc");
  
  /* 获取四大属性范围总的来说可分为两大方式:
   * 第一:与Servlet API解耦的访问方式
   * 第二:与Servlet API耦合的访问方式.
   * 推荐使用第一种即通过注入获取
   */
  
  //第一种:与Servlet API解耦的访问方式
  //1、使用ActionContext类的 静态方法获得
  Map map_Session = ActionContext.getContext().getSession();
  map_Session.put("mapSession", "这是通过静态方法获得的session");
  @SuppressWarnings("unused")
  Map map_Request = (Map) ActionContext.getContext().get("request");
  Map map_Application = ActionContext.getContext().getApplication();
  Map map_Response = (Map) ActionContext.getContext().get("response");
  
  /* 调用ActionContext对象的get()方法,传递ServletActionContext.HTTP_REQUEST和
   *  ServletActionContext.SERVLET_CONTEXT及ServletActionContext.HTTP_RESPONSE
   *  键值来得到HttpServletRequest和ServletContext及HttpServletResponse对象*/
  HttpServletRequest req = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
  ServletContext app = (ServletContext) ActionContext.getContext().get(ServletActionContext.SERVLET_CONTEXT);
  HttpServletResponse resp = (HttpServletResponse) ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE);
  
  
  //2通过接口注入来获取request、session和application对象的(推荐)
  //使用注入方法获得session  实现接口 SessionAware
  session.put("session", "这是通过注入获得session");
  
  //使用注入方法获得request  实现接口 ServletRequestAware
  map_request.put("request", "这是通过注入获得request");
  
  //使用注入方法获得application 实现接口 ApplicationAware
  application.put("application", "这是通过注入获得的application");
  
  
  //---------------------------------------
  
  //第二种、通过与Servlet API耦合的访问方式获得真正的request、resposne、session.
  //3、使用ServletActionContext的静态方法获得真正的request、resposne、session
  //(与Servlet API耦合的访问方式获取四大属性范围)
  HttpServletRequest request = ServletActionContext.getRequest();
  HttpServletResponse response = ServletActionContext.getResponse();
  HttpSession session = request.getSession();
  ServletContext application = ServletActionContext.getServletContext();
  
  /* (2)调用ActionContext对象的get()方法,传递StrutsStatics.HTTP_REQUEST和
   *  StrutsStatics.HTTP_RESPONSE键值来得到HttpServletRequest和
   *  HttpServletResponse对象*/
  HttpServletResponse respo = (HttpServletResponse)ActionContext.getContext().get(StrutsStatics.HTTP_RESPONSE);  
  HttpServletRequest  reque = (HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST); 
  
  return "success";
 }
 
 public List getList() {
  return list;
 }
 public void setList(List list) {
  this.list = list;
 }
 //覆盖接口 (SessionAware) 的方法  注入获得map_session
 public void setSession(Map arg0) {
  //这个arg0 参数就是session
  this.session=arg0;
 }
 //覆盖 接口(RequestAware) 的方法  注入获得map_request
 public void setRequest(Map arg0) {
  this.map_request=arg0;
 }
 //覆盖 接口(ServletRequestAware) 的方法
 public void setServletRequest(HttpServletRequest arg0) {
  this.request=arg0;
 }

 //覆盖 接口 (ApplicationAware) 的方法
 public void setApplication(Map arg0) {
  this.application = arg0;
 }
 
}

 

原创粉丝点击