APP下载

浅析三层结构实现Web应用的编程思路

2013-04-29张延年

电脑知识与技术 2013年7期

张延年

摘要:首先,概述了什么是三层结构的Web应用程序及其特点,然后结合具体的基于Java/Jsp技术实现“新闻发布系统”说明三层结构在Web应用程序编写中的具体运用。该文重点结合在平时教学活动中的具体实践对使用三层结构编写Web应用程序的过程中如何掌握编写思路进行了较为深入地探讨,最后进一步说明掌握了正确的编程思路和方法可以非常有效地提高项目的开发进度。

关键词: 三层结构;Web应用;Java /Jsp技术

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)07-1567-03

一般企业级Web应用软件的开发都会涉及较多且较复杂的业务逻辑,而且客户的业务需求也会经常发生变化,这就对此类软件的开发提出了更高的要求。为适应这种要求,一般软件开发企业会采用一定的软件设计模式来提高开发效率,而分层模式是最常见的一种架构模式 ,而且分层模式是很多更为复杂的架构模式的基础。分层模式的特点是:将解决方案的组件分隔到不同的层中;在同一个层中组件之间保持内聚性;层与层之间保持松耦合。

三层模式可以说既是Web应用软件开发中最简单地一种分层模式,也是较为实用的一种分层模式。它是将整个系统自上而下分为表示层、业务逻辑层、数据库访问层。表示层用于将信息展示给用户或接受用户输入信息,一般是由Web页面组成;业务逻辑层负责实现系统主要涉及到的业务逻辑功能,一般封装了业务逻辑的类组成;数据库访问层主要实现对数据库的增、删改查操作,不涉及业务逻辑,一般由数据操作对象(DAO)类组成。三层之间的关系是:表示层依赖于业务逻辑层,业务逻辑层依赖,即高层依赖于底层,底层不依赖于高层,一般不能跨層调用方法。同时,对于系统封装好的实体类,三层都可以访问。

1 三层结构的具体应用

1.1“新闻发布系统”的总体设计

“新闻发布系统”是许多企业级Web应用系统的子模块,这里就以此为例来说明三层结构的具体应用。“新闻发布系统”分为前台用户模块和后台管理模块两大部分。

前台用户模块包括以下功能:1)用户登录、注册;2)新闻列表展示;3)新闻详细内容展示;4)按关键词查询新闻。

后台管理模块包括以下功能:1)用户管理(普通用户的增、删、改、查);2)新闻管理(新闻信息的增、删、改、查)。

1.2 数据库设计

1.3三层结构设计

2 三层结构Web应用的编程思路

2.1 编写实体类

编写Web应用程序一般都会对数据库表进行增、删、改、查操作,所以一般对数据库表的设计是第一步,也可以称为定义数据字典。这一步做的主要工作是创建表、定义表字段名、类型、约束条件,确定表之间的关系,另外为了方便后期开发还要输入少量的测试数据。

数据表定义好以后我们就可以编写实体类了,不涉及到业务逻辑的实体类一般一个实体类对应一个数据表,业务逻辑实体类到需要编写业务逻辑时再定义。

在编写实体类过程中总结了一下经验:

1)将实体类字段名定义成和表字段名一致的名称可以减少错误,另外借助工具(如PLSQL Developer、Hibernate)可以加快编码速度。

2)尽可能地使用字符串类型作为所定义的属性的类型,这样可以比较方便后期对数据库的操作;

3)给所有的属性都添加上getter/setter方法,便于后期对属性的操作;

2.2 三层结构的编写步骤

一般教科书或参考书上讲的编写三层结构代码的顺序都是按照业务功能模块先编写此模块的数据访问层,再编写业务逻辑层,最后编写表示层。但我们在教学实践过程中发现使用这样的编码顺序做项目教学效果并不理想,学生往往在编写的过程中没有一个清晰的思路,或者是写某一功能时无从下手,或者是写着写着就不知道下一步该做什么了。

