1、Action实现
Structs2在大多数情况下,会继承ActionSupport类,并重写类中的execute()方法(这取决于action配置中的method属性,如果是默认的情况下,执行的是execute方法),直接使用Action来封装HTTP请求参数,因此Action类里还应该包含于请求参数相对应的属性,以及其setter和getter方法。
下面是一个Action类的基本代码框架:
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {
public String execute() throws Exceptions{
//执行函数
return SUCCESS;//SUCCESS="success"
}
}
在execute方法内部,我们需要实现的功能如下:
- 收集用户传递过来的数据。//拦截器实现
- 把收集来的数据转换成逻辑层接受的类型和格式。
- 调用逻辑层接口,来执行业务逻辑处理。//调用或直接写在execute中
- 准备下一个页面所需要的数据,存放在相应位置。
- 转向下一个页面。
在Struts2中,Action已经与Servlet API完全分离,但我们在实现业务逻辑的过程中,经常需要访问到Servlet中的对象,如session,application等。
通常访问的Servlet Api是HttpServletRequest,HttpSession,ServletContext这三个接口,分别对应JSP的内置对象request,session和application。
在Struts2框架中访问Servlet API可以直接通过对ActionContext类访问,也可以通过xxxAware接口访问。
1.1 通过ActionContext类访问。
ActionContext是Action执行时的上下文,可以看做一种容器,存放的是Action运行期间所有用到的数据,例如session会话和客户端提交的参数。
ActionContext context = ActionContext.getContext();
context.put("name","lqy");//在context对象中放key-value键值对
context.getSession().put("name","lqy");//在session对象中放key-value键值对
context.getApplication.put("name","lqy");//在application对象中放键值对
Map getApplication();//返回Map类型的application
Map getSession();//返回Map类型的session
Map getParameter();//返回获得所有请求参数的Map对象