您当前所在位置:首页 > 论文 > 计算机论文 > JSP论文

JSP论文:浅论数据库原理网上授课平台

编辑:sx_chenzf

2013-09-12

 

【摘要】精品学习网为您整理了JSP论文:浅论数据库原理网上授课平台,希望帮助您提供很多想法。

第1章  绪  论

1.1 课题背景

随着计算机及网络技术的飞速发展,Internet/Intranet应用在全球范围内日益普及,在众多的网络服务中,Web给人耳目一新的感觉,各种网站日渐普及,很多人都通过网络来进行各种信息交互活动。《数据库原理网上授课平台》专门针对《数据库原理》课程的教学活动,利用网上授课网站有很多好处,例如可以24小时随时进行服务,可以弥补学生没有听懂的不足,改变了传统作业批改方式,浪费人力物力,教师可以及时了解学生学习情况,以及师生信息的交互等等。JSP技术是当前相当热门的,因为它可以进行复杂的数据库操作、很强的交互性以及方便用户控制管理。本系统正是采用JSP开发。

1.2 课题研究内容及意义

二十一世纪是信息的社会,信息作为社会最主要的资源,将成为战略资源引起人们广泛的关注。在现代学习生活中,网上学习是也是提高自己技术的重要途径之一,网上授课平台应运而生。随着生活水平不断提高,几乎家家都有电脑。在新形势下,越来越多的网上授课平台相继被开发出来。网上授课平台,可以使学生在上课时听不懂的课程进行课后复习,让同学更好的把握学习的重点。同时还可以在网上授课平台和老师进行聊天,向老师提问一些自己不明白的问题。让自己充分理解所学的课程。这样有助于提高自己。学习靠自己,但是不明白的地方也要问别人。有了网上授课平台就可以轻松的自学了。在网上授课平台里,每堂课都有几百个帖子,信息量很大,同一分钟可能有许多人同时发言,有附议,有评论,有反驳,非常生动,一些平时比较腼腆的学生也能发表长篇大论。老师事先发布讨论内容,然后师生共同探讨,互动交流,触发灵感。像有些学生离校回家了,但他们在上课时间都来到网上课堂,他们都能和在校学生一起讨论,就是网络的功劳。这样一个授课的记录能够真实、完整的保存下来,为因各种原因没能来上课的同学日后补课提供了方便。容易出成果,同学们也反映,以前口头讨论流于肤浅,现在以文字表述观点,更深入、更有逻辑性,讨论结束后稍加整理便可以形成小论文或者对话录,我们鼓励学生把讨论所得及时整理出来,巩固下来,以加深他们的印象

1.3 本文主要内容

(1)系统开发的目的及意义。

(2)系统概述和应用工具介绍,主要包括对JSP、Java Bean、SQL Server 2000和B/S模式的介绍。

(3)对系统进行可行性分析和需求分析以满足客户要求。

(4)对系统的详细设计,系统数据库的设计和流程进行描述。

(5)系统的总结以及未来的展望。

第2章  关键技术介绍和开发工具以及硬件环境

2.1 关键技术介绍

2.1.1 JSP语言及其特点

在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)。JSP页面看上去象标准的HTML和XML页面,并附带有JSP引擎能够处理和抽取的额外元件。

Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给用户。

程序片段可以操作数据库、重新定向网页以及发送E-mail等,这就是建立动态网站所需要的功能。

所有程序都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低。它基于强大的Java语言,具有良好的伸缩性,在网络数据库应用开发领域具有得天独厚的优势。

JSP技术在多个方面加速了动态Web页面的开发:

a.将内容的生成和显示进行分离

使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来生成页面上的动态内容(内容是根据请求来变化的,例如请求帐户信息或者特定的一瓶酒的价格)。生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在小脚本中,所有的脚本在服务器端运行。如果核心逻辑被封装在标识和Beans中,那么其他人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成。

在服务器端,JSP引擎解释JSP标识和小脚本,生成所请求的内容(例如,通过访问JavaBeans组件,使用JDBCTM技术访问数据库,或者包含文件),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完全可用性。

b.强调可重用的组件

绝大多数JSP页面依赖于可重用的,跨平台的组件(JavaBeans或者Enterprise JavaBeansTM组件)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者客户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡。

c.采用标识简化页面开发

Web页面开发人员不会都是熟悉脚本语言的编程人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的。标准的JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能。

通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其他人员可以为常用功能创建自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。

d.JSP能提供所有Servlets功能

与Servlets相比,JSP能提供所有Servlets功能,它比用Println书写和修改HTML更方便。可以更明确地进行分工,Web页面设计人员编写HTML,只需留出空间让Servlets程序员插入动态部分即可。JSP技术能够支持高度复杂的基于Web的应用。

e.健壮的存储管理和安全性

由于JSP页面的内置脚本语言是基于Java编程语言的,而且所有的JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。

f.一次编写,各处运行

作为Java平台的一部分,JSP拥有Java编程语言“一次编写,各处运行”的特点。随着越来越多的供应商将JSP支持添加到他们的产品中,您可以使用自己所选择的服务器和工具,更改工具或服务器并不影响当前的应用。

2.1.2 Java及Java Servlets概述

JSP技术是用JAVA语言作为脚本语言的,谈及JSP技术,少不了要对JAVA技术进行一些基本的介绍。

最近一年多来,在Internet上出现的特别吸引人的事件就是Java语言和用 Java编写的浏览器HotJava。

