3、Action中访问Servlet API
1、通过ActionContext访问Servlet API
ActionContext类提供了一个静态方法getContext(),该方法返回一个ActionContext的实例。该实例提供了一些访问Servlet API的方法,通常的方法是
返回值 |
方法名 |
功能描述 |
ActionContext | getContext() | 获取系统的ActionContext实例 |
Map | getSession() | 返回一个Map实例,该对象存入HttpSession实例。 |
void | setSession(Map session) | 直接传入一个Map实例,将实例总得key、value对应转换成session的属性名、属性值 |
Map | getApplication() | 返回一个Map对象,该对象存入ServletContext实例 |
void | setApplication() | 直接传入一个Map实例,将实例中的key、value对应转换成application的属性名、属性值 |
Map | getParameters() | 获得所有请求参数。类似于调用HttpServletRequest对象的getParameterMap方法 |
实际上Struts2是把Map对象模拟成ServletContext对象和HttpSession对象,从而将Servlet API从Action中分离出来。
ActionContext ctx = ActionContext.getContext(); //获得Session Map session = ctx.getSession(); //获得Application Map application = ctx.getApplication();
在通常的web开发中Request和Response对象比较常见,但在Struts2框架中由于Action能与JSP页面进行数据交互,所以通常都不会用到这两个对象。如果想在Struts2程序中用到这两个对象,也有解决方法。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 ServletContet sc = ServletActionContext.getServletContext();
2、通过实现*Aware接口获得Servlet API
比如在某个Action中要获得Session对象,就可以让该Action实现SessionAware接口。当然除了获得Session外,我们还可以获得其他对象:
实现接口名称 |
获得Servlet对象的方法 |
ApplicationAWare | void setApplication(Map application) |
CookiesAware | void setApplication(Map cookies) |
RequestAware | void setRequest(Map request) |
ServletRequestAware | void setApplication(HttpServletRequest request) |
ServletResponseAware | void setApplication(HttpServletResponse response) |
SessionAware | void setSession(Map session) |