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;
}
}