轻量级Web表单数据封装框架实现

时间:2022-06-09 03:32:23

轻量级Web表单数据封装框架实现

摘要:在使用面向对象(OOP)的思想进行JSP开发时,表单数据转化为JavaBean对象传统的方法为使用jsp:useBean标签和通过HttpServletRequest类的getParameter和JavaBean的set方法来实现,目前流行的web框架中(struts1、struts2)集成了JavaBean对象对表单数自动封装。以上二个方面实现对JSP页面数据封装存在各自的弊端,该文综合以上两种方式实现了JavaBean对象自动对JSP页面,并不依赖与任何web框架。

关键词:面向对象编程;JavaBean;封装;反射;jsp标签

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2009)05-1116-02

The Lightweight Framework of Encapsulating Web Data to Object

WU Han-wen1, HUANG Jun-le2

(1.Department of Neurosurgery, Wuhan General hospital, Guangzhou Command, PLA, Wuhan 430070, China; 2.Wuhan Institute of Marine Electric Propulsion CSIC, Wuhan 430064, China)

Abstract: During the JSP software development with OOP method, using jsp:useBean tag and HttpServletRequest’s set and JavaBean’s get method to implement encapsulation jsp datas and JavaBean traditionally, the popular web frameworks(such as struts、webwork)implement the encapsulation between jsp datas and JavaBean automatically. This article discusses the method which encapsulates the JavaBean from jsp automatically, and don’t depend on any web frameworks.

Key words: OOP; JavaBean; encapsulation; reflect; jsp tag

1 引言

在使用面向对象(Object Oriented Programming)思想进行web开发时,浏览器向服务器提交数据并封装到Java对象是一个非常频繁,传统的方式采用jsp标签-jsp:useBean实现浏览器数据封装到Java对象()中,使用这种方式只能封装简单字符型的数据,不能封装复杂的数据类型(日期、布尔)。针对此种封装方式的弊端,在当前流行的web框架中(struts1、struts2、webwork)[1]实现了复杂数据的封装,但是此种方式与框架集成,脱离web框架将无法实现J页面数据到Java对象封装,且此类框架中不能实现对自定义数据对象封装。针对以上二中方式的弊端,本文提出了基于JSP标签实现对浏览器中任何类型数据到Java对象封装,使用了JSP标签、Java反射机制等技术。

2 轻量级web表单数据封装框架实现方法

2.1 面向对象表单数据封装

在使用web技术开发时,一个表单往往代表一个对象数据,在java平台中使用Java Bean来封装表单提交的数据。Java Bean是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean.但通常情况下以Java Bean应具有一个无参的构造器.另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性[2]。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的.Java Bean具有以下几个方面的特点:

1) 定义该对象使用的常量。

2) 绝大部分属性定义为私有属性(private)。

3) 对属性设置通过setXxx方法进行,方法访问权限为公共(public),且set方法可以拥有一定的业务逻辑。

4) 对属性的访问通过getXxx方法进行,方法访问权限为公共(public),且get方法可以拥有一定的业务逻辑。

5) 对象序列化,Java Bean对象实现Serializable接口,为此对象可以作为文件流在网络中传输。

Java Bean封装表单提交数据有下面几种方式:

1) 通过JSP内置对象request获取表单提交数据(字符串类型),将数据转化为与Java Bean对应的数据类型,通过set方法将数据封装到Java Bean中。此种方式工作量大,但可封装任何类型的数据类型,其中包括自定义的数据类型。

2) 通过jsp:useBean标签来实现页面数据与Java Bean对象的封装。此种方式实现比较简单,但不能封装复杂的数据类型。

3) 流行web框架集成实现自动对页面数据封装。此种方式封装的数据类型比较多,但需要编写配置文件,且此种方式不能脱离框架。

针对以上各种实现方式的优缺点,下面论述轻量级web表单数据封装框架实现。

2.2JSP标签开发

Jsp标签介绍:

JSP标签开发步骤[3]:

1) 开发jsp标签类,标签类需继承javax.servlet.jsp.tagext.TagSupport类,并覆写doStartTag和doEndTag方法。在doEndTag方法体类实现封装web表单数据到JavaBean的封装。

2) 编写tld文件,在tld文件中描述标签名称、标签定义类、标签体,标签属性定义:属性名称、属性是否可空等。

3) 在web.xml配置文件中配置标签库,配置如下:

tld名称

tld文件路径

通过以上步骤实现了自定义标签,在jsp页面导入标签后变可使用标签进行web表单数据封装。

2.3 轻量级web表单数据封装框架实现

轻量级web表单数据封装需要使用jsp标签和java反射机制来实现,实现如图1所示。

JSP页面层在框架实现中需要规范各组件的命名,命名规范如下:

1) 组件中的值若是java基本类型(String、Short、Integer、Double、Float、Boolean、Char、Date)则组件的命名只需与封装JavaBean对象名称一致便可(区分大小写)。

2) 组件中的值若是JavaBen中自定义的对象的时,比如JavaBean中有一个属性为自定义对象User,组件的值对应User对象的Id,则组件的命名需为:user.Id(区分大小写)。

页面数据分析根据JavaBean属性针对的页面数据进行合法性分析,非法数据将被抛弃,不予封装到JavaBean对象中。

反射机制映射是整个框架中的核心,该机制实现页面数据到JavaBean对象封装[4]。反射(Reflect)是Java编程语言的特性。反射就是一个在当前JVM 中支持类、接口和对象内省的小型的、类型安全的和可靠的API。它是通过java.lang.reflect包提供的,可以对类的能力进行分析。图2的流程图描述了在自定义标签中粘合数据分析、映射过程。

自定义标签调用数据验证模块,该模块对JSP页面数据进行验证,非法数据将被抛弃,使用自定义的getInstanceByClassType方法获取JavaBean实例,然后调用自定义getObjectByTypeValue方法将JSP页面数据转化为JavaBean对象属性类型实例,使用invokeMethod调用JavaBean的set方法将数据封装到JavaBean实例中并返回给JSP容器,供JSP程序调用。

3 结论

本文针对当前面向对象表单数据封装的优缺点,提出了轻量级web表单数据封装框架实现方案,在实现方案中使用了JSP标签技术、JAVA反射等技术。轻量级web表单数据封装框架方案已实现并在系统开发中得到应用,从而提高了软件开发效率。此框架具有良好的操作和扩张性。

参考文献:

[1] 赫斯特.实战STRUTS[M].北京:机械工业出版社,2005:100-130.

[2] 埃史尔.Java编程思想[M].4版.陈昊鹏,译.北京:机械工业出版社,2007:456-480.

[3] 刘晓华,张健,周慧贞.JSP应用开发详解[M].3版.北京:电子工业出版社,2007:321-350.

[4] 孙卫琴.Java面向对象编程/Java开发专家[M].北京:电子工业出版社,2006:430-460.

上一篇:Apriori改进算法及其在课程相关性分析中的应用 下一篇:基于J2ME持久存储技术的研究