基于Struts2模型驱动开发方法研究

2018-12-29 10:01王先国何忠礼王玉娟
发明与创新·大科技 2018年7期

王先国 何忠礼 王玉娟

摘要:本文详细展示了基于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" %>