今天弄了半天终于明白如何在Action中访问Servlet API了,唉......感觉没有Struts1方便,不过为了解偶也是值得的,呵呵
5.访问Servlet API
前面曾经说过,用户所写的Action并不是真正处理用户请求的Action实例,而仅仅是Struts2的Action代理的代理目标,这是因为它没有和Servlet API直接关联,根本无法处理用户的请求,那在用户的Action中又该如何访问Servlet API呢?
1). Struts2提供了一个ActionContext类,Struts2的Action可以通过此类来访问Servlet API,以下给出最为常用的访问ServletContext、HttpSession,HttpServletRequest的代码:
// 访问ServletContext
ActionContext.getContext().getApplication().get(key); // 取值
ActionContext.getContext().getApplication().put(key, value); // 设值
// 访问HttpSession
ActionContext.getContext().getSession().get(key);
ActionContext.getContext().getSession().put(key, value);
// 访问HttpServletRequest
ActionContext.getContext().get(key);
ActionContext.getContext().put(key, value);
顺便在此给出使用OGNL访问上述范围内的属性值:
${applicationScope.属性名}
${sessionScope.属性名}
${requestScope.属性名}
2). 除了上述所提到的使用ActionContext类来访问Servlet API外,Struts2还提供了以下接口可以直接访问Servlet API:
l ServletContextAware
public void setServletContext(ServletContext context);
l ServletRequestAware
public void setservletRequest(HttpServletRequest request);
l ServletResponseAware
public void setservletResponse (HttpServletResponse response);
3). 此外Struts2提供了一个更为简单的ServletActionContext类,这个类包含了如下几个方法可用于访问Servlet API:
static PageContext getPageContext();
static HttpServletRequest getRequest();
static HttpServletResponse getResponse();
static ServletContext getservletContext();
注意:在Struts1中可以使用response对象向页面直接输出内容,但在Struts2中这种方法是不可能生成服务器响应的,即是说类似response.getWriter().print(“cfanboy”);这样的代码在Struts2中是不起作用的!