1991年,SUN MicroSystem公司的Jame Gosling、 Bill Joe等人,为在电视、 控制烤面包箱等家用消费类电子产品上进行交互式操作而开发了一个名为Oak的软件(即一种橡树的名字),但当时并没有引起人们的注意,直到1994年下半 年,Internet的迅猛发展,环球信息网WWW的快速增长,促进了Java语言研制的 进展,使得它逐渐成为Internet上受欢迎的开发与编程语言,一些著名的计算机 公司纷纷购买了Java语言的使用权。

如Mi-croSoft、IBM、Netscape、Novell、Apple、DEC、SGI等,因此,Java语言被美国的著名杂志PC Magazine评为1995年十大优秀科技产品,(计算机类 就此一入选),随之大量出现了用Java编写的软件产品,受到工业界的重视与好 评,认为"Java是八十年代以来计算机界的一件大事"。

微软总裁比尔·盖茨在悄悄地观察了一段时间后,不无感慨地说:"Java是长 时间以来最卓越的程序设计语言",并确定微软整个软件开发的战略从PC单机时 代向着以网络为中心的计算时代转移,而购买Java则是他的重大战略决策的实 施部署。因此,Java的诞生必将对整个计算机产业发生深远的影响,对传统的计 算模型提出了新的挑战。

SUN MicroSystem公司的总裁Scott McNealy认为Java为Internet和WWW开辟了一个崭新的时代。

环球信息网WWW的创始人Berners-Lee说:"计算机事业发展的下一个浪潮 就是Java,并且将很快会发生的"。看来,使用Java已成大势所趋!

MicroSoft和IBM两大公司都计划在Internet上销售用Java编写的软件。Apple、HP、IBM、MicroSoft、Novell、SGI、SCO、Tandem等公司均计划将Java并入各自开发的操作系统,而负责开发并推广Java技术的SunSoft公司(这是 SUN下属的一个子公司),将通过颁发许可证的办法来允许各家公司把Java虚拟 机和Java的Applets类库嵌入他们开发的操作系统,这样各类开发人员就能更 容易地选择多种平台来使用Java语言编程,不同的用户也就可以脱离Web浏览器来运行Java应用程序,这无疑是很受广大用户欢迎的,也为Java语言的应用 开拓了极为广阔的前景。(当然,各类JavaOS之间的兼容性必须得到重视,好在JavaSoft已保证将监督这种兼容性)。

另外,由JavaSoft推出的完全用Java编写的Internet上新型浏览器 HotJava,比去年alpha版更为实用,不仅能编制动态的应用软件,而且能编制完整 的成套桌面应用软件,将来还会提供更多的能帮助编制动态应用软件的模块,显 然,这也是为Java的应用提供了有力的例证。

2.1.3 Java Bean简介

JavaBean是一种基于Java的软件组件,Java Bean和Active控件一样,可以通过封装业务逻辑建立一整套可重复利用的对象库。JSP对于在Web应用中集成JavaBean组件提供了完善的支持,这种支持不仅能缩短开发时间(可以直接利用经过测试和可信任的已有组件),避免重复开发,也为JSP应用带来了更多的可伸缩性。JavaBean组件可以用来执行复杂的计算任务,或负责与数据库的交互及数据提取等。

由于Java语言在这些方面所具有的特点和优势,使得基于它的软件JavaBean组件技术倍受人们关注。它的任务就是:一次编写,可以在任何地方执行,可以在任何地方重用。JavaBean组件可以在任何地方重用包括了可以在应用程序、其他组件、文档、Web站点和应用程序构造器工具等多种方案中再利用。

为了创建和使用Java软件组件,JavaBean被实现为一种独立于平台和结构的应用程序接口,它的实现可以忽略内部的结构和细节问题,只需定义其外部的特征及对外功能就行。其中,属性、方法和事件三种接口可以独立对外进行开发。

2.1.4 tomcat简介

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,目前最新版本是6.0.18(截止到2008-08-27)。

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、sun和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的servlet和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。

Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试jsp程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好apache服务器,可利用它响应对html页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

这里的诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat实际上运行JSP 页面和Servlet。另外,Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的      Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

2.2 开发工具

数据库原理网上授课平台是在J2EE的基础上,以JDK1.6.0_10和MyEclipse 6.5作为开发工具,用Macromedia Dreamweaver MX 2004和Adobe Photoshop设计、美化页面,用SQL Server2000作为后台数据库,Tomcat 6.0.16作为Web测试服务器进行开发设计的。

2.2.1 MyEclipse

MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。

在MyEclipse 6.5这个集成开发环境中,用户可以设计程序代码、运行程序、进行程序错误的调试等,可视化的开发方法降低了应用程序开发的难度。

2.2.2 Dreamweaver 和 Photoshop

Macromedia Dreamweaver MX 2004是一个可视化的网页设计和网站管理工具,支持最新的Web技术,美观用户界面,多重用户配置,增强的源代码编辑功能,扩展的文档格式支持,加强的服务器模式扩展,改进的数据库链接操作,提升了与外部应用程序的协作。Adobe Photoshop 7.0.1软件作为专业的图像编辑标准,可帮助制作适用于Web的最佳品质图像。

2.2.3 SQL Server 2000

