Struts2提供了两种方式来访问ServletAPI。
一种是通过ActionContext访问Servlet API;
另一种是通过实现*Aware()接口来获得Servlet API。
通过ActionContext访问Servlet API
ActionContext类提供了一个静态方法getContext(),该方法返回一个ActionContext的实例。该方法返回一个ActionContext的实例。这个实例提供了一些访问Servlet API的方法,学用的方法及其功能如下:
ActionContext getContent()
获取系统的ActionContext实例
Map getSession()
返回一个Map对象,该对象存入HttpSession实例
void setSession(Map session)
直接传入一个Map实例,将该实例中的key、value对应转换成session的属性名、属性值
Map getApplication()
返回一个Map对象,该对象存入ServletContext实例
void setApplication(Map application)
直接传入一个Map实例,将实例中的key、value对应转换成application的属性名、属性值
Map getParameters()
获得所有的请求参数。类似于调用HttpServletRequest对象的getParameterMap方法
通过这些方法,可以得到上下文和会话实例都是Map类型的,并没有得到ServletContext和Session,实际上Struts2把Map对象模拟成了ServletContext对象和HttpSession对象,从而将Servlet API从Action中分离出来。
eg:
ActionContext ac = ActionContext.getContext();
//获得Session
Map session = ac.getSession();
//获得Application
Map application = ac.getApplication()
通常web开发中Request和Response对象比较常见,但在Struts2框架中由于Action能直接与JSP页面进行数据交互,所以通常都不会用到这两个对象.如想想在Struts2中使用这两个对象,可以通过ServletActionContext类,在这个类中包含了一些方法,能够获得和设置request和response对象,并且还能获得ServletContext对象。常用方法如下:
HttpServletRequest getRequest()
获得Web应用的HttpServletRequest对象
HttpServletResponse getResponse()
获得Web应用的HttpServletResponse对象
ServletContext getServletContext()
获得Web应用的ServletContext对象
例如:
//获得HttpServletRequest
HttpServletRequest request = ServletActionContext.getRequest();
//获得HttpServletResponse
HttpServletResponse response = ServletActionContext.getResponse();
//获得HttpSession
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
//获得ServletContext
ServletContext sc = ServletActionContext.getServletContext();
通过实现*Aware()接口来获得Servlet API
让Action实现SessionAware接口。除了获得Session外,还可以获得其它对象,如下:
实现接口名称 | 获得Servlet对象 |
Application | void setApplication(Map appliction) |
CookiesAware | void setCookiesMap(Map cookies) |
RequestAware | void setRequest(Map request) |
ServletRequestAware | void setServletRequest(HttpServletRequest request) |
ServletResponseAware | void setServletResponse(HttpServletResponse response) |
SessionAware | void setSession(Map session) |
public class TestSession implements SessionAware {
private Map session;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void setSession(Map session) {
this.session = session;
}
public String execute() throws Exception {
if (user != null) {
session.put("user",user)
return SUCESS;
} else {
return ERROR;
}
}
}