基于Struts2模型驱动开发方法研究
2018-12-29王先国何忠礼王玉娟
王先国 何忠礼 王玉娟
摘要:本文详细展示了基于Struts2的体系结构、模型驱动工作原理、程序交互流程,同时,用一个完整的实例再现了程序开发的每个环节、步骤与规范,为开发人员提供了一个基于Struts2的模型驱动开发示范。
关键词:Struts2;模型驱动;拦截器;Action
引言
目前,基于Struts2的模型驱动开发方法十分流行,但很多开发人员对其开发规范、工作原理、核心拦截器的组成和拦截机制知之甚少,这就导致开发效率低,且开发出的软件质量差。基于此,本文详细描述了Struts2的模型驱动工作原理,通过实例演示了基于Struts2的模型驱动的开发步骤,为开发人员提供一个模型驱动的开发示范。
一、 Struts2工作原理
1.Struts2体系结构
Struts2是一个标准的MVC框架,它简化了Web程序的开发过程,并且降低了程序的耦合度。Struts2体系结构如图1所示。
StrutsPrepareAndExcuteFilter(Struts2核心控制器):它是Struts2的调度中心,由它決定是否处理客户的Action请求。
Interceptor(拦截器):拦截器是Stuts2 的基石,它是一些无状态的类,拦截器可以自动拦截客户发送的Action请求。客户的所有Action请求,在到达Action之前,首先要执行一序列拦截器,在图1中,客户的Action请求到达Action以前,先要执行拦截器1、拦截器2、拦截器3。
Action(控制器):在图1中,客户的请求经过拦截器1、拦截器2、拦截器3后,才到达Action控制器。Action是程序员编写的控制器,用来处理客户的Action请求。
Resul(结果)t:Action控制器执行完后,返回一个字符串,这个字符串就是逻辑视图。Result根据逻辑视图的值,去调用相应的物理视图。Struts2中支持多种视图类型,比如Java Server Pages(JSP)、FreeMarker等[1]。
2.Struts2执行流程
Struts2的模型驱动工作流程如图2所示。
客户端向Struts2控制器发送一个Action请求,比如,表单提交;Struts2控制器调用属性拦截器(params),属性拦截器获取表单请求参数,并将表单参数封装为Model(一个普通的Bean);当执行流程到达Action时,Struts2控制器调用模型拦截器(ModelDriven),模型拦截器获取模型对象,并将模型对象压入值栈的栈顶;Struts2控制器根据Action执行后返回的结果值(逻辑视图),调用相应的JSP页面;JSP页面将结果返回(response)给客户[2]。
二、模型驱动开发示范
1.定义模型
这里的模型就是一个普通的Bean(People对象),在模型中必须定义setter和getter方法。下面是People类的源代码:
package wang;
public class People{
String name;//本类中的属性名必须与表单中的属性name的值一致
int age; //本类中的属性名必须与表单中的属性name的值一致
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2.定义Action
使用模型驱动时,继承ActionSupport类或者实现接口Action时,必须实现模型驱动接口ModelDriven。在控制器中,必须重写execute()方法和getModel()方法[3]。下面是PeopleAction的源代码。
package wang.action;
import wang.People;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class PeopleAction extends ActionSupport implements ModelDriven
People people = new People();//必须初始化
public String execute() throws Exception {
return SUCCESS; //此方法必须重写
}
public Object getModel() { //此方法必须重写
return people;
}
}
3.建立请求Action的表单
建立一个向Action提交请求的表单页面,下面是请求页面(addPeople.jsp)的源代码。
<%@ taglib prefix="s" uri="/struts-tags" %>