应用jsp和hibernate设计实现在线通讯录毕业设计Word文件下载.docx
《应用jsp和hibernate设计实现在线通讯录毕业设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《应用jsp和hibernate设计实现在线通讯录毕业设计Word文件下载.docx(31页珍藏版)》请在冰点文库上搜索。
如果URL指向HTML静态页面,Web服务器使用HTTP把该文档直接送给客户端,由客户端浏览器解释执行。
如果HTML文档中加入了JSP、ASP、PHP等动态代码,则应用程序将查询指令发送给数据库驱动程序,由驱动程序对数据库进行操作。
查询结果返回给数据库驱动程序,并由驱动程序返回Web服务器。
Web服务器将结果数据嵌入到页面中相应的位置。
Web服务器将完成的页面以HTML格式发送给客户端。
客户端浏览器解释执行接收到的HTML文档,在屏幕上显示结果。
本通讯录将极有普通通讯录的主要功能,它可以对联系人进行分组,并可以添加或删除组,也可以添加或删除联系人,或者对已经保存的联系人信息进行修改,查询功能也是必不可少的。
1.2研究现状
在线通讯录系统是每一个用户管理通讯录不可缺少的信息系统,它的内容对于用户来说非常重要,所以在线通讯录系统应该能够为每一个用户提供充足的信息和快捷的查询手段,大大的方便了人与人之间的交流。
随着科学技术的不断增强,计算机科学的日渐成熟,网上通讯工具迅速发展,其强大的功能已被人们深刻的认识,并且进入各个领域发挥越来越重要的作用。
作为计算机应用的一部分,使用计算机对通讯录进行管理,具有着手工管理所无法比拟的优点,如:
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高通讯录管理的效率,也是用户理财的科学化、正规化管理,与先进科学技术接轨的重要条件。
因此,开发这样一套应用软件成为很有必要的事情,对于我们即将毕业的学生来说,也是一次将计算机应用于现实的一次很有意义的实践活动。
1.3研究目标
本在线通讯录系统旨在开发一个功能实用,操作方便,简单明了的通讯录管理系统。
实现对联系人的增加、删除、修改、查询和留言板模块功能。
在设计软件的同时,尽可能的减少对系统资源的占用,并且力求做到通过使用本系统,提高用户之间的联系效率,使通讯录的管理工程化,规范化。
2系统分析
2.1经济上的可行性
在线通讯录系统是一个通讯信息进行动态跟踪和指导的系统,拟采用B/S结构体系,而MyEclipse和tomcat是本系统使用的开发工具,两个都可以在网上免费下载并安装使用;
Mysql是本系统的后台数据库,同样也可以在网上免费下载使用。
因此,基本无需支付任何费用就可以使用这些开发工具,另外,本系统完全由个人开发,除了个人的时间和精力的消耗之外,基本上没有什么经济方面的开发成本。
本系统的设计与开发是非商业性的,虽然没有经济方面的收益,但对于本人而言,既加深了本人对JSP和Hibernate技术的了解和掌握,也为以后的软件系统的设计和开发积累了一定的实践经验。
总之,本系统的经济社会效益是大于它的开发成本的,因而,经济上是可行的。
2.2技术上的可行性
在线通讯录管理系统的开发主要包括网站前台和网站后台两个方面,不管是普通用户还是网站管理员都是通过浏览器进入该系统。
对于网站前台,要求网站的界面友好、美观大方、操作方便等要求;
对于网站后台则要求网站信息更新及时、数据存储安全可靠、数据一致性高及易维护等要求。
根据以上这两点,并结合B/S结构在数据安全性、一致性、实时性等方面相对于C/S结构的优点,确定本系统采用B/S结构的开发模式。
选择JAVA技术,关键在于它有一组强大的控件库,如Web服务器控件、Web用户控件、HTML控件等,最为熟悉的莫过于登录控件,它为应用程序提供了一种可靠的、无需编程的登录解决方案,同时帮助实现网站的用户身份验证过程的自动化。
通过这些控件,可以大大提供系统的开发效率,因为效率是软件系统开发的关键。
更为重要的是MyEclipse集成开发环境是一套完整的开发工具集,可以用于生成JSP.NETWeb应用程序,不仅自带了运行JSP.NET程序所需的服务,如tomcat6.0服务器,还提供MySqlServer数据库各种操作,这些大大提高了编程的效率和代码质量。
加上MyEclipse网页设计工具的使用,可以设计出更简洁大方的页面,其代码直接可以复制到MyEclipse中使用,这更进一步方便了JAVA技术的运用,从而在技术上为本系统的设计和开发提供了可能。
2.3需求分析
开发软件首先要进行的就是需求分析,通常这一步需要与客户进行广泛的交流,对于一个复杂一些的系统,可能需要与客户进行数次会议,甚至需要需求分析人员在客户处调查数月。
对于本通讯录系统,我们可以先将自己作为通讯录的使用者,从自己的角度来考察需求(在真正的项目中,这一点是十分忌讳的,需求分析人员可以帮助,诱导客户说出他的需求,而绝不能从自己的角度替客户提出需求)。
很显然,一个普通的通讯录系统,最基本的功能是记录一个联系人的信息,那么,联系人的信息需要有哪些呢?
这是一个在需求分析中要特别注意的问题,一般而言,通讯录使用者可能需要的信息有以下这些:
姓名、性别、工作单位、电话、住址、邮箱、QQ和其他备注信息。
这样开发者了解了需要保存的每个联系人的基本信息有哪些,同时,应当注意到,不是每一位联系人都有工作单位,也不是每一位联系人都有手机或者QQ。
因此,除了姓名与性别外,其他信息都可以是空的,但既然是通讯录,其中也至应当记录该联系人的一项联系信息,所以,对上述信息记录时的要求应当为:
姓名与性别是必需的,其他所有信息至少有一项不为空。
与记录联系人信息相关的操作很容易联想到有增加联系人、删除联系人和对联系人信息进行更新3钟。
所以对联系人的操作的需求归纳为以下3点:
增加新的联系人、删除已存在的联系人、修改已存在的联系人的信息。
软件形式的通讯录与传统纸面形式的通讯录比较起来,可以实现更为方便、有效的管理。
为了便于查看及使用,通常通讯录需要对联系人进行分组管理,这又成为一个新的需求挖掘点。
基于实例的简单性考虑,对于组操作假定仅有以下需求:
组增加、组删除、组改名。
对于组的操作还有一个细节性的问题,有时候有些联系人可能不会被归属于任何组,此时,该联系人会被归入“未分组”这个组。
也就是说,“未分组”本身也需要成为一个组,而且,它不应当可以被删除。
另外,为了避免所有人打开电脑都能随意查看机主的通讯录,本系统还应设置一个登录界面,即拥有机主的用户名和密码才能进入系统。
而作为通讯录的拥有者,同时还会拥有一个数据库,可以方便的进行用户名的添加功能。
3开发环境
3.1JSP技术
3.1.1JSP概述
JSP的全称是JavaServerPages,即“基于Java服务器端动态页面技术”。
它由SunMicrosystems公司在1999年6月推出,近年来已发展成为一种最流行的动态网页开发技术。
Sun公司自1990年开始设计Java,凭借着其简单、面向对象、与平台无关等特点迅速征服了世界,尤其在日益普及的Internet应用上,更是有着其独特的、不可替代的优势。
由于JSP是在Java的基础上发展而来的,因此它也具有Java的一切优秀品质。
这些优点,使得它区别于同时期的其他动态网页技术,并且比它们更加符合和满足程序开发人员的需要。
JSP在HTML代码中嵌入Java程序片段,并使用各种JSP指令,构成了JSP页面。
这种页面可以完成操作数据库、上传文件等复杂的逻辑处理功能。
另外,还通过支持JavaBean实现了功能扩展。
3.1.2JSP运行机制
JSP是服务器端技术。
在服务器端,JSP引擎解释JSP代码,然后将结果以HTML或XML页面的形式发送到客户端。
在客户端的用户是看不到JSP代码的。
JSP容器(Web容器或Servlet引擎)接收到以.jsp为扩展名的HTTP访问请求后,实质是交给了一个JSP引擎处理,这个引擎就是一个Servlet,名叫org.apache.jspper.servlet.JspServlet。
当每个Jsp页面在第一次被访问的时候,JSP引擎就会把它翻译成一个Servlet源程序(.java),接着再把这个Servlet的源程序编译成一个Servlet的Class类文件(.Class),然后再由Web容器以像普通Servlet程序一样的方式来装载和解释执行
JSP容器管理JSP页面生命周期的两个阶段:
转换阶段和执行阶段。
当有一个对JSP页面的客户请求到来时,JSP容器检验JSP页面的语法是否正确,将JSP页面转换为Servlet源文件,然后调用javac工具类编译Servlet源文件生成字节码文件,这一阶段是转换阶段。
接下来,Servlet容器加载转换后的Servlet类,实例化一个对象处理客户端的请求,在请求处理完成后,响应对象被JSP容器接收,容器将HTML格式响应信息发送到客户端,这一阶段是执行阶段。
从整个过程中可以知道,当第一次加载JSP页面时,因为要将JSP文件转换Servlet类,所以响应速度较慢。
当再次请求时,JSP容器就会直接执行第一次请求时产生的Servlet,而不会再重新转换JSP文件,所以其执行速度和原始的Servlet执行速度几乎相同。
在JSP执行期间,JSP容器会检查JSP文件,看是否有更新或修改。
如果有更新和修改,JSP容器会再次编译JSP或Servlet;
如果没有,就直接执行前面产生的Servlet,这也是JSP相对于Servlet的好处之一。
3.1.3JSP特点
JSP具有如下主要特点:
a)把内容的生成和显示分离
使用JSP技术可以把界面的开发与程序逻辑的开发分离开。
Web开发人员使用HTML或XML标记来设计界面,使用JSP标记或脚本生成页面上的动态内容。
生成内容的逻辑被封装在标识和JavaBean组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。
JSP技术使得开发人员的分工更加明确,页面设计者可以修改内容而不影响逻辑,应用程序的开发者可以修改逻辑而不影响内容。
在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容(例如,通过访问JavaBeans组件,使用JDBC技术访问数据库,或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。
这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完全可用性。
b)生成可重用的组件
绝大多数JSP页面依赖于可重用的、跨平台的组件来执行应用程序要求的复杂处理。
开发人员可以共享和交换组件,或把这些组件提供给更多的用户使用。
基于组件的开发方法有效地提高了应用程序的开发效率,加速了项目的总体开发进程。
c)应用标记简化页面的开发
JSP技术封装了许多功能,这些功能是生成与JSP相关的HTML或XML的动态内容时所需要的。
标准的JSP标记能够访问和实例化JavaBeans组件,设置或检索组件的属性,下载Applet,以及执行使用其他方法难以实现的功能。
JSP标记具有可扩充性,允许开发者扩展JSP标记,开发人员也能够定制常用功能标记库。
第三方或其他开发人员也可以创建自己的标记库。
由于页面制作者可以使用标记库中的功能,因此大大减少了对脚本语言的依赖,并降低了页面制作的复杂度。
d)具有Java的特点
由于JSP页面的内置脚本是基于Java语言的,而且所有的JSP页面都被编译成JavaServlet,所以JSP具有Java的特点,如健壮的存储管理、安全性、跨平台特性、“一次编写,各处运行”等。
3.2Hibernate框架
3.2.1Hibernate简介
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲地使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
3.2.2Hibernate核心接口
Hibernate的核心接口一共有6个,分别为:
Session、SessionFactory、Transaction、Query、Criteria和Configuration。
Session接口负责执行被持久化对象的CRUD操作。
但值得注意的是Session对象是非线程安全的。
SessionFactory接口负责初始化Hibernate。
它充当数据存储源的代理,并负责创建Session对象。
这里用到了工厂模式。
值得注意的是SessionFactory并不是轻量级的,因为这需要一个很大的缓存,用来存放预定义的SQL语句以及映射元数据。
一个工作单元通常指一个数据库事务。
一个项目通常只需要一个SessionFactory就足够了,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
Transaction接口负责事务相关的操作。
它是可选的,也可以设计编写自己的底层事务处理代码。
Query和Criteria接口负责执行各种数据库查询。
它可以使用HQL语言或SQL语句两种表达方式。
Configuration类负责配置并启动Hibernate,创建SessionFactory对象。
在hibernate启动过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建Sessionfactory对象。
3.2.3Hibernate特点
Hibernate框架具有以下优点,从而使得其成为目前最为流行的J2EE开源框架之一:
a)Hibernate是JDBC的轻量级对象封装,它是一个独立的对象持久层框架,有很少的核心类,和AppServlet、EJB没有必然联系。
学习成本和代价较低,初学者完全可以在一个小时内安装、配置好系统,并开发出第一个Hibernate程序。
b)编程代码量大大减少,Hibernate把开发者从繁重的编程工作中解放出来。
c)基于Hibernate开发的各种应用系统可维护性好,系统修改十分方便。
d)Hibernate是一种非强迫性解决方案。
开发者在写业务逻辑与持续性类时,不必遵循许多Hibernate特定的规则和设计模式。
这样,Hibernate可以与大多数新的和现有的应用平稳集成,而不需要对应用的其他部分作破坏性修改。
e)Hibernate致力于称为Java管理持续性数据问题的一种全面解决方案,强调协调与关系数据库的交互,强调开发者的重心应放在业务问题上,而不是技术问题。
3.2.4Hibernate配置
<
hibernate-configuration>
session-factory>
propertyname="
dialect"
>
org.hibernate.dialect.MySQLDialect
/property>
show_sql"
true<
配置缓存插件
hibernate.cache.provider_class"
org.hibernate.cache.EhCacheProvider
hibernate.cache.use_second_level_cache"
hibernate.cache.use_query_cache"
mappingresource="
conf/hbm/contant.hbm.xml"
/>
conf/hbm/user.hbm.xml"
conf/hbm/message.hbm.xml"
/session-factory>
/hibernate-configuration>
3.3数据库连接池
3.3.1数据库连接池概述
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。
对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。
数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;
释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
这项技术能明显提高对数据库操作的性能。
3.3.2C3p0连接池配置
C3p0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection
和Statement
池的DataSources
对象。
C3p0数据库连接池配置信息:
beanid="
dataSource"
class="
com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="
close"
<
driverClass"
value="
${jdbc.driverClass}"
jdbcUrl"
${jdbc.jdbcUrl}"
user"
${jdbc.user}"
password"
${jdbc.password}"
minPoolSize"
${jdbc.miniPoolSize}"
连接池中保留的最大连接数。
maxPoolSize"
${jdbc.maxPoolSize}"
/>
初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。
initialPoolSize"
${jdbc.initialPoolSize}"
最大空闲时间,60秒内未使用则连接被丢弃。
若为0则永不丢弃。
maxIdleTime"
${jdbc.maxIdleTime}"
当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。
acquireIncrement"
${jdbc.acquireIncrement}"
定义在从数据库获取新连接失败后重复尝试的次数。
acquireRetryAttempts"
${jdbc.acquireRetryAttempts}"
两次连接中间隔时间,单位毫秒。
acquireRetryDelay"
${jdbc.acquireRetryDelay}"
连接关闭时默认将所有未提交的操作回滚。
testConnectionOnCheckin"
${jdbc.testConnectionOnCheckin}"
C3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。
如果定义了这个参数那么属性preferredTestQuery将被忽略。
你不能在这张Test表上进行任何操作,它将只供C3p0测试使用。
automaticTestTable"
${jdbc.automaticTestTable}"
每60秒检查所有连接池中的空闲连接。
idleConnectionTestPeriod"
${jdbc.idleConnectionTestPeriod}"
当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出。
SQLException,如设为0则无限期等待,单位毫秒。
checkoutTimeout"
${jdbc.checkoutTimeout}"
/bean>
/beans>
3.4Log4j日志
3.4.1Log4j简介
程序开发环境中的日志记录是由嵌入在程序中以输出一些对开发人员有用信息的语句所组成。
例如,跟踪语句(trace),结构转储和常见的system.out.println或printf调试语句。
log4j提供分级方法在程序中嵌入日志记录语句。
日志信息具有多种输出格式和多个输出级别。
使用一个专门的日志记录包,可以减轻对成千上万的system.out.println语句的维护成本,因为日志记录可以通过配置脚本在运行时得以控制。
log4j维护嵌入在程序代码中的日志记录语句。
通过规范日志记录的处理过程,一些人认为应该鼓励更多的使用日志记录并且获得更高程度的效率。
3.4.2Log4j日志配置
###directlogmessagestostdoutandfile###
log4j.rootCategory=INFO.stdout
#.yesky.