Struts 2中访问Servlet API的几种方法小结
1、使用ActionContext Action运行期间所用到的数据都保存在ActionContext中,例如session、客户端提交的参数等,ActionContext是Action的一个上下文对象。 ActionContext actionContext = ActionContext.getContext(); 通过如上方法创建actionContext对象,然后使用actionContext对象提供的一些方法来实现相应的功能。例如,调用getSession()方法可以获得HttpSession对象。但是,这种方法只能使用少部分的Servlet API。 Map<String, Object> request=(Map<String, Object>) ActionContext.getContext().get("request"); request.put("address", "绵阳"); 2、实现相应的aware接口 在Action中实现如下的一些接口: org.apache.struts2.util.ServletContextAware:实现该接口的Action可以访问ServletContext对象。 org.apache.struts2.interceptor.ServletRequestAware:实现该接口的Action可以访问ServletRequest对象。 org.apache.struts2.interceptor.ServletResponseAware:实现该接口的Action可以访问ServletResponse对象。 org.apache.struts2.interceptor.SessionAware:实现该接口的Action可以访问HttpSession对象。 看下面的例子: package action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.interceptor.ServletRequestAware; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport implements ServletRequestAware{ private String name; // 定义request对象 private HttpServletRequest request; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String execute() throws Exception { HttpSession session = request.getSession(); session.setAttribute("user", this.name); return SUCCESS; } // 继承并实现该方法 @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } } 可以实现其中的某一个接口,也可以使用全部的接口。这种方法弊端是实现起来比较麻烦,既要实现接口,还要实现接口里的set方法。 3、使用ServletActionContext ServletActionContet提供了一系列的静态方法,可以获得HttpServletRequest、HttpServletResponse等等,看下面的例子: package action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String execute() throws Exception { HttpServletRequest request = ServletActionContext.getRequest(); HttpSession session = request.getSession(); session.setAttribute("user", this.name); return SUCCESS; } }