1 非IoC方式
要获得这几个对象,关键Struts 2.0中com.opensymphony.xwork2.ActionContext类。我们可以通过它的静态方法getContext()获取当前Action的上下文对象。
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
如果你只是想访问session的属性(Attribute),你也可以通过ActionContext.getContext().getSession()获取或添加session范围(Scoped)的对象。
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
publicclass NonIocServlet extends ActionSupport {
      private String message;
      public String getMessage() {
            return message;
      }
      @Override
      public String execute() {
            ActionContext.getContext().getSession().put("msg", "Hello World from Session!");
            HttpServletRequest request = ServletActionContext.getRequest();
            HttpServletResponse response = ServletActionContext.getResponse();
            HttpSession session = request.getSession();
            // ActionContext.getContext().getSession();
            StringBuffer sb =new StringBuffer("Message from request: ");
            sb.append(request.getParameter("msg"));
            sb.append("<br>Response Buffer Size: ");
            sb.append(response.getBufferSize());
            sb.append("<br>Session ID: ");
            sb.append(session.getId());
            message = sb.toString();
            return SUCCESS;
      }
}
2 IoC方式
要使用IoC方式,我们首先要告诉IoC容器(Container)想取得某个对象的意愿,通过实现相应的接口做到这点。
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
publicclass IoCServlet extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {
      private String message;
      private Map att;
      private HttpServletRequest request;
      private HttpServletResponse response;
      public String getMessage() {
            return message;
      }
      publicvoid setSession(Map att) {
            this.att = att;
      }
      publicvoid setServletRequest(HttpServletRequest request) {
            this.request = request;
      }
      publicvoid setServletResponse(HttpServletResponse response) {
            this.response = response;
      }
      @Override
      public String execute() {
            att.put("msg", "Hello World from Session!");
            HttpSession session = request.getSession();
            StringBuffer sb =new StringBuffer("Message from request: ");
            sb.append(request.getParameter("msg"));
            sb.append("<br>Response Buffer Size: ");
            sb.append(response.getBufferSize());
            sb.append("<br>Session ID: ");
            sb.append(session.getId());
            message = sb.toString();
            return SUCCESS;
      }
}
--转自
