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

2018-11-01 03:50王先国何忠礼王玉娟
发明与创新 2018年25期
关键词:拦截器源代码表单

王先国 何忠礼 王玉娟

中山大学新华学院 广东 东莞 523133

引言

目前,基于Struts2的模型驱动开发方法十分流行,但很多开发人员对其开发规范、工作原理、核心拦截器的组成和拦截机制知之甚少,这就导致开发效率低,且开发出的软件质量差。基于此,本文详细描述了Struts2的模型驱动工作原理,通过实例演示了基于Struts2的模型驱动的开发步骤,为开发人员提供一个模型驱动的开发示范。

一、Struts2工作原理2

1.Struts2体系结构

Struts2是一个标准的MVC框架,它简化了Web程序的开发过程,并且降低了程序的耦合度。Struts2体系结构如图1所示。

StrutsPrepareAndExcute-Filter(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 ServerPages(JSP)、FreeMarker等[1]。

图1 Struts2的体系结构

2.Struts2执行流程

Struts2的模型驱动工作流程如图2所示。

图2 Struts2模型驱动工作流程图

客户端向Struts2控制器发送一个Action请求,比如,表单提交;Struts2控制器调用属性拦截器(params),属性拦截器获取表单请求参数,并将表单参数封装为Model(一个普通的Bean);当执行流程到达Action时,Struts2控制器调用模型拦截器(ModelDriven),模型拦截器获取模型对象,并将模型对象压入值栈的栈顶;Struts2控制器根据Action执行后返回的结果值(逻辑视图),调用相应的JSP页面;JSP页面将结果返回(response)给客户[2]。

二、模型驱动开发示范

1.定义模型

这里的模型就是一个普通的Bean(People对象),在模型中必须定义setter和getter方法。下面是People类的源代码:

packagewang;

publicclassPeople{

Stringname;//本类中的属性名必须与表单中的属性name的值一致

intage; //本类中的属性名必须与表单中的属性name的值一致

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

} }

2.定义Action

使用模型驱动时,继承ActionSupport类或者实现接口Action时,必须实现模型驱动接口ModelDriven。在控制器中,必须重写execute()方法 和 getModel()方法[3]。 下面是PeopleAction的源代码。

packagewang.action;

importwang.People;

importcom.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

publicclassPeopleActionextendsActionSupportimplementsModelDriven<People>{

Peoplepeople=newPeople ();// 必须初始化

publicStringexecute()throwsException{

returnSUCCESS; //此方法必须重写

}

publicObjectgetModel(){//此方法必须重写

returnpeople;

} }

3.建立请求Action的表单

建立一个向Action提交请求的表单页面,下面是请求页面(addPeople.jsp)的源代码。

<%@taglibprefix="s"uri="/struts-tags"%>

<html>

<body>

<h1>基于Struts2模型驱动</h1>

<s∶formaction="peopleAction">

<s∶textfieldname="name"label="姓名"/>

<s∶textfield name="age"label="年龄 "value=""/>

<s∶submit/>

</s∶form>

</body>

</html>

4.建立响应页面

建立一个向Action提交请求的表单页面,下面是响应页面(success.jsp)的源代码。

<%@taglibprefix="s"uri="/struts-tags"%>

<html>

<body>

<h1>基于Struts2模型驱动</h1>

姓名∶<s∶propertyvalue="name"/><br>

年龄∶<s∶propertyvalue="age"/><br>

</body>

</html>

5.配置文件(struts.xml)

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEstrutsPUBLIC

"-//Apache Software Foundation//DTD StrutsConfiguration2.0//EN"

"http∶//struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<constant name="struts.dev-Mode"value="true"/>

<package name="default"namespace="/"extends="struts-default">

<actionname="peopleAction"class="wang.action.PeopleAction">

<result name="success">/success.jsp</result>

</action>

</package>

</struts>

三、结语

本文详细展示了基于Struts2的模型驱动的工作原理、程序执行流程、开发规范,用一个完整的实例,清晰地再现了程序开发的每个环节、步骤和规范,为程序开发人员提供了一个基于Struts2的模型驱动的样板,降低了开发过程中出现的错误率,极大地提高了程序开发效率。

猜你喜欢
拦截器源代码表单
多动能拦截器协同制导规律的研究及仿真
英国MARSS公司推出新型反无人机拦截器
以色列“天锁”公司展出新式反无人机拦截器
电子表单系统应用分析
基于TXL的源代码插桩技术研究
基于图表示和匹配的表单定位与提取
软件源代码非公知性司法鉴定方法探析
浅谈网页制作中表单的教学
基于语法和语义结合的源代码精确搜索方法
揭秘龙湖产品“源代码”