这里我们根据教学实践采用一种“需求驱动”的方式编码,取得了较好的教学效果。这一编程思路就是首先从表示层,也就是页面开始编码,由于页面上很多内容都是静态显示的,所以我们先把静态部分写好,然后再写逻辑脚本部分,根据客户具体需求要显示哪些内容,我们就在页面上合适的地方添加相应的jsp脚本或el/jstl表达式。其次,还是根据需求看是否需要去调用业务逻辑层的功能代码,如果这时业务逻辑层还没有需要的方法,我们就到业务逻辑对应的类去添加相应的方法,并在页面上传递相应的参数进行调用。最后,如果在编写业务逻辑层方法的过程中需要访问数据库,则再去调用数据访问层的相应方法,如果没有需要的方法同样到数据访问层对应的类中添加方法。这样有上层开始,逐步向下的编码顺序可以使我们有很清晰的编码思路,最后再由低层将结果逐步返回上层,最后再回到页面上验证我们编写代码的输出结果是否正确,这样每一层的功能十分清晰,有利于程序调试。

下面以“新闻发布系统”中显示新闻标题列表的功能模块为例说明这种编码步骤在实践中的具体应用。

1)创建newsTitleList.jsp页面,页面将静态部分设计编写好,包括页面头部,尾部,导航等固定部分,还有显示标题列表部分,我们这里采用简单地table显示。

2)编写jsp脚本部分,这里我们做了简化,显示包括所有主题的新闻标题和创建时间(实际项目中需要按主题显示列表并进行列表分页),具体代码如下:

3)编写业务逻辑层方法,在以上的页面上要调用findAllNews_item()方法,这个方法现在还没有,所以需要在业务逻辑层NewsItemBiz类中编写如下具体代码:

4)编写数据访问层方法,在以上的业务逻辑方法中要调用getAllNews_item()方法,这个方法现在还没有,所以需要在数据访问层News_itemDao类中编写如下具体代码:

5)最后再回到页面层调试程序,显示出正确的新闻列表标题数据。

2.3程序代码优化

掌握了以上编码思路,其他逻辑功能模块的编写完全按照这一步骤和顺序来实现。在平时教学过程中我们还积累了一些对程序代码优化非常有用的方法,现总结如下。

1)对数据库操作表基本的连接、关闭、增、删、改、查操作应该作为公共方法提取出来,放到一个工具类中,并尽量写成静态方法,以方便其他类调用。

2)对用户经常要反复访问的页面(如首页index.jsp),如果其中有对数据库操作的代码,则应该对其进行优化,可以放到Servlet的init()方法中只执行一次,然后放到session或application中,这样可以避免频繁查询数据库。

3)为了便于程序的后期维护和扩展,页面应主要使用el/jstl标签来代替jsp脚本,使表示层只用于展示内容,将业务逻辑与页面显示尽量分开,降低层与层之间的耦合度。

4)将程序中编写的js脚本和css样式放到单独的文件中,这样有利于代码的复用和程序的修改维护。

5)在使用jndi方式配置数据库连接信息时,最好不要在tomcat下的context.xml文件中进行配置,而更好的办法是在项目的META-INF目录下单独建立一个context.xml文件并写入配置信息,这样在项目进行迁移时不需要重新配置数据库连接信息。

3 结束语

本文主要结合在教学过程中使用的 “新闻发布系统”这一项目案例说明三层结构在Web应用程序开发过程中的具体运用,重点论述了编程思路和方法对提高项目开发效率的重要性,其中对使用三层结构编写Web应用程序过程中的编程思路提出了自己的观点,并在教学实践中取得了较好得教学效果,另外文中还总结了几条程序代码优化的技巧。

参考文献:

[1] 林信良. JSP & Servlet学习笔记[M].2版.北京:清华大学出版社,2012.

[2] 卢翰,王国辉. JSP项目开发案例全程实录[M].北京:清华大学出版社,2011.

[3] 郭锋.我的J2EE成功之路:实战Ajax, JSP, Struts 2, Spring, Hibernate[M].北京:电子工业出版社2009.