首    页 建模架构 设计模式 培训咨询 jdon框架 论坛

  《Java实用系统开发指南》 第二章

简单的用户注册系统

  本章以一个简单的用户注册系统为例,介绍J2EE中JSP/Servlet技术的应用,JSP/Servlet 属于J2EE中的Web部分,负责处理客户端的请求,然后进行简单的处理,传送到后台实现进一步商业逻辑运算。

2.1需求分析

  用户注册验证几乎是每个Web系统都需要的系统,只有那些注册过的用户才能访问一些特定的资源。

  用户注册验证系统是安全权限系统的重要组成部分。安全权限系统主要是解决“Who对What进行How的操作”问题,安全权限系统中还有一个重要组成部分就是资源访问控制权限,只有被授权后的用户才能访问特定的资源,这部分功能将在以后章节讨论实现。

2.2系统设计

  用户注册验证系统可以有很多种架构设计,从简单系统到复杂系统的单点登录以及JAAS(Java验证和授权服务框架)等。为对J2EE的JSP/servlet以及JavaBeans有初步了解,将使用JSP/JavaBeans技术完成一个简单的用户注册验证系统。

  JavaBeans是Java的软件组件架构技术,这些组件可以非常有效地、方便地组装成一个应用系统。近一个世纪以来,同样的想法已经被应用在不同领域,这就是工业革命。大量工厂的组装生产线出现,软件组件也是基于这样的概念:一次性创建小而可重用的模块,然后可以尽可能地重复使用它们。

2.2.1   Jsp/ServletJ2EE

  第1章介绍了使用多线程和线程池来提高应用系统的处理性能,这已经形成一种通用的性能提高处理模式。但是有一个最大问题是,由于线程难以使用和驯服,如果每个应用系统的开发都需要开发者了解如何使用线程池,如何防止多线程同步死锁,这将大大妨碍开发者使用Java软件系统开发应用系统的热情。

J2EE的JSP/Servlet开发者不用担心线程以及同步等问题,只要像往常一样编程,JSP/Servlet容器会自动使用线程池等技术来支持系统的运行。因此,JSP/Servlet的实质是一种线程技术,JSP在运行时会被编译成Servlet进行运行


2.2.2  
结构设计图
2.2.3   Jsp/JavaBeans
技术要点

  session表示这个JavaBeans将作为一个对象绑定于HttpSession中,直至用户退出系统前一直有效。也表示这个用户登陆进入系统以后,本JavaBean的实例将一直保存在系统内存中,直到该用户离开本系统。

  <jsp:setProperty>专门用来设置bean的属性,必须首先在这个bean中声明这个属性的设置set方法,比如需要设置bean的userid属性,必须在这个bean中有setUserid方法;需要设置bean的abc属性,必须在这个bean中有setAbc方法,其中setAbc中的A作为属性名第一个字母要大写,这些都是硬性的技术规定。

  property="*"被很多人称为超级星就是因为它有这样神奇的超级功能,简化了很多无谓的枯燥语句。property="*"将用户提交的表单参数自动写入JavaBeans的相应属性值中。因为表单提交的参数都是String型的,而在JavaBeans中同名属性有各种类型,那么系统将实现String类型到各种参数类型的自动转换,可以参考<jsp:setProperty>的参数转换表。


2.2.4   JDBC
和连接池

  JDBC是Java中支持基本SQL一个底层通用API接口,它在不同数据库的基础上提供了一个统一的操作界面,这样就可以在Java中方便地直接对数据库进行各种操作。JDBC API利用了Java跨平台优势,对企业数据实现了一次编写到处运行的目标。

  JDBC API一般是由具体数据库厂商提供,例如MySQL就提供了MySQL-Connector -XXX.jar作为JDBC API支持,在本系统开发时,需要将该驱动包放入classpath中,以便本系统的应用程序在编译和运行时能定位寻找到该驱动包。

  Class.forName("com.mysql.jdbc.Driver"). newInstance();

  大多数初学者一开始使用JDBC就喜欢在JSP中直接使用ResultSet。其实ResultSet是一个临时集合,只能作为从数据库中获取查询数据用,不能再作为中转站,这样做的缺点还有耦合性太强,容易发生内存泄漏。如果确实需要将数据库中查询的大量数据再传递到JSP中,那么可以使用Collection或者使用Iterator。具体实现方法将在以后章节中介绍。

  数据库连接池属于基于线程设计的Java底层技术,因此很多J2EE容器服务器本身就有数据库连接池支持。因此,作为J2EE商业应用,一般不提倡自己钻研开发连接池,直接使用容器提供的连接池就可以。在本章后面章节将介绍Tomcat连接池的使用。


