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)

你可能感兴趣的:(servlet)