SQL Server 2000是基于客户/服务器模式的新一代大型数据库管理系统(DBMS)。它在电子商务、数据仓库和数据库解决方案等应用中,起着重要的作用,可为企业的数据库提供有效的管理,并采用有效的措施实施数据完整性和数据的安全性。所以SQL Server 2000数据库管理系统正被越来越多的用户使用,并逐渐成为企业级数据库管理系统的主流产品。

2.2.4 Tomcat服务器

Tomcat 6.0.16是Sun的JSWDK(Java Server Web Development Kit)中免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。即当配置正确时,Tomcat实际运行*.jsp页面和servlet。

2.2.5 B/S模式

B/S(Browser/Server,浏览器/服务器)模式又称B/S结构。它是随着Internet技术的兴起,对C/S模式应用的扩展。在这种结构下,用户工作界面是通过IE浏览器来实现的。B/S模式最大的好处是运行维护比较简便,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据;最大的缺点是对企业外网环境依赖性太强,由于各种原因引起企业外网中断都会造成系统瘫痪。

B/S模式是指在TCP/IP的支持下,以HTTP为传输协议,客户端通过Browser访问Web服务器以及与之相连的后台数据库的技术及体系结构。它由浏览器、Web服务器、应用服务器和数据库服务器组成。客户端的浏览器通过URL访问Web服务器,Web服务器请求数据库服务器,并将获得的结果以HTML形式返回客户端浏览器。

2.3 硬件环境

操作系统:Microsoft Windows XP或更高版本。

CPU要求:CE1.0G以上。

内存:1G以上。

磁盘可用空间:2G以上。

第3章  系统可行性分析

3.1 技术可行性

《数据库原理网上授课平台》针对《数据库原理》课程的学习来开发。主要包括用户登录模块,用户注册模块,留言模块,视频管理模块,电子教案管理模块,在线答疑模块。

以上分析的功能完全可以通过用HTML语言设计前台页面,用Java编写应用程序,结合相关的JSP+Servlet技术进行开发设计来实现;采用Struts技术能大大减轻系统前期的开发工作以及后期的维护工作。

HTML(超文本置标语言,Hyper Text Markup Language)是为网页创建和其它可在网页浏览器中看到的信息设计的一种置标语言。

Java是可以编写跨平台应用软件的面向对象的程序设计语言,它具有易用和开发高效率的特点,而且提供了可视化的集成开发环境,这一环境为应用程序设计人员提供了一系列灵活而先进的工具,可以广泛地用于多种应用程序设计。

JSP(Java Server Pages)技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的Java库单元提供了一个接口来服务于Http的应用程序。由Jsp容器(如Tomcat)首先将其转化为Servlet,然后再调用Javac将Servlet编译为Class文件,服务器最终解释的是Class文件。

Servlet是运行在Web服务器或应用服务器上的Java程序,是一个特殊的Java类。Servlet类一般从HttpServlet类继承而来,在这个类中至少要实现doGet或者doPost函数,在这两个函数中处理来自客户的请求,然后将结果返回。Servlet和Jsp是Sun公司J2EE架构中重要的部分,由于基于Java语言,因此其可以方便地调用功能强大的Java API(如JDBC)。

Struts开发技术是用MVC模式处理系统呈现层,使得系统开发的分工更明显,便于系统日后的维护工作。

综上所述,使得开发本系统过程中不存在技术上的障碍,具有技术可行性。

3.2 经济可行性

由于本系统是个人为了通过实践,使所学的理论知识和实际操作相结合,提高自己的实际开发能力而做的。而且自己拥有一台完全可以用于开发本系统的计算机,所用软件全部都是免费的,加上现在的互联网资源丰富,学校的图书馆藏书有万册,完全可以找到自己所需的资料;学校给我们近半年的时间做毕业设计,所以从资源和时间上也是相对比较充足的。

所以,本系统投资极少,经济上是可行。

3.3 操作可行性

使用本系统的工作人员,只要拥有Windows平台的一些基本电脑知识就可以运用,并不需要什么特别的技术能力。而且,考虑到用户的电脑实际操作水平,尽可能地使系统的界面简洁、实用、美观。另外,有关于计算机操作方面的知识,使用本系统相关的操作人员都已经具备了,如果使用过程中有什么困难,只要进行短期的培训后便也可以应用自由。所以,本系统在操作上是可行的。

第4章  系统需求分析

4.1 现行业务

4.1.1 目标

《数据库原理网上授课平台》的目标是实现对学生可以下载电子教案,下载视频,上传作业,在线答疑,留言,注册。教师可以上传电子教案,上传视频,下载作业,返回改后作业,在线答疑,回复留言,发布公告等。

4.2 现行业务

根据以上的分析,再根据用户要求,得到系统的功能如下:

(1)        注册模块,学生需要先注册才能登录,注册免费。

(2)        登录模块,用户选择学生或教师身份后输入相应的用户名和密码。

(3)        电子教案模块,教师将数据库原理的电子教案放在网站里,学生可以在将电子教案下载下来。教师还可以删除电子教案。

(4)        视频模块,教师将数据库原理的讲课视频放在网站里,学生可以在将视频下载下来。教师还可以删除视频。

(5)        作业模块,学生将数据库原理作业上传到网站里,教师可以把各个学生的作业下载下来。然后再将批改后的作业上传,学生可以再下载改后的作业。

(6)        在线答疑模块,学生可以在线向教师提问问题,与老师在线交互。

(7)        留言模块,学生可以将自己对老师的想法留言告诉老师。老师也可以回复学生的留言。

(8)        公告模块,老师可以通过该模块向学生通知一些事情。

