一、使用ActionContext访问Servlet API
strtus2提供了一个ActionContext类,该类别称为Action上下文或者Action环境,Action可以通过该类来访问最常用的Servlet API,该类提供了常用的方法在这做简单介绍:
>getContext();静态方法,获取当前对象的ActionContext实例。
>getSession();返回一个Map对象,该对象模拟了session作用域。
>getApplication();返回一个Map(),该对象模拟了application作用域。
>get(String key);对该方法传入"request"参数,即可返回一个Object对象,该对象模拟了request作用域。
>getParameters();返回一个map()对象,该对象中保存了浏览器上传的参数。
struts2不再依赖HttpServletRequest这样的传统Servlet API类型来获取request,session,application对象,这种方式称“解耦合”;
// action方法中解耦合方式获取request对象
Map<String ,Object> request = (Map<String,Object> ActionContext.getContext().get("request"));
// action方法中或取session作用域对象
Map<String,Object> session = ActionContext.getContext().getSession();
// action方法中获取application对象作用域
Map<String,Object> application = ActionContext().getContext().getApplication();
二、使用Ioc的方式访问Servlet API
action类中只保留使用这些对象的代码,而获取对象的代码有struts2来实习,struts2获取这些对象后,再把这些对象注入Action类中,Action类即可使用这些对象,这种实现的思想就是著名的Ioc.
package action;
import java.util.Map;
import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
public class UserActions implements RequestAware, SessionAware,
ApplicationAware {
private Map<String ,Object> request;
private Map<String,Object> session;
private Map<String,Object> application;
@Override
public void setApplication(Map<String, Object> arg0) {
this.request = request;
}
@Override
public void setSession(Map<String, Object> arg0) {
this.session = session;
}
@Override
public void setRequest(Map<String, Object> arg0) {
this.application = application;
}
}
说明:
上面的这段代码中,Action实现了RequestAware,SessionAware,ApplicationAware接口,这样Struts2就可以为该Action注入request,session,application对象了,以session为例子,struts2取得session对象,当UserAction对象被创建后,Struts2会判断UserAction是否实现了SessionAware接口,若实现了,就会调用UserAction的setSession()方法,并把session作为参数传入该方法,这样就实现了session的注入。
三、使用耦合方式访问Servlet API
ActionContext类没有包装所有的Servlet API,有些功能的实现还是需要原始是Servlet API才能实现,如获取客户端的响应,HttpServletResponse对象,不过strut2提供了ServletActionContext来获取原始是Servlet API.
public String login() {
Map<String, Object> map = new HashMap<String, Object>();
boolean isLogin = (Boolean) map.get("isLogin");
if (isLogin) {
/**
* 耦合方式
*/
ServletContext sc=ServletActionContext.getServletContext();//得到Servlet上下文
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
session.setAttribute("user", map.get("user"));
return SUCCESS;
} else {
return INPUT;
}
}