jsp留言板管理系统ssh论文_第1页
jsp留言板管理系统ssh论文_第2页
jsp留言板管理系统ssh论文_第3页
jsp留言板管理系统ssh论文_第4页
jsp留言板管理系统ssh论文_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE32PAGE31毕业设计说明书简易留言板管理系统学生姓名:学号: 学院: 函授站点: 专业: 辅导老师: 2012年4月摘要随着计算机的广泛应用,人们已经对网络不再感到陌生。在科技飞速发展的今天,电脑信息技术与各行各业进行了有效的结合。为了能够有效的利用网络的优势,我们必须在基于网络的基础上进行一些应用的研究,从而达到网络服务于社会的作用,现在学生使用网络的比重正在逐步增加,我们需要建立专门的应用来帮助学生们学习和交流有关问题,留言板则是解决该问题的最佳方案,留言也提供了一个全新的人类沟通新方式。

互联网技术的不断发展和普及,使构造互联网站、开发网络应用程序已经成为当前的热门技术之一。针对网上留言板的特点,文章叙述了在Windows环境下,利用MySql数据库,运用J2EE设计模式开发留言板管理系统,以及留言板管理系统的设计及开发过程。关键词:留言板J2EE数据库Withtheextensiveapplicationofcomputernetworknolongerfeelstrange.Therapiddevelopmentoftechnology,computerITandbusinessesaneffectivecombination.Ordertobeabletomakeeffectiveuseoftheadvantagesofthenetwork,wehavesomeapplicationsbasedonweb-based,soastoachievetheroleofnetworkservicesinthecommunity,theproportionofstudentsusingthenetworkisgraduallyincreasing,weneedtocreatespecializedapplicationstohelpstudentstolearnandexchangeinformationonissues,messageboardsisthebestsolutiontosolvetheproblem,themessagealsoprovidesawholenewnewwaysofhumancommunication.ContinuousdevelopmentandpopularizationofInternettechnology,sothatconstructInternetsites,thedevelopmentofwebapplicationshasbecomeoneofthehottechnologyofthecurrent.Thecharacteristicsofonlinemessageboards,articlesdescribedintheWindowsenvironment,usetheMySqldatabase,theuseofJ2EEdesignpatternstodevelopthemanagementsystemofthemessageboard,andamessageboardmanagementsystemdesignanddevelopmentprocess.Keywords:messageboardsJ2EEdatabase目录摘要 II关键词: II1绪论 42开发环境的介绍 52.1JAVA语言介绍 52.2J2EE企业级开发介绍 72.3MySql数据库的介绍 82.4Struts2简介 92.5MVC设计模式概述 103系统分析与设计 123.1系统功能分析 123.2数据库结构设计 134系统开发 174.1用户注册 174.2发表表留言 194.3回复留言 204.4删除留言 214.5系统异常处理 225总结 24参考文献 251绪论随着现代化技术的不断进步,人们发现交流的范围还是很小,不能满足更大范围人的需要,这样就出现了利用因特网在全球发布信息的留言——BBS。BBS是电子公告板(BulletinBoardSystem)的简称,它是最常见的Web应用系统。BBS起源于20世纪80年代,最初,留言只是用于发布公告系统,讨论问题的在线交流平台;后来,随着网络的普及,留言的功能越来越丰富,受到广大网民的欢迎。企业、学校等单位可以利用网上的留言发布公告、通知等。本系统采用MVC(Model-View-Controller)三层构架开发模式,在这种设计模式下,一个应用被分为三个部分:模型、视图和控制,每个部分负责不同的功能。模型是指应用程序的数据,以及对这些数据的操作;视图是指用户界面;控制负责视图和模型之间的同步,也就是说,根据用户界面的操作完成对程序数据的更新;将程序数据的改变及时反应到用户界面上。通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,这些组件可以进行交互和重用。对于大量的信息,采用数据库技术,在系统中数据组织应用关系模型。对数据库的访问,本系统使用数据库连接池,在系统初始化时启动文件中配置的数据的连接,如果程序需要链接,则从此池中取出一个连接使用,使用完后又返回给该池,这些连接可以复用,提高了效率。该系统采用JSP实现留言管理系统。在开发过程中实现了留言系统的部分管理,并且对留言的页面布局进行详细设计,使页面美观,体现所有功能。2开发环境的介绍2.1JAVA语言介绍任何事物的产生既有必然的原因也有偶然的因素,java语言的出现也验证了这一点。1991年,美国SunMicrosystems公司的某个研究小组为了能够在消费电子产品上开发应用程序,积极寻找合适的编程语言。消费电子产品种类繁多,包括PDA、机顶盒、手机等等,即使是同一类消费电子产品所采用的处理芯片和操作系统也不相同,也存在着跨平台的问题。当时最流行的编程语言是C和C++语言,Sun公司的研究人员就考虑是否可以采用C++语言来编写消费电子产品的应用程序,但是研究表明,对于消费电子产品而言C++语言过于复杂和庞大,并不适用,安全性也并不令人满意。于是,BillJoy先生领导的研究小组就着手设计和开发出一种语言,称之为Oak。该语言采用了许多C语言的语法,提高了安全性,并且是面向对象的语言,但是Oak语言在商业上并未获得成功。时间转到了1995年,互联网在世界上蓬勃发展,Sun公司发现Oak语言所具有的跨平台、面向对象、安全性高等特点非常符合互联网的需要,于是改进了该语言的设计,要达到如下几个目标:

创建一种面向对象的程序设计语言,而不是面向过程的语言;

提供一个解释执行的程序运行环境,是程序代码独立于平台;

吸收C和C++的优点,使程序员容易掌握;

去掉C和C++中影响程序健壮性的部分,使程序更安全,例如指针、内存申请和释放;

实现多线程,使得程序能够同时执行多个任务;

提供动态下载程序代码的机制;

提供代码校验机制以保证安全性;

最终,Sun公司给该语言取名为java语言。JAVA语言的特点如下:1.简单、面向对象和为人所熟悉

java的简单首先体现在精简的系统上,力图用最小的系统实现足够多的功能;对硬件的要求不高,在小型的计算机上便可以良好的运行。和所有的新一代的程序设计语言一样,java也采用了面向对象技术并更加彻底,所有的java程序和applet程序均是对象,封装性实现了模块化和信息隐藏,继承性实现了代码的复用,用户可以建立自己的类库。而且java采用的是相对简单的面向对象技术,去掉了运算符重载、多继承的复杂概念,而采用了单一继承、类强制转换、多线程、引用(非指针)等方式。无用内存自动回收机制也使得程序员不必费心管理内存,是程序设计更加简单,同时大大减少了出错的可能。java语言采用了C语言中的大部分语法,熟悉C语言的程序员会发现java语言在语法上与C语言极其相似。

2.鲁棒并且安全

java语言在编译及运行程序时,都要进行严格的检查。作为一种强制类型语言,java在编译和连接时都进行大量的类型检查,防止不匹配问题的发生。如果引用一个非法类型、或执行一个非法类型操作,java将在解释时指出该错误。在java程序中不能采用地址计算的方法通过指针访问内存单元,大大减少了错误发生的可能性;而且java的数组并非用指针实现,这样就可以在检查中避免数组越界的发生。无用内存自动回收机制也增加了java的鲁棒性。

作为网络语言,java必须提供足够的安全保障,并且要防止病毒的侵袭。java在运行应用程序时,严格检查其访问数据的权限,比如不允许网络上的应用程序修改本地的数据。下载到用户计算机中的字节代码在其被执行前要经过一个核实工具,一旦字节代码被核实,便由java解释器来执行,该解释器通过阻止对内存的直接访问来进一步提高java的安全性。同时java极高的鲁棒性也增强了java的安全性。

3.结构中立并且可以移植

网络上充满了各种不同类型的机器和操作系统,为使java程序能在网络的任何地方运行,java编译器编译生成了与体系结构无关的字节码结构文件格式。任何种类的计算机,只有在其处理器和操作系统上有java运行时环境,字节码文件就可以在该计算机上运行。即使是在单一系统的计算机上,结构中立也有非常大的作用。随着处理器结构的不断发展变化,程序员不得不编写各种版本的程序以在不同的处理器上运行,这使得开发出能够在所有平台上工作的软件集合是不可能的。而使用java将使同一版本的应用程序可以运行在所有的平台上。