(9)        友情链接模块,教师可以将一些好的学习网站介绍给学生。

4.3 系统流程图

系统流程图是概括地描绘物理系统的传统工具,表达了数据在系统各部件之间流动的情况。系统按照业务活动中信息流动的过程,弄清楚所有环节的处理业务、处理内容、处理顺序和对处理时间的要求,弄清各环节需要的信息内容、信息来源、去向、处理方法和提供信息处理的时间和信息形态等。

第5章  系统设计

5.1 系统功能模块图

系统的用户分为学生和教师,分别有不同的功能。学生的功能有:电子教案管理,视频管理,作业管理,留言管理和在线答疑。教师有电子教案管理,视频管理,作业管理,留言管理,公告管理,友情链接管理,学生管理,在线答疑。对于每个管理模块的功能,学生和教师有不同的操作。

5.2 数据库结构设计

数据库是一个网站必不可少的一部分,数据库的完备决定了该网站成功与否,对于动态网站中基本的用户注册信息等各种动态部分的保存与调用是一个授课网站所必不可少的。由于考虑到数据库的熟悉程度以及Windows的操作系统,所以我购商城采用了适合中小型企业使用的小型数据库SQL Server2000数据库,数据库名称为mywork。本系统定义的数据库中包含以下8张表:tb_user(用户信息表)、tb_message(留言表)、tb_kejian(电子教案信息表)、tb_note(公告信息表)、tb_video(视频信息表)、tb_test(作业信息表)、tb_link(友情链接表)、tb_chat(聊天信息表).

第6章  系统详细设计

6.1 数据库连接

实现业务逻辑层与数据库的连接是通过JDBC技术,它是“Java Database Connectivity”的缩写。JDBC由一组用Java语言编写的接口和类组成,是对数据库操作的对象封装,可以实现与数据库的无关性。它以成为一种供数据库开发者使用的标准API。

6.1.1 JDBC的基本功能

a.建立与数据库的连接。

b.发送SQL语言。

c.处理数据库操作结果。

6.1.2 JDBC的特点

a.与SQL语言的一致性。它允许使用从属于任何DBMS的SQL语言;提供ODBC风格的转义语句;利用DatabaseMetaData接口提供关于DBMS的描述性信息,从而使应用程序能适应每个DBMS。

b.可在现有数据库上实现。

c.提供与其它Java系统一致的界面。这说明开发人员可以采用一致的编程界面来处理数据库编程。

d.简单化。

e.使用静态的通用数据类型。

f.多方法,多功能。

6.1.3 JDBC的驱动类型:

a.JDBC-ODBC桥驱动程序。

b.调用本地数据库应用编程接口驱动程序。

c.数据库中间件纯Java驱动程序。

d.直接连接数据库的纯Java驱动程序。

6.1.4将连接数据库的代码封装在一个JavaBean中

DBconn.java代码如下:

