2018-05-10 18:57:32
浏览数 (1)
Action类访问Servlet API
- 本人独立博客https://chenjiabing666.github.io
- Struts2并未直接和Servlet API耦合,这是Struts2的一个改良之处。但是对于web应用控制器而言,不访问Servlet API是不可能,因此下面我们介绍三种方式访问Servlet API
ActionContext
- 使用这个可以获取Servlet中
HttpServletRequest
,HttpSession
,ServletContext
其中的方法
static ActionContext getContext()
返回一个实例化ActionContext对象,用于调用下面的方法Object get(key)
返回ActionContext中存放的键值对的值 其实这里获取的是Servlet中HttpServletRequest
对象的属性Object put(key,value)
向ActionContext中存放键值对,同样该方法用于存放HttpServletRequest
的属性Map getSession()
返回一个Map对象,不过这个模拟了HttpSession
的用法,只不过现在向其中存放键值对使用put,获取属性用getMap getApplication()
返回一个Map对象,不过这个模拟了Servlet中的ServletContext
对象的方法。只不过存放和获取属性的方法用的分别是put和getMap getParameters()
获取所有的请求参数,类似调用HttpServletRequest对象的getParameterMap()方法Map setSession(Map session)
直接传入一个Map实例,将其中的kay-value转换成session的属性名和属性值Map setApplication(Map application)
直接传入一个Map实例,将Map实例中的key-value转换成属性名,属性值
使用
- 如果想要使用这个类,当然需要实例化的对象,其中提供了一个获取对象的静态方法,就是上面方法中的第一个
- 我们在Action方法中使用这个设置request域,session域中的属性
代码语言:javascript
复制public class SimpleAction implements Action {
@Override
public String execute(){
ActionContext actionContext=ActionContext.getContext(); //获取实例化对象
//向request域中存放键值对
actionContext.put("name", "jack");
//获取request域中的name值
System.out.println(actionContext.get("name"));
//向session中存放键值对
actionContext.getSession().put("password", "123456");
//向application中存放键值对
actionContext.getApplication().put("a", "b");
return SUCCESS;
}
}
代码语言:javascript
复制 <h1>success</h1>
<h1>request域中的name:${requestScope.name}</h1>
<h1>session域中的password: ${sessionScope.password }</h1>
<h1>application域中的a: ${a }</h1>
总结
- 虽说现在可以向各种域中添加属性获取属性,但是我们不可以移除属性,所以说这种方法不如直接使用Servlet API功能更加强大
实现接口访问Servlet API
- 实现接口访问对一个Action类的污染实在太严重了,这个是不推荐使用的,可以了解一下
可以实现的接口
ServletContextAware
实现该接口的Action可以直接访问用户请求的ServletContext实例ServletRequestAware
实现该接口的Action可以直接访问用户请求的HttpServletRequest实例ServletResponseAware
实现该接口的Action可以直接访问请求的HttpServletResponse实例
ServletActionContext(推荐)
- 使用这个类可以直接获取
HttpServletRequest
,HttpServletResponse
等对象,其功能比第一种更加强大,因此推荐使用这种方式获取Servlet API
方法
PageContext getPageContext()
取得web应用的PageContext对象- HttpServletRequest getRequest()获取HttpServletRequest对象
HttpServletResponse getResponse()
获取HttpServletResponse对象ServletContext getServletContext()
获取ServletContext对象
使用
代码语言:javascript
复制public class SimpleAction implements Action {
@Override
public String execute(){
//获取Request域的对象
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("name", "jack");
//获取Session域的对象
HttpSession session=request.getSession();
session.setAttribute("password", "123456");
//获取Response的对象
HttpServletResponse response=ServletActionContext.getResponse();
return SUCCESS;
}
}
总结
- 直接获取Servlet API中的对象,可以使用的功能更加强大,因此推荐使用