体系结构的中立也使得java系统具有可移植性。java运行时系统可以移植到不同的处理器和操作系统上,java的编译器是由java语言实现的,解释器是由java语言和标准C语言实现的,因此可以较为方便的进行移植工作。4.高性能

虽然java是解释执行的,但它仍然具有非常高的性能,在一些特定的CPU上,java字节码可以快速的转换成为机器码进行执行。而且java字节码格式的设计就是针对机器码的转换,实际转换时相当简便,自动的寄存器分配与编译器对字节码的一些优化可使之生成高质量的代码。随着java虚拟机的改进和"即时编译"(justintime)技术的出现使得java的执行速度有了更大的提高。

5.解释执行、多线程并且是动态的

为易于实现跨平台性,java设计成为解释执行,字节码本身包含了许多编译时生成的信息,使连接过程更加简单。而多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,互不干涉,不会由于某一任务处于等待状态而影响了其它任务的执行,这样就可以容易的实现网络上的实时交互操作。java在执行过程中,可以动态的加载各种类库,这一特点使之非常适合于网络运行,同时也非常有利于软件的开发,即使是更新类库也不必重新编译使用这一类库的应用程序。2.2J2EE企业级开发介绍Web应用开发者需要编写企业级的分布式的事务处理应用程序,而这些应用程序必须可以发挥速度、安全性和服务器端技术的可靠性。企业级的应用程序必须具有以下特点:花费更少的金钱、具有更快的速度、占用更少的资源。为了减少费用,快速设计和开发企业级的应用程序,Java2Platform,EnterpriseEdition(J2EE)技术提供了一个基于组件的方法来设计、开发、装配和部署企业级应用程序。J2EE平台提供了一个多层结构的分布式的应用程序模型,该模型具有重用组件的能力、基于扩展标记语言(XML)的数据交换、统一的安全模式和灵活的事务控制。你不仅可以比以前更快地发表对市场的新的解决方案,而且你的独立于平台的基于组件的J2EE解决方案不再受任何提供商的产品和应用程序编程界面(APIs)的限制。提供商和买主都可以自己选择最合适于它们的商业应用和所需技术的产品和组件。

2.3MySql数据库的介绍MySQL(发音为"myesscueel",不是"mysequel")是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。由于MySQL是开放源代码的,因此任何人都可以在GeneralPublicLicense的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。MySQL这个名字,起源不是很明确。一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQLAB创始人之一的MontyWidenius的女儿也叫My。这两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。MySQL的海豚标志的名字叫“sakila”,它是由MySQLAB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者AmbroseTwebaze提供。根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。MySQL,虽然功能未必很强大,但因为它的开源、广泛传播,导致很多人都了解到这个数据库。它的历史也富有传奇性。MySQL的历史最早可以追溯到1979年,那时Oracle也才小打小闹,微软的SQLServer影子都没有。有一个人叫MontyWidenius,为一个叫TcX的小公司打工,并用BASIC设计了一个报表工具,可以在4M主频和16KB内存的计算机上运行。过了不久,又将此工具,使用C语言重写,移植到Unix平台,当时,它只是一个很底层的面向报表的存储引擎。这个工具叫做Unireg。可是,这个小公司资源有限,Monty天赋极高,面对资源有限的不利条件,他反而更能发挥潜能,总是力图写出最高效的代码。并因此养成了习惯。与Monty同在一起的还有一些别的同事,很少有人能坚持把那些代码持续写到20年后,而Monty却做到了。1990年,TcX的customer中开始有人要求要为它的API提供SQL支持,当时,有人想到了直接使用商用数据库算了,但是Monty觉得商用数据库的速度难令人满意。于是,他直接借助于mSQL的代码,将它集成到自己的存储引擎中。但不巧的是,效果并不太好。于是,Monty雄心大起,决心自己重写一个SQL支持。1996年,MySQL1.0发布,只面向一小拨人,相当于内部发布。到了96年10月,MySQL3.11.1发布了,呵呵,没有2.x版本。最开始,只提供了Solaris下的二进制版本。一个月后,Linux版本出现了。紧接下来的两年里,MySQL依次移植到各个平台下。它发布时,采用的许可策略,有些与众不同:允许免费商用,但是不能将MySQL与自己的产品绑定在一起发布。如果想一起发布,就必须使用特殊许可,意味着要花银子。当然,商业支持也是需要花银子的。其它的,随用户怎么用都可以。这种特殊许可为MySQL带来了一些收入,从而为它的持续发展打下了良好的基础。(细想想,PostgreSQL曾经有几年限入低谷,可能与它的完全免费,不受任何限制有关系)。2.4Struts2简介 Struts2既然是从Struts1发展而来,但实际上Struts2与Struts1在框架的设计思想上面还是有很大的区别,Struts2是以WebWork的设计思想为核心,为什么Struts2不沿用Struts1的设计思想,毕竟Struts1在目前的企业应用中还是有非常大的市场在的,那么,来看下Struts1的一些缺点吧:

1)支持的表现层技术单一

2)与ServletAPI严重耦合,这点可以从Action的Execute的方法声明里面就可以看的出来

3)代码依赖Struts1API,有侵入性,这点可以从写Action类和FormBean的时候看的出来,Action必须实现Struts的Action类而Struts2之所以以WebWork的设计思想为其核心,一点就是最近WebWork的上升势头,再就是WebWork没有Struts1上面的那些缺点,更符合MVC的设计思想,也更利于代码的复用。基于以上介绍可以看的出,Struts2体系结构与Struts1的体系结构有很大的差别,Struts1是使用ActionServlet做为其中心处理器,Struts2则使用一个拦截器(FilterDispatcher)做为其中心处理器,这样做的一个好处就是将Action类和ServletAPI进行了分离。Struts2的简单处理流程如下:

1)浏览器发送请求

2)中心处理器根据struts.xml文件查找对应的处理请求的Action类

3)WebWork的拦截器链自动对请求应用通用功能,例如:WorkFlow、Validation等功能

4)如果Struts.xml文件中配置Method参数,则调用Method参数对应的Action类中的Method方法,否则调用通用的Execute方法来处理用户请求

5)将Action类中的对应方法返回的结果响应给浏览器2.5Hibernate简介Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration.这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五的核心接口分别加以介绍。Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession.这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session.SessionFactory接口:SessionFactroy接口负责初始化Hibernate.它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory.Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFacTransaction接口:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。2.6Spring简介传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现WriteOnce及RunAnywhere的承诺。Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务、事务处理等。Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。Spring是一个开源框架,它由RodJohnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。◆目的:解决企业应用开发的复杂性◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能◆范围:任何Java应用简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。起源你可能正在想“Spring不过是另外一个的framework”。当已经有许多开放源代码(和专有)J2EEframework时,我们为什么还需要SpringFramework?Spring是独特的,因为若干个原因:◆它定位的领域是许多其他流行的framework没有的。Spring致力于提供一种方法管理你的业务对象。◆Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。因此从你的学习中,你可得到最大的价值。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。◆它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。Spring对你的工程来说,它不需要一个以上的framework。Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构。它也涉及到其他framework没有考虑到的内容。特点◆方便解耦,简化开发通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。◆AOP编程的支持通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。◆声明式事务的支持在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。◆方便程序的测试可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。◆方便集成各种优秀框架Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。◆降低JavaEEAPI的使用难度Spring对很多难用的JavaEEAPI(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些JavaEEAPI的使用难度大为降低。◆Java源码是经典学习范例Spring的源码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。好处在我们进入细节以前,让我们看一下Spring可以给一个工程带来的一些好处:◆Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB。如果你仅仅使用了Struts或其他的包含了J2EE特有APIs的framework,你会发现Spring关注了遗留下的问题。◆Spring能消除在许多工程上对Singleton的过多使用。根据我的经验,这是一个主要的问题,它减少了系统的可测试性和面向对象特性。◆Spring能消除使用各种各样格式的属性定制文件的需要,在整个应用和工程中,可通过一种一致的方法来进行配置。曾经感到迷惑,一个特定类要查找迷幻般的属性关键字或系统属性,为此不得不读Javadoc乃至源编码吗?有了Spring,你可很简单地看到类的JavaBean属性。倒置控制的使用(在下面讨论)帮助完成这种简化。◆Spring能通过接口而不是类促进好的编程习惯,减少编程代价到几乎为零。◆Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。◆使用Spring构建的应用程序易于单元测试。◆Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或localEJBs来实现业务接口,却不会影响调用代码。◆Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适于许多web应用。例如,Spring能使用AOP提供声明性事务而不通过使用EJB容器,如果你仅仅需要与单个的数据库打交道,甚至不需要JTA实现。■Spring为数据存取提供了一致的框架,不论是使用JDBC或O/Rmapping产品(如Hibernate)。Spring确实使你能通过最简单可行的解决办法解决你的问题。这些特性是有很大价值的。总结起来,Spring有如下优点:◆低侵入式设计,代码污染极低◆独立于各种应用服务器,可以真正实现WriteOnce,RunAnywhere的承诺◆Spring的DI机制降低了业务对象替换的复杂性◆Spring并不完全依赖于Spring,开发者可自由选用Spring框架的部分或全部作用Spring提供许多功能,在此我将快速地依次展示其各个主要方面。首先,让我们明确Spring范围。尽管Spring覆盖了许多方面,但我们已经有清楚的概念,它什么应该涉及和什么不应该涉及。Spring的主要目的是使J2EE易用和促进好编程习惯。Spring不重新开发已有的东西。因此,在Spring中你将发现没有日志记录的包,没有连接池,没有分布事务调度。这些均有开源项目提供(例如CommonsLogging用来做所有的日志输出,或CommonsDBCP用来作数据连接池),或由你的应用程序服务器提供。因为同样的的原因,我们没有提供O/Rmapping层,对此,已有友好的解决办法如Hibernate和JDO。

Spring的目标是使已存在的技术更加易用。例如,尽管我们没有底层事务协调处理,但我们提供了一个抽象层覆盖了JTA或任何其他的事务策略。Spring没有直接和其他的开源项目竞争,除非我们感到我们能提供新的一些东西。例如,象许多开发人员,我们从来没有为Struts高兴过,并且感到在MVCwebframework中还有改进的余地。在某些领域,例如轻量级的IoC容器和AOP框架,Spring有直接的竞争,但是在这些领域还没有已经较为流行的解决方案。(Spring在这些区域是开路先锋。)Spring也得益于内在的一致性。所有的开发者都在唱同样的的赞歌,基础想法依然是ExpertOne-on-OneJ2EE设计与开发的那些。并且我们已经能够使用一些主要的概念,例如倒置控制,来处理多个领域。Spring在应用服务器之间是可移植的。当然保证可移植性总是一次挑战,但是我们避免任何特定平台或非标准化,并且支持在WebLogic,Tomcat,Resin,JBoss,WebSphere和其他的应用服务器上的用户。2.7MVC设计模式概述2.5.1MVC是Model-View-Controller的简称,即模型-视图-控制器。MVC是XeroxPARC在20世纪80年代为编程语言Smalltalk—80发明的一种软件设计模式,至今已被广泛使用,最近几年被推荐为Sun公司J2EE平台的设计模式,受到越来越多的Web开发者的欢迎。MVC设计模式MVC是一种设计模式,它强制性地把应用程序的输入、处理和输出分开。MVC把应用程序分为三个核心模块:模型、视图和控制器,它们分别担任不同的任务。如下图显示了这几个模块各自的功能以及它们的相互关系。视图:视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接收模型发出的数据更新事件,从而对用户界面进行同步更新。模型:模型是应用程序的主体部分。模型表示业务数据和业务逻辑。一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。方法调用〈控制器〉方法调用〈控制器〉接受用户请求调用模型响应用户请求选择视图显示响应结果〈视图〉显示模型状态接受数据更新请求把用户输入数据传输给控制器〈模型〉代表应用程序状态响应状态查询处理业务流程通知视图业务状态更新事件图2.1MVC视图Fig.2.1MVCView控制器:控制器接收用户输入并调用模型和视图去完成用户的需求。当Web用户单击Web页面中的提交按钮来发送HTML表单时,控制器接收请求并调用相应的模型组件去处理请求,然后调用相应的视图来显示模型返回的数据。MVC的处理过程如下:首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理;然后根据用户请求并进行相应的业务处理,并返回数据,最后控制器调用相应的视图来格式化模型返回的数据,并通过视图呈现给用户。MVC的优点和不足MVC的优点表现在以下几个方面:

可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。

视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。

模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。

潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。MVC的不足表现在以下几个方面:增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

目前,一般高级的界面工具或构造器不支持MVC模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。3系统分析与设计3.1系统功能分析本系统为留言管理系统,主要实现对留言板的管理,发表留言,查看留言,删除留言,用户可按照一定流程使用本系统,首先一个用户需要注册登录本系统,登录系统的用户可以查看已有的留言,发表一个新的留言,回复留言参与对留言内容的讨论,如果登录用户为管理员,则可以删除有关留言,留言功能流程如图1.1所示。图1.1留言功能流程图通过上面的分析,总结该系统的功能有以下几项:用户注册、用户登录、发表留言、回复留言、看留言、删除留言、权限控制。浏览者根据不同的角色注册为本系统的用户,学生登录后可以发表一些留言,提出自己问题和大家一起分享,一起解决,其他学生和老师登录后可以正对该学生所提出的留言进行回复,分享知识和经验,这样就达到了学术交流的目的,对于没有用的留言管理员可以将其删除。3.2数据库结构设计数据库E-R图图1.4实体间的关系E-R图系统用户表的列清单名称代码数据类型是键强制默认值注释idu_idintTRUETRUE

姓名u_namevarchar(20)FALSEFALSE

性别u_gendervarchar(20)FALSEFALSE

电子邮件u_emailvarchar(50)FALSEFALSE

登录帐号u_loginnamevarchar(50)FALSEFALSE

登录密码u_passwordvarchar(50)FALSEFALSE

用户类型u_typevarchar(20)FALSEFALSE

是否为管理元u_ismanagerbitFALSEFALSE留言表的列清单名称代码数据类型是键强制默认值注释idmessage_idintTRUETRUE

id2u_idintTRUEFALSE

标题message_titlevarchar(100)FALSEFALSE

内容message_contenttextFALSEFALSE

发表时间message_timevarchar(50)FALSEFALSE

表格回复表的列清单名称代码数据类型是键强制默认值注释ididintTRUETRUE

id2u_idintTRUEFALSE

id3message_idintTRUEFALSE

回复内容replay_contenttextFALSEFALSE

回复时间replay_timevarchar(50)FALSEFALSE

考虑到功能的完整性,数据库的设计按照数据库设计范式进行设计,表与表之间通过外键进行关联。系统用户表(sys_user)存放系统的用户,包括管理员,教师,学生。教师与学生之间通过字段“u_type”进行区分,而管理员本身属于教师或者学生中的一种,则通过字段“u_ismanager”进行标识,留言表(levemessage)用来存放用户的留言,主要包括留言的标题,内容,留言的时间,以及留言者。留言回复表(replaymessage)则记录了对某个留言的回复,包括回复的内容,回复的事件,回复人等等信息。数据库建表Sql脚本如下:DROPDATABASEIFEXISTSleve_message;/*==============================================================*//*Database:leve_message*//*==============================================================*/CREATEDATABASEleve_message;USEleve_message;/*==============================================================*//*Table:levemessage*//*==============================================================*/createtablelevemessage(message_idintnotnullauto_increment,u_idint,message_titlevarchar(100),message_contenttext,message_timevarchar(50),primarykey(message_id));/*==============================================================*//*Table:replaymessage*//*==============================================================*/createtablereplaymessage(idintnotnullauto_increment,u_idint,message_idint,replay_contenttext,replay_timevarchar(50),primarykey(id));/*==============================================================*//*Table:sys_user*//*==============================================================*/createtablesys_user(u_idintnotnullauto_increment,u_namevarchar(20),u_gendervarchar(20),u_emailvarchar(50),u_loginnamevarchar(50),u_passwordvarchar(50),u_typevarchar(20),u_ismanagerbit,primarykey(u_id));altertablelevemessageaddconstraintFK_Reference_1foreignkey(u_id)referencessys_user(u_id)ondeleterestrictonupdaterestrict;altertablereplaymessageaddconstraintFK_Reference_2foreignkey(u_id)referencessys_user(u_id)ondeleterestrictonupdaterestrict; altertablereplaymessageaddconstraintFK_Reference_3foreignkey(message_id)referenceslevemessage(message_id)ondeleterestrictonupdaterestrict;INSERTINTOsys_user(u_name,u_gender,u_email,u_loginname,u_password,u_type,u_ismanager)VALUES('管理员','男','admin@163.com','admin','admin','管理员',TRUE);4系统开发4.1用户注册浏览者通过注册用户具有登录本系统的能力,用户注册需要填写相关信息,根据用户的不同角色选择学生或者教师注册成功的用户可一登录系统看到留言以及发表留言或者参与留言的讨论 下图是用户登录后进入的主界面,列出了所有的留言和相关信息以及及当前登录的用户和相关的操作,用户可以通过点击"所有留言"查看所用的留言,可以以点击"我的留言"查看自己的留言。可以单击具体的留言进入留言界面,查看留言的详细信息以及回复情况,也可以通过留言的方式参与讨论。 当Action接收到用户的动作后,做出相应的响应,同时返回指定的页面并携带数据,具体Action控制代码如下:publicStringlistAllMessage()throwsException{ Pagepages=newPage(); pages.setCount(messageservice.getCount()); pages.setPage(page); List<Levemessage>messages=messageservice.getAllMessage(pages); ServletActionContext.getRequest().setAttribute("pages",pages); ServletActionContext.getRequest().setAttribute("messages",messages); return"index"; } publicStringlistMessageForUser()throwsException{ SysUseruser=(SysUser)ServletActionContext.getRequest().getSession().getAttribute("user"); Pagepages=newPage(); pages.setCount(messageservice.getCount(user)); pages.setPage(page); List<Levemessage>usermessages=messageservice.getAllMessage(pages,user); ServletActionContext.getRequest().setAttribute("pages",pages); ServletActionContext.getRequest().setAttribute("usermessages",usermessages); return"usermessage"; }4.2发表表留言 下图为发表留言界面,登录用户点击发表留言按钮可进入发表留言界面。学生可以通过此功能发表自己的疑问,以及分享自己的学习经验。 发表留言控制代码如下:publicStringaddMessage()throwsException{ Levemessagemessage=newLevemessage(); message.setMessageTitle(messageTitle); message.setMessageContent(messageContent); message.setMessageTime(newSimpleDateFormat("yyyy-MM-dd").format(newDate())); message.setSysUser((SysUser)ServletActionContext.getRequest().getSession().getAttribute("user")); messageservice.addMessage(message); return"success"; }4.3回复留言 下图为回复留言界面,打开具体的留言后,可以查看该留言的详细信息,也可以查看该留言的回复内容,回复时间,回复人。同时用户也可以回复该留言,通过此功能,用户可以从中获得知己想要知道的知识,也可以参与讨论提高自己的技能和帮助他人,教师也可以在此处发表回复,解答学生的问题,从而达到了互动教学的目的。 显示留言详细和发表回复的相关action代码如下:publicStringshowMessageDetil()throwsException{ Levemessagemessage=messageservice.findMessageById(messageId); ServletActionContext.getRequest().setAttribute("message",message); return"messagereplay"; } publicStringreplayMessage()throwsException{ Replaymessagereplaymessage=newReplaymessage(); replaymessage.setReplayContent(replayContent); replaymessage.setSysUser((SysUser)ServletActionContext.getRequest().getSession().getAttribute("user")); replaymessage.setLeveMessage(messageservice.findMessageById(messageId)); replaymessage.setReplayTime(newSimpleDateFormat("yyyy-MM-dd").format(newDate())); messageservice.addReplayMessage(replaymessage); return"success"; }4.4删除留言登录用户如果具有管理留言的权限,则可以管理留言,对已经过时的留言或者没有用的留言进行删除,如下图所示点击删除后即可删除有关留言,可进行本留言系统的管理。4.5系统异常处理 为了优化系统结果,简化异常处理的繁琐,本系统采用了Struts2Interceptor进行异常处理,使得系统的处理能够统一,如果应用发上错误,系统将显示错误页面,告知用户系统发生了错误,增强了用户体验,也为系统维护提供了依据。异常处理的Interceptor:publicStringintercept(ActionInvocation

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论