package com.soul.struts.tool;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class DBconn {

private String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; //数据库的驱动

private String url = "jdbc:odbc:mydb"; //URL地址

private Connection conn = null ;

//无参构造器,利用它来加载数据库连接对象

public DBconn() {

try {

Class.forName(driver); //加载数据库驱动

conn = DriverManager.getConnection(url); //加载数据库连接对象

}

catch (Exception e) {

System.out.println("数据库加载失败");

}

}

public Connection getConn() {

return conn;

}

// 关闭数据库结果集

public static void closeRs(ResultSet rs) {

try {

if(rs != null) {

System.out.println("关闭数库结果集");

rs.close();

rs = null;

}

} catch (SQLException e) {

e.printStackTrace();

}

}

//关闭数据库操作对象

public static void closePstmt(PreparedStatement pstmt) {

try {

if(pstmt != null) {

System.out.println("关闭数库操作对象");

pstmt.close();

pstmt = null;

}

} catch (SQLException e) {

e.printStackTrace();

}

}

//关闭数库连接对象

public static void closeConn(Connection conn) {

try {

if(conn != null) {

System.out.println("关闭数库连接对象");

conn.close();

conn = null;

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

6.2 系统功能模块的设计与实现

6.2.1 用户注册模块

当用户提出注册请求,系统显示用户注册页面,提示用户输入个人信息,用户输入个人信息,系统验证其信息是否符合要求,如果用户输入的个人信息不符合系统要求,则系统显示错误信息并要求用户重新填写个人信息,用户重新填写信息,或者取消注册,注册成功系统将用户信息写入数据库,页面将经一个显示注册成功的页自动进入登录界面。

要实现用户信息验证功能,主要是通过客户端页面上的JavaScript和服务器端验证,例如验证用户输入的用户名在数据库中是否已存在,如果已存在则在提交的时候会给出提示“用户名已存在”,就要求重新注册。客户端页面上的javascript代码如下:

在服务器端验证时,RegisterAction 调用 RegisterManager类中的addUser方法.addUser会先调同类中的hasUser方法来验证用户是否已存在。关键代码如下:

public boolean hasUser(String user_name) throws Exception{

Connection conn = null;

DBconn db = new DBconn();

PreparedStatement pstmt= null;

ResultSet rs = null;

try{

conn = db.getConn();

pstmt = conn.prepareStatement(Sql.registCheck_tb_user);

pstmt.setString(1,user_name);

rs=pstmt.executeQuery();

rs.next();

int n = rs.getInt(1);

if(n==1){

System.out.print("用户名存在,返回true");

return true;

} else {

System.out.print("用户名不存在,返回false");

return false ;

}

}catch(SQLException e){

e.printStackTrace();

throw e;

}finally{

DBconn.closeRs(rs);

DBconn.closePstmt(pstmt);

DBconn.closeConn(conn);

}

}

6.2.2 登录模块

在登录模块中分为教师登录和学生登录,只有输入正确的用户名和密码才能进入系统。在登录发生错误时会出现相关的提示信息,如用户名或密码错误。当教师登录成功后进入主页可以进行电子教案管理,视频管理,作业管理,在线答疑,留言管理等相关的操作。学生登录成功后进入主页可以查看,下载电子教案和视频,在线向教师提问,上传作业等相关操作。

用户登录模块是系统的入口,用户登录模块应具有以下功能:

获得用户权限。登录模块做为系统的入口,需要对权限进行控制。不同身份登录获的不同的使用权。本系统分为教师用户和学生用户两种权限。教师用户登录后可以进行电子教案管理,视频管理,作业管理,在线答疑,留言管理等相关的操作;学生用户登录成功后可以查看,下载电子教案和视频,在线向教师提问,上传作业等相关操作。网站首页默认为学生用户登录页面。教师用户登录可以点页面中的“教师登录”进入教师登录页面。

验证用户的用户名和密码。系统在登录过程中必须输入其正确的用户名和密码,登录模块会对其进行核对。如果用户的用户名或密码错误则提示信息“用户名或密码错误”并返回用户登录界面。

为实现学生登录功能,要根据用户输入的用户名和密码判断是否是合法用户。于是创建一个LoginAction类。调用UserManager类中的validate(String name,String password)方法:

public boolean validate(String name,String password) throws Exception {

Connection conn = null;

DBconn db = new DBconn();

PreparedStatement pstmt = null;

ResultSet rs = null;

try {

conn = db.getConn();

pstmt = conn.prepareStatement(Sql.login_tb_user);

pstmt.setString(1,name);

pstmt.setString(2,password);

rs = pstmt.executeQuery();

rs.next();

int n = rs.getInt(1);

if(n==1)

{

return true;

} else {

return false;

}

}catch(SQLException e){

e.printStackTrace();

throw e;

}finally{

db.closeRs(rs);

db.closePstmt(pstmt);

db.closeConn(conn);

}

}

本系统的教师登录模块采用了固定的用户名和密码。为实现它,我创建了一个AdminLoginAction类,调用AdminManager类中的方法:

public boolean validate(String name, String password)

{

if (("admin".equals(name))&&("admin".equals(password)))

{

System.out.print("正确!");

return true;

}else

{

System.out.print("错了");

return false;

}

}

如果教师输入的用户名或密码有误则会有提示:"用户名或密码不匹配,请重新登录!"接着页面会跳到教师登录页面。

鉴于对系统安全的考虑,用户使用系统必须先到登录页面进行身份验证,通过登录窗口用户输入用户名和密码,只有输入正确的用户名和密码后用户才能进入系统。

6.2.3 电子教案管理模块

a.电子教案管理模块分为学生用户主页的电子教案管理和教师用户主页的电子教案管理。教师成功登录后,在教师用户主页中的电子教案管理模块,教师可以上传新电子教案,也可以删除以前传过的旧电子教案。点击“上传电子教案”就会进入到电子教案上传的页面,教师点击“浏览”选择要上传的电子教案,然后点上传就完成了一个电子教案的上传。创建了一个继承于DispatchAction的UpLoadAction类,该类用于上传和下载文件。关键代码如下:

UpLoadForm uploadFile = (UpLoadForm)form;

FormFile file = uploadFile.getFile();

String uuidName = UUID.randomUUID().toString();

String kejian_Name = uuidName+file.getFileName();

String kejian_Time =uploadFile.getKejian_Time();

ServletContext servletContext = this.getServlet().getServletContext();

String path = servletContext.getRealPath("");

FileOutputStream out = new FileOutputStream(path+"/uploadC/"+ kejian_Name);

out.write(file.getFileData());

out.flush();

out.close();

UpLoadManager ulm = new UpLoadManager();

boolean flag = ulm.kejianAdd(video_Name, video_Time);

if(flag)

{

request.setAttribute("currentTime", new Date());

request.setAttribute("upload", "success");

retur, , n mapping.findForward("upload");

}

request.setAttribute("upload", "fail");

return mapping.findForward("AuploadC");

path表示得到当前项目下webRoot 的路径,为了保存视频,在webRoot下建立了一个名为uploadV的文件夹,考虑到一处编写到处运行的java语言初衷,把视频保存在tomcat服务器下.代码中的FormFile类,是映射上传文件的,对你上传的文件进行操作,可以取得文件的名字,文件的内容等。由于怕上传的电子教案的名的字会相同,于是用个UUID类。用UUID.randomUUID()给文件名加一个随机的32位的不会重复的数字。上传成功的电子教案会存在服务器的uploadC文件夹中。

6.2.4 公告管理模块

站内公告管理小模块主要功能是管理站内公告,教师可通过公告管理模块向学生们发布通知,也可以删除通知。 这是一个小模块,因此创建Back_NoteAction类调用NoteManager类中的add()方法向数据库中添加公告内容:

public boolean add(String note_title,String note_content,String note_time) throws Exception{

Connection conn = null;

DBconn db = new DBconn();

PreparedStatement pstmt= null;

try{

conn = db.getConn();

pstmt = conn.prepareStatement(Sql.add_tb_note);

pstmt.setString(1,note_title);

pstmt.setString(2,note_content);

pstmt.setString(3,note_time);

int n=pstmt.executeUpdate();

if(n==1){

return true;

} else {

return false;

}

}catch(SQLException e){

e.printStackTrace();

throw e;

}finally{

DBconn.closePstmt(pstmt);

DBconn.closeConn(conn);

}

}

学生的主页是由主页中include进去几个页组成的。所以要在用户的页面中显示公告,创建了一个Head_MainAction类,在该类中的show方法中使用 request.getSession().setAttribute("list_note", list_note);将list_note放在session中的。于是只要浏览器不关,在任何一个显示页面都能取到用EL表达${lsit_note}取得。

6.2.5 留言管理模块

在教师的留言管理模块中,教师可以回复留言和删除留言。学生只可以查看留言和留言。教师用户创建了一个Back_MessageAction类,调用MessageManager中的诸方法来添加或删除留言。学生用户创建了一个Head_MessageAction类,调用MessageManager中某些方法。在学生显示留言页面要分我利用了jstl加EL表达式分页,关键代码如下:

MessageActionForm maf = (MessageActionForm)form;

MessageManager mm = new MessageManager();

ArrayList list = mm.query();

int pageSize = list.size() / 4 + 1;

ArrayList list1 = new ArrayList();

int begin = 0;

int end = 3;

int currentPage = 1;

//---从页面得到数据---

if(maf.getCurrentPage()!=1&&maf.getCurrentPage()!=0)

{

begin = maf.getBegin();

end = maf.getEnd();

currentPage = maf.getCurrentPage();

}

maf.setBegin(begin);

maf.setEnd(end);

maf.setCurrentPage(currentPage);

list1.add(maf);

request.setAttribute("currentTime", new Date());

request.setAttribute("list", list);

request.setAttribute("list1", list1);

request.setAttribute("pageSize", Integer.valueOf(pageSize));

return mapping.findForward("showmessage");

6.2.6 视频管理模块

视频管理模块分为学生用户主页的视频管理和教师用户主页的视频管理。教师成功登录后,在教师用户的主页中的视频管理模块,教师可以上传新的视频,也可以删除以前传过的视频。点击“上传视频”就会进入到电子教案上传的页面,教师点击“浏览”选择要上传的视频,然后点上传就完成了一个视频的上传。上传视频的关键代码如下:

UpLoadForm uploadFile = (UpLoadForm)

form;

FormFile file = uploadFile.getFile();

String uuidName = UUID.randomUUID().toString();

String video_Name = uuidName+file.getFileName();

String video_Time = uploadFile.getVideo_Time();

System.out.println("时间="+video_Time);

ServletContext servletContext = this.getServlet().getServletContext();

String path = servletContext.getRealPath("");

FileOutputStream out = new FileOutputStream(path+"/uploadV/"+video_Name);

out.write(file.getFileData());

out.flush();

out.close();

UpLoadManager ulm = new UpLoadManager();

boolean flag = ulm.videoAdd(video_Name, video_Time);

if(flag){

request.setAttribute("currentTime", new Date());

request.setAttribute("upload", "success");

return mapping.findForward("upload");

}

request.setAttribute("upload", "fail");

return mapping.findForward("AuploadV");

path表示得到当前项目下webRoot 的路径,为了保存视频,在webRoot下建立了一个名为uploadV的文件夹,把视频保存在tomcat服务器下。同时为避免出现相同文件名的视频名字,每个视频上传之前在视频名前加了一段唯一的UUID字符编码,对应数据可存入tb_video表中的video_Name字段,将来在显示视频的详细信息时同样根据video_Name来寻找视频。

学生下载视频,用video_Name查找下载视频。下载视频的代码如下:

UpLoadForm ulf = (UpLoadForm)form;

String video_Name = ulf.getVideo_Name();

video_Name = new String(video_Name.getBytes("ISO-8859-1"),"GB18030");

ServletContext servletContext = this.getServlet().getServletContext();

String path = servletContext.getRealPath("");

FileInputStream inPut = new FileInputStream(path+"/uploadV/"+video_Name);

response.setContentType("application/x-msdownload");

response.setHeader("Content-Disposition", "attachment; filename=" + new String(video_Name.getBytes("GB18030"),"ISO-8859-1"));

OutputStream out = response.getOutputStream();

byte[] b = new byte[1024*1024];

while(inPut.read(b)>0){

out.write(b);

out.flush();

}

inPut.close();

out.close();

教师可以根据video_Name删除某些视频,调用delVideo()方法将相关信息删除。关键代码如下:

UpLoadForm ulf = (UpLoadForm)form;

String video_Name = ulf.getVideo_Name();

ServletContext servletContext = this.getServlet().getServletContext();

String path = servletContext.getRealPath("");

File  filename = new File(path+"/uploadV/"+video_Name);

filename.delete();

UpLoadManager um = new UpLoadManager();

boolean flag = um.delVideo(video_Name);

6.2.7 作业管理模块

本模块在学生用户的主页是学生将自己的作业上传到服务器下的uploadT文件夹中,还可以下载老师批改后上传的作业。在教师用户的主页中老师将学生上传的作业下载下来,之后再将批改好的作业上传到服务器中,供学生下载。上传作业与上传视频类似,只不过多了个String user_name = uploadFile.getUser_name();用来收集上传试卷的用户名。关键代码如下:

UpLoadForm uploadFile = (UpLoadForm)form;

FormFile file = uploadFile.getFile();

String test_Name = file.getFileName();

String test_Time = uploadFile.getTest_Time();

String user_name = uploadFile.getUser_name();

System.out.println("时间="+test_Time);

ServletContext servletContext = this.getServlet().getServletContext();

String path = servletContext.getRealPath("");

FileOutputStream outPut = new FileOutputStream(path+"/uploadT/"+file.getFileName());

outPut.write(file.getFileData());

outPut.flush();

outPut.close();

UpLoadManager ulm = new UpLoadManager();

boolean flag = ulm.testAdd(test_Name, test_Time,user_name);

6.2.8 在线答疑模块

在这个模块中学生和教师可以在线交流,学生可以向老师在线提出问题,老师将在线回答。

学生或者教师将说的话发送,将先存到数据中,随之再将数据库中的后20条记录取出,在message.jsp中显示。在线答疑页面的主要代码如下:

order="1">

6.2.9 友情链接管理模块

教师还可将自己知道的一些好的网站添加到网站里,把友情链接的网名和网址添加进去,学生会在页面上看见添加进的网站名字,用户可以点网站名进入相应的网站。

为了方便管理和安全,将所有的sql语句都封装在一个Sql类中,并且每条语句都定义成public static final类的,这样就不允许有别的语句继承它们。具体的代码如下:

public final class Sql {

//用户登录

public static final String login_tb_user = "select count(*) from tb_user where user_name=? and user_password=?";

//用户注册向数库数中增加数据

public static final String registAdd_tb_user ="insert into tb_user (user_name,user_password,realname,email)" +"values(    ?,          ?,           ?,         ?  )";

//    public static final String queryId_tb_user ="select user_id from tb_user where user_name=?";

public static final String registCheck_tb_user="select count(*) from tb_user where user_name=?";

public static final String add_tb_articleType="insert into tb_articleType (typeName,description) values(?,?)";

public static final String query_tb_articleType="select * from tb_articleType";

public static final String del_tb_articleType="delete from tb_articleType where type_id=?";

public static final String add_tb_article="insert into tb_article (title,type_id,content,phTime,number) values(?,?,?,?,?)";

public static final String del_tb_article="delete from tb_article where article_id=?";

public static final String query_Article="select * from tb_article";

public static final String show_Article="select tb_article.*,tb_articleType.* from tb_article,tb_articleType where (tb_article.type_id=tb_articleType.type_id and tb_article.type_id=? and article_id=?)";

public static final String xin="select tb_article.*,typeName,description  from tb_article left join tb_articleType on (tb_article.type_id=tb_articleType.type_id)";

public static final String add_tb_note="insert into tb_note (note_title,note_content,note_time) values(?,?,?)";

public static final String query_tb_note="select * from tb_note";

public static final String del_tb_note="delete from tb_note where note_id=?";

public static final String show_tb_note="select * from tb_note where note_id=?";

public static final String update_tb_note="update tb_note set note_content=? ,note_time=? where note_id=?";

public static final String update_tb_article= "update tb_article set content=? ,phTime=? where article_id=?";

public static final String query_tb_user = "select user_id,user_name,realname,email from tb_user";

public static final String del_tb_user = "delete from tb_user where user_id=?";

public static final String query_tb_message = "select *  from tb_message order by mes_id";

public static final String delone_tb_message = "delete from tb_message where mes_id=?";

public static final String delall_tb_message = "delete from tb_message";

public static final String reply_tb_message = "insert into tb_message (mes_content,mes_sender,mes_sendTime,to_whom) values(?,?,?,?,?)";

public static final String add_tb_link = "insert into tb_link (link_name,link_add) values (?,?)";

public static final String del_tb_link = "delete from tb_link where link_id=?";

public static final String query_tb_link = "select link_id,link_name,link_add from tb_link";

//     public static final String part_Article = "select article_id,title,content,phTime,number from tb_article order by article_id desc";

public static final String part_Article = "select article_id,title,content,phTime,number,typeName from tb_article left join tb_articleType on (tb_article.type_id=tb_articleType.type_id) order by article_id desc";

public static final String show_link = "select * from tb_link ";

public static final String show_note = "select * from tb_note order by note_id desc";

public static final String add_tb_video = "insert into tb

_video (video_Name,video_Time) values(?,?)";

public static final String add_tb_test = "insert into tb_test (test_Name,test_Time,user_name) values(?,?,?)";

public static final String query_tb_video = "select video_Name,video_Time from tb_video order by video_id desc";

public static final String query_tb_test = "select test_Name,test_Time,user_name from tb_test order by test_id desc";

public static final String del_tb_video = "delete from tb_video where video_Name=?";

}

第7章  开发中遇到的难点和对策

a. 数据库的连接问题

问题:数据库的连接:在开发过程中经常出现查找不到数据库,出现这样的错误一般是数据库的连接出现问题。

数据库加载驱动有问题。一开始用的是

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();

Stirng url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mywork";

要求有三个库文件:msbase.jar,mssqlserver.jar,msutil.jar,该文件需要放在服务器的/WEB-INF/lib文件夹下面.

解决方法:经检查发现1433端口没有打开,于是就换成下面的ODBC-JDBC桥驱动:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

String url="jdbc:odbc:mydb";

Connection con=DriverManager.getConnection("jdbc:odbc:mywork");

换成这个驱动就可以连上数据库了。

b. 从数据库中查询信息时会出错

问题:把查询的结果集rs放在ArrayList的对象list中,可是在jsp页面中调用的时候却没有值。

解决方法:经检查发现,向maf中set相应属性时,顺序必须跟sql查询语句中的查询的顺序一样才可以。

while(rs.next()){

maf = new MessageActionForm();

maf.setMes_id(rs.getInt("mes_id"));                  //1

maf.setMes_title(rs.getString("mes_title"));                    //2

maf.setMes_content(rs.getString("mes_content"));      //3

maf.setMes_sender(rs.getString("mes_sender"));        //4

maf.setMes_sendTime(rs.getString("mes_sendTime"));  //5

list.add(maf);

}

第8章  总结及未来展望

8.1 总结

《数据库原理网上授课平台》采用B/S模式, 在研究当前网站的基础上,经过详细调研后,确定了系统设计的领域,包括系统设计、数据库设计、程序设计等;通过采用面向对象设计的思想,用Java程序语言和JSP+STRUTS等相关技术进行开发设计;本系统主要完成了用户登录模块,用户注册模块,留言模块,视频管理模块,电子教案管理模块,在线答疑模块。该系统完成了用户可以下载电子教案,视频,在线向管理员提问。 利用SQL Server 2000+JSP+Struts框架开发的,便于维护。同时为网站的用户提供友好的操作界面以及操作的灵活性,使用户能轻松地完成相应操作。

在系统的开发过程中也遇到了许多困难和问题,数据库的连接、数据写入数据库时出错、在调度中出现字符不匹配、页面的设计等。处理数据库的连接是通过建立数据源和JSP中的连接语句实现的,数据的处理是通过SQL语言完成的,而页面的设计通过HTML和Dreamweaver对其进行设计。

在本次开发过程中涉及到了许多新东西,也遇到了许多问题,经过和老师与同学的交流以及自己的努力解决了这些问题。在本次开发过程中使我很好的掌握了JSP+STRUTS等相关技术和SQL Server 2000,给我以后的学习带来了极大的帮助。

8.2 展望

由于这次毕业设计时间紧迫,加之自己的水平有限,系统设计得比较简单,有些方面都没有来得及实现,在以后的学习和实践中我会加以丰富。

(1)为了数据安全,在本系统中只有对该系统所用到的数据库进行备份,而没有对应的数据恢复和数据清理机制,为了能够使得系统数据不至于在遇到误操作时无法恢复,应设计数据恢复功能模块,并及时对数据进行定时的清理。并且此次设计也没有数据参照完整性问题。今后要注意这个问题,要把数据库部分做的更加安全。

(2)“在线答疑”学生提交问题,存入数据库,教师显示页面每隔一秒自动刷新,调用ChatAction类中的方法从数据库中查询结果的在教师显示页面中显示。后因用了frame把几个页面放在一个页面中出了错,所以基本未实现。今后要将其完成。做的更完美一些。

(3)本系统只用了Struts框架,为了使系统更好,应该使用Struts+Spring+Hibernate三大框架。

(4)在用户模块中,由于用户需求不同,系统应具有更好的扩展功能来完善,如增加密码找回功能等,更好的满足用户的需求。

参考文献

[1] 张海藩. 软件工程导论(第四版)[M]. 北京:清华大学出版社,2003.12

[2] Johannes Gehrke(美). 数据库系统概念[M]. 北京:清华大学出版社,2004.10

[3] Paul Dubois(美). 网络数据库指南[M]. 北京:机械工业出版社,2000.1

[4]Marty Hall,Larry Brown(美). Servlet与JSP核心编程(第2版)[M]. 北京:清华大学出版社,2004.6

[5] 汪晓平,俞俊,李功. 精通Java网络

编程[M]. 北京:清华大学出版社,2005.9

[6] 李载甲. JSP完全探索[M]. 北京:中国青年出版社,2001.1

[7] Y.Daniel Liang(美). Java编程原理与实践(第4版)[M]. 北京:清华大学出版社,2005.8

[8] 4U2V工作室. Dreamweaver网页设计与制作100例[M]. 北京:人民邮电出版社出版,2004.8

[9] 刘晓华,张健,周惠贞. JSP应用开发详解[M]. 北京:电子工业出版社,2002.1

[10] 赵辉,李建国. JSP开发技术原理与实践教程[M].北京:电子工业出版社

[11] 宋梅,张学平. 深入浅出J2EE架构[M].北京:清华大学出版社

[12] 王林玮. JSP网络开发技术与案例应用[M].北京:机械工业出版社, 2000.1

[13] 新东方教育科技集团.基于struts的web应用开发.西安:新东方教育科技集团

上文就是精品学习网给您带来的JSP论文:浅论数据库原理网上授课平台,希望可以更好的帮助到您!!

相关推荐:

JSP论文:浅谈公共体育课程管理系统的设计与实现 

标签:JSP论文

免责声明

精品学习网(51edu.com)在建设过程中引用了互联网上的一些信息资源并对有明确来源的信息注明了出处,版权归原作者及原网站所有,如果您对本站信息资源版权的归属问题存有异议,请您致信qinquan#51edu.com(将#换成@),我们会立即做出答复并及时解决。如果您认为本站有侵犯您权益的行为,请通知我们,我们一定根据实际情况及时处理。