Struts2中Action访问Servlet API的三种方法

Struts2的Action并未直接与任何Servlet API耦合,这是Struts2的一个改良之处,由于Action类再也不与Servlet API耦合,能更轻松的测试该Action。但如何访问? 服务器

Web应用中一般须要访问的Servlet API就是HttpServletRequest、HttpSession、ServletContext这3个类,分别表明JSP内置对象中的request、session、application。 session

方法一:(通常推荐使用,IOC方式,只能得到request,而response则得不到) app

Struts2提供了ActionContext类,经过ActionContext类访问Servlet API。 测试

下面是ActionContext类中包含的几个经常使用方法。 spa

一、public Object get(Object key):取得HttpServletRequest中key的值; 对象

二、void put(String key,Object value):设置HttpServletRequest中key的值为value; 接口

三、public Map getApplication():获取封装了ServletContext的Map对象; get

四、void setApplication(Map application):设置ServletContext实例; io

五、static ActionContext getContext():静态方法,获取系统的ActionContext实例; request

六、Map getParameters():相似于HttpServletRequest中的getParametersMap方法;

七、public Map getSession():获取封装了HttpSession的Map对象;

八、void setSession(Map session):直接传入一个Map实例,将该Map实例里的key-value对转换为session的属性名和属性值;

方法二:(不推荐,麻烦,非IOC方式,与Servlet API耦合大)

虽然Struts2提供了ActionContext来访问Servlet API,但这种访问不能直接得到Servlet API,为了在Action中直接访问Servlet API,Struts2还提供了如下接口。

一、ServletContextAware:实现该接口的Action能够直接访问Web应用的ServletContext实例;

二、ServletRequestAware:实现该接口的Action能够直接访问用户请求对象的HttpServletRequest的实例;

三、ServletResponseAware:实现该接口的Action能够直接访问服务器响应的HttpServletResponse的实例;

方法三:(非IOC方式,强烈推荐使用)

Struts2还提供了一个ServletActionContext,其静态方法有:getPageContext()、getRequest() 、getResponse()、getServletContext()。

一、HttpServletRequest request=ServletActionContext.getRequest();

二、HttpServletResponse response=ServletActionContext.getResponse();

三、request.getSession().setAttribute("username","admin");

四、request.setAttribute("password","123456");

相关文章
相关标签/搜索