Struts2的Action没有与任何Servlet API耦合,这是Struts2的一个设计良好之处,由于Action类不再与Servlet API耦合,从而可以更轻松地测试该Action。
但对于Web应用的控制器而言,不访问Servlet API几乎是不可能的,例如跟踪HTTP Session。Struts2框架提供了一种更轻松的方式来访问Servlet API。Web应用通常需要访问的Servlet API就是HttpServletRequest,HttpSession和ServletContext,这3个接口分别代表JSP内置对象中的request,session和application。
Struts2提供了一个ActionContext类,Struts2的Action可以通过该类来访问Servlet API。下面是ActionContext类中包含的几个常用方法:
| 方法 | 说明 |
| static ActionContext getContext( ) | 获取系统的ActionContext实例 |
| Object get(Object key) | 该方法类似于调用HttpServletRequest的getAttribute(String name)方法 |
| Map getSession( ) | 返回的map对象模拟了HttpSession实例 |
| Map getApplication( ) | 返回的map对象模拟了该应用的ServletContext实例 |
| Map getParameters( ) | 获取所有的请求参数。类似于调用HttpServletReuqest的 getParameterMap( )方法 |
| void setSession(Map session) | 直接传入一个map实例,map的key-value对转换成 session的属性名和属性值 |
| void setApplication(Map application) | 直接传入一个map实例,map的key-value对转换成 application的属性名和属性值 |
public class Login extends ActionSupport{
...
public String execute(){
if(getUsername().equals("scott")&& getPassword().equals("tiger")){
ActionContext.getContext().getSession().put("username",getUsername());
return "success";
}
return "login";
}
}然后在ok.jsp中有如下代码:
login success! welcome ${username}...访问程序时,EL表达式可以输出正确的值,这说明ActionContext.getContext( ).getSession( ).put("username",getUsername( ))确实往session里放入了数据,也即通过ActionContext访问到了Servlet API。
本文介绍了Struts2框架如何通过ActionContext类访问Servlet API,包括HttpServletRequest、HttpSession和ServletContext等核心组件。提供了具体示例代码展示如何在Action类中使用这些方法。
1215

被折叠的 条评论
为什么被折叠?



