Struts2 提供了三种方式访问本地Servlet API
-
ActionContext【==推荐==、非耦合】
-
XxxAware接口【==推荐==、非耦合】
-
ServletActionContext【==不推荐==、耦合】
1. ActionContext
ActionContext是Action执行的上下文对象,在ActionContext中保存了Action执行所需要的所有对象,包括parameters,request,session,application等。
方法声明 | 方法描述 |
---|---|
void put(String key,Object object) | 将key-value键值对存放在ActionContext种。模拟Servlet API种HttpServletRequst种的setAttribute()方法。 |
Object get(String key) | 通过key来查找当前ActionContext中的值 |
Map<String,Object> getApplication() | 返回一个Application级的Map对象 |
static ActionContext getContext() | 获取当前线程的ActionContext对象 |
Map<String Object> getParamters() | 返回一个包含所有HttpServletRequest参数信息的Map对象 |
Map<String,Object> getSession() | 返回一个Map类型类型的HttpSession对象 |
void setApplication(Map<String,Object> application) | 设置Applicaton上下文 |
voide setSession(Map<String,Object> session) | 设置一个Map类型的Session值 |
ActionContext类访问Servlet API的常用方法,要访问Servlet API,可以通过如下方式进行,具体示例代码如下:
ActionContext context = ActionContext.getContext(); context.put("name", "张三"); context.getApplication().put("name", "李四"); context.getSession().put("name", "王五");
2. XxxAware 接口
Struts2框架提供了ActionContext类来访问Servlet API,虽然这种方法可以访问Servlet API,但是无法直接获得Servlet API实例。为了在Action中直接访问Servlet API,Struts2还提供了一系列接口,具体如下:
-
ServletRequestAware:实现该接口的Action可以直接访问Web应用的HttpServletRequest实例。
-
ServletResponseAware:实现该接口的Action可以直接访问Web应用的HttpServletResponse实例。
-
SessionAware:实现该接口的Action可以直接访问Web应用的HttpSession实例。
-
ServletContextAware:实现该接口的Action可以直接访问Web应用的ServletContext实例。
public class ProductAction extends ActionSupport implements ServletRequestAware { HttpServletRequest request; public String findById() { String pid = request.getParameter("pid"); return SUCCESS; } @Override public void setServletRequest(HttpServletRequest request) { this.request = request; } }
3. ServletActionContext
为了直接访问Servlet API,Struts2框架还提供了ServletActionContext类,该类包含了几个常用的静态方法,具体如下:
-
static HttpServletRequest getRequest():获取Web应用的HttpServletRequest对象
-
static HttpServletResponse getResponse():获取Web应用的HttpServletResponse对象
-
static ServletContext getServletContext():获取Web应用的ServletContext对象
-
static PageContext getPageContext():获取Web应用的PageContext对象
3.1 HttpServletRequest
HttpServletRequest request = ServletActionContext.getRequest();
3.2 HttpServletResponse
HttpServletResponse response = ServletActionContext.getResponse();
3.3 ServletContext
ServletContext context = ServletActionContext.getServletContext();
3.4 PageContext
PageContext pageContext = ServletActionContext.getPageContext();