2.2.5  
数据库设计

2.3   类的详细设计和实现

2.3.1   Façade模式

  GOF的《设计模式》一书中关于外观Facade模式定义如下:为子系统中的一组接口提供一个一致的界面。Facade模式提供了一个更高的接口,使得子系统更加容易使用。

  细分封装是面向对象编程中常用的设计方法,将一个系统划分为若干子系统有利于降低系统的复杂性,一直划分到子系统之间耦合度最小。所谓耦合度就是通信和相互依赖的关系,这类似一个建筑物的设计建造,建筑物有一个基本架构,而架构是由一些模块组成的,模块又是由一块块砖石组成的,而砖石是由一粒粒沙组成的。划分到如此细的部件,这样就可以重复利用这些部件来搭建任何建筑物了


2.3.2   JDBC
通用操作类

  关于数据库的主要操作有:获取数据库连接;数据库查询、插入、修改、删除;断开数据库连接。而数据库连接和断开数据库连接对于不同的数据表应该说都是统一的,因此,数据库的JDBC操作可以做成一个通用类,这样就能达到重用目的。


2.3.3   Email
发送通用类
2.3.4  
用户资料管理
2.3.5  
密码数据操作类
2.3.6  
登陆验证功能
2.4
界面编程实现
2.4.1   
登陆验证页面
2.4.2   
注册页面
2.5
调试、发布和运行


2.5.1  
单元测试

  本项目中需要对两个通用类实现单元测试,一方面因为它们功能非常重要,另外一方面因为这两个通用类涉及到系统环境的配置。

  以E-mail发送的SendMail.java测试为例。使用JUnit实现单元测试,Junit(http://www.junit.org)是一个开放源代码的测试软件,应用非常广泛。

  Junit的使用非常简单,实际只要两步:

(1)继承junit.framework.TestCase类编写自己的测试类;

(2)在测试类中编写自己的testXXXXX()方法。

  一般开发J2EE系统都会使用IDE工具辅助开发,在以后章节中谈到在J2EE开发中为什么必须依赖IDE才能提高开发速度。JBuilder作为首选的IDE工具使用也非常广泛,在JBuilder中使用Junit更加方便。

2.5.2   快速配置开发环境

  JBuilder是一个很强大的Java开发工具。因为其包含内容太多,有时用来作为小型项目的JSP/Javabeans开发显得过于“笨重”,而且学习JBuilder配置使用还需要一定的时间和精力。下面介绍一套简单快速轻便的开发和调试环境。

  Jcreator(http://www.jcreator.com/)用来编辑调试JavaBean。

  Dreamweaver (editplus)用来编辑JSP和HTML文件。

  Tomcat作为Serlvet/JSP容器服务器。

  MySQL作为数据库服务器。

  这套组合可以直接通过IE浏览器调试JSP或JavaBean,与JBuilder这样庞大的IDE工具软件相比,最大优点是资源消耗少,可以发挥各自工具的特点。例如DreamWeaver强大的可视化图形开发界面非常方便HTML/JSP的开发。


2.5.3   Tomcat
配置和调试

2.5.4   Tomcat连接池使用

  使用数据库连接池可以提高数据库的访问性能。Tomcat的数据库连接池是使用Jakarta-Commons项目中Database Connection Pool,包含下列组件:Jakarta-Commons DBCP 、Jakarta-Commons Collections和Jakarta-Commons Pool。这些库文件包必须和JDBC驱动程序一起安装在$CATALINA_HOME/common/lib这个目录下。

2.6 Hibernate使用

  Hibernate(http://sourceforge.net/projects/hibernate/)是著名的开源O/R mapping产品,可以将普通的Java对象直接映射到数据库持久层中,无需insert或update之类的SQL操作语句。


2.7
小结

  本章主要介绍J2EE中Web技术的一种实现,通过直接调用JDBC访问数据库。因此,在设计理念上还是沿用传统系统的混合式架构。在这种架构下,用户界面处理和数据库处理混淆在一起,彼此联系紧密,在可维护性和可拓展性方面相当薄弱,经常会发生修改一个点引发整个系统的运行崩溃,调试或追查内存泄漏等问题时困难,系统的稳定性和健壮性很差。这些问题将在以后章节介绍的J2EE完整的多层结构中得到解决。

 


更多标签...



Jdon框架演示

JiveJdon
源码下载

VIP收费区

历史热点讨论排行榜




google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘





手机 add to google add to yahoo
联系我们 | 关于我们 | 广告联系 | 网站地图 | 设为首页

沪ICP证08026060 如有意见请与我们联系 Powered by JdonFramework
_×
您有新消息