jsp545小说阅读网站(jsp+sqlserver)论文_第1页
jsp545小说阅读网站(jsp+sqlserver)论文_第2页
jsp545小说阅读网站(jsp+sqlserver)论文_第3页
jsp545小说阅读网站(jsp+sqlserver)论文_第4页
jsp545小说阅读网站(jsp+sqlserver)论文_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGEIII目录第1章绪论 1课题的研究背景、内容和意义 1第2章主要技术概述 32.1B/S结构 32.2JSP技术 42.2.1JSP技术的强势 52.2.2JSP技术的弱势 52.3SQLServer2000数据库 52.4JDBC数据库连接 62.4.1JDBC接口 72.4.2JDBC的驱动程序 72.5TOMCAT应用服务器 8第3章需求分析 103.1.1用户及主要操作功能 103.1.2系统角色管理模块 10包括系统管理员模块和会员模块 103.1.3网络小说管理模块 103.1.4公告模块 113.2系统性能需求分析 113.3开发环境及开发工具 11第4章概要设计 124.1系统的体系结构 124.2系统功能结构设计 124.2.1管理员模块 144.2.2会员模块 144.3系统流程图 154.3.1会员管理 154.4数据库设计 16第5章详细设计 195.1公告管理模块 195.1.1浏览公告 195.1.2发布公告 205.1.3管理公告 215.2会员模块 235.2.1会员注册 235.2.2点券充值 25点券充值的核心代码如下: 255.2.3搜索和下载小说 275.3小说管理模块 295.3.1网络小说类别的管理 295.3.2网络小说管理 315.3留言版模块 335.4通用模块 345.4.1登录、修改个人信息及注销退出 355.4.2数据库的连接接 355.5小结 37第6章系统测试 386.1公告管理模块 386.1.1公告的浏览 386.1.2公告的添加 386.1.3公告的编辑、删除 386.2会员管理模块 386.2.1成员注册 386.2.2点券充值 396.2.3搜索小说 396.3小说管理模块 396.3.1网络小说类别的管理 396.3.2网络小说管理 396.3.3留言版 39第7章结论与展望 40参考文献 41致谢 42石家庄铁道大学毕业设计PAGE36第1章绪论课题的研究背景、内容和意义网络小说代表人们所阅读的数字化出版物,从而区别于以纸张为载体的传统出版物,网络小说是利用计算机技术将一定的文字、图片、声音、影像等信息,通过数码方式记录在以光、电、磁为介质的设备中,借助于特定的设备来读取、复制、传输,已经为人们所熟悉。众所周知,自20世纪80年代以来,电子图书的出现和迅速发展已经引起社会各界的普遍关注。在信息社会化和社会信息化的今天,电子图书极大地刺激了传统图书出版、发行市场,改变了读者阅读习惯,给人类社会文化和社会生活带来了深刻的变革。一般情况下,阅读电子图书主要有两种形式,一种是在线或在PC机上阅读,即通过台式电脑或笔记本电脑直接阅读网站提供的免费或付费的电子图书,也可以下载到本地计算机上阅读;另一种是离线或脱机阅读,即通过使用专用的手持阅读器阅读。手持阅读器具有体积小,分量轻,容易携带的特点,不受时间、地点、环境的限制。而且,随着阅读器材技术、内容、格式的日臻完善,电子图书必将展示其更为广阔的发展空间。对比传统的图书出租的书店,网络小说阅读平台有许多的优越性。对阅读者来说,方便了大家阅读图书的途径,不必走出家门,只需有一台电脑,一根网线,连上网就可以访问因特网上大量的网络小说网站。随着因特网发展和上网用户的增加,农村也已开始有越来越多的网络连接,上网早已不是难事,所以,一个网络的网络小说阅读平台可以适应大众的需求。对于管理者来说,便于管理,运营成本低,没有地域限制。总之,网络小说阅读平台有着很高的灵活性和方便性,随着社会的发展,会为越来越多的人所接受,有着极高的应用前景。在国外,电子图书的发展体现在阅读软件和阅读硬件两个方面。阅读软件主要指在线阅读器,阅读硬件一般是手持式阅读器,也包括手机。各软硬件生产厂商为了更好的吸引消费者,在这上面都下了不小的精力来完善自己产品的功能,保证产品质量和提高其可用性,竞争也比较激烈。在国内,最为普遍的网络小说阅读终端是PC,手机阅读网络小说的方式也在逐渐增加,而专用的手持阅读器还有待推广。国内已经出现了很多的网络小说网站,比较出名的有晋江文学、潇湘书院、网络小说阅读网等,内容包括一些原创,各类网络小说和国内外名著。为了自身发展,网站往往和一些网络作家签约,网络作家在签约网站发表自己的原创并获得不低的著作费,这样也丰富了网站的内容,更好地吸引读者,达到双赢的目的。网站盈利的方式主要是向读者收取阅读费,收费方式不尽相同,一般分为按字数收取,按本数收取和按时间收取费用,所以,拥有一个广大的用户群是保证网站持续良好发展的基础。网站也可以靠出租广告位置获得额外的利益,但是过多的广告,会影响网页的美观简洁,一些弹窗广告甚至会影响读者的操作,给用户造成不必要的麻烦,所以广告的投放一般不会过多

第2章主要技术概述2.1B/S结构 B/S是Brower/Server就是用浏览器(如IE)为应用程序客户端操作服务器。这样用浏览器来操作简单易用,但是对输入没有很好的验证。逻辑实现不多。本地只是用于获取数据然后大部分验证需要提交服务器来完成。B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构[4]。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。B/S架构软件的优势与劣势:(1)维护和升级方式简单。目前,软件系统的改进和升级越来越频繁,B/S架构的产品明显体现着更为方便的特性。对一个稍微大一点单位来说,系统管理人员如果需要在几百甚至上千部电脑之间来回奔跑,效率和工作量是可想而知的,但B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。无论用户的规模有多大,有多少分支机构都不会增加任何维护升级的工作量,所有的操作只需要针对服务器进行;如果是异地,只需要把服务器连接专网即可,实现远程维护、升级和共享。所以客户机越来越“瘦”,而服务器越来越“胖”是将来信息化发展的主流方向。今后,软件升级和维护会越来越容易,而使用起来会越来越简单,这对用户人力、物力、时间、费用的节省是显而易见的,惊人的。因此,维护和升级革命的方式是“瘦”客户机,“胖”服务器。(2)成本降低,选择更多。大家都知道windows在桌面电脑上几乎一统天下,浏览器成为了标准配置,但在服务器操作系统上windows并不是处于绝对的统治地位。现在的趋势是凡使用B/S架构的应用管理软件,只需安装在Linux服务器上即可,而且安全性高。所以服务器操作系统的选择是很多的,不管选用那种操作系统都可以让大部分人使用windows作为桌面操作系统电脑不受影响,这就使的最流行免费的Linux操作系统快速发展起来,Linux除了操作系统是免费的以外,连数据库也是免费的,这种选择非常盛行。(3)应用服务器运行数据负荷较重。由于B/S架构管理软件只安装在服务器端(Server)上,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器(Server)端完全通过WWW浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。但是,应用服务器运行数据负荷较重,一旦发生服务器“崩溃”等问题,后果不堪设想。因此,许多单位都备有数据库存储服务器,以防万一。2.2JSP技术JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户。插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能。JSP与Java

Servlet一样,是在服务器端执行的,通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览[5]。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。JavaServlet

是JSP的技术基础,而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。自JSP推出后,众多大公司都支持JSP技术的服务器,如IBM、Oracle、Bea公司等,所以JSP迅速成为商业应用的服务器端语言。2.2.1JSP技术的强势(1)一次编写,到处运行。除了系统之外,代码不用做任何更改。(2)系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/PHP的局限性是显而易见的。(3)强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。(4)多样化和功能强大的开发工具支持。这一点与ASP很像,Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。(5)支持服务器端组件。web应用需要强大的服务器端组件来支持,开发人员需要利用其他工具设计实现复杂功能的组件供web页面调用,以增强系统性能。JSP可以使用成熟的JAVABEANS组件来实现复杂商务功能。2.2.2JSP技术的弱势(1)与ASP一样,Java的一些优势正是它致命的问题所在。正是由于为了跨平台的功能,为了极度的伸缩能力,所以极大的增加了产品的复杂性。(2)Java的运行速度是用class常驻内存来完成的,所以它在一些情况下所使用的内存比起用户数量来说确实是“最低性能价格比”了。从另一方面,它还需要硬盘空间来储存一系列的.java文件和.class文件,以及对应的版本文件。2.3SQLServer2000数据库SQLServer2000是Microsoft公司推出的SQLServer数据库管理系统的一个版本。该版本继承了SQLServer7.0版本的优点同时又比它增加了许多更先进的功能,具有使用方便,可伸缩性好与相关软件集成程度高等优点,可跨越从运行MicrosoftWindows98的膝上型电脑到运行MicrosoftWindows2000的大型多处理器的服务器等多种平台使用。SQLServer2000系统之间之所以成为目前流行的大型商用数据库系统,有着其深刻的内在因素,这与它鲜明的特点是分不开的:=1\*GB3①与Internet的高度集成。SQLServer2000与其它MicrosoftBackOffice产品紧密集成,在安全、事件浏览、WindowsNT服务程序、性能监视器、多处理器支持、索引服务器等方面充分利用了它们的长处,形成了自己独特的优势。=2\*GB3②高伸缩性和适应性。同一SQLServer2000数据库引擎运行在Windows2000Professional、Windows2000Server、Windows2000AdvancedServer、Windows98和WindowsMillenniumEdition上。还运行在WindowsNT4.0版的所有版本上。此数据库引擎是一个功能强健的服务器,可管理供上千用户访问的TB数据库。同时,当以默认设置运行时,SQLServer2000还具有动态自调整等功能,这使得它可以有效地运行在便携式电脑和台式机中,用户无需承担管理任务。SQLServer2000WindowsCE版将SQLServer2000程序设计模型扩展到移动的WindowsCE设备上,并且可以很容易地集成到SQLServer2000环境中。=3\*GB3③企业级数据库功能强。SQLServer2000关系数据库引擎支持当今苛刻的数据处理环境所需的功能。数据库引擎充分保护资料完整性,同时将管理上千个并发修改数据库的用户的开销减到最小。SQLServer2000分布式查询使您得以引用来自不同资料源的资料,就好象这些资料是SQLServer2000数据库的一部分,同时分布式事务支持充分保护任何分布式资料更新的完整性。复制同样使您得以维护多个资料复本,同时确保单独的资料复本保持同步。可将一组资料复制到多个移动的脱接用户,使这些用户自主地工作,然后将他们所做的修改合并回发布服务器。=4\*GB3④易于安装和使用。SQLServer2000中包括一系列管理和开发工具,这些工具可改进在多个站点上安装、部署、管理和使用SQLServer的过程。SQLServer2000还支持基于标准的、与WindowsDNA集成的程序设计模型,使SQLServer2000数据库和资料仓库的使用成为生成强大的可伸缩系统的无缝部分。=5\*GB3⑤具有决策支持的资料仓库。SQLServer2000提供了数据转换服务、联机分析处理(OLAP)、数据挖掘支持、EnglishQuery、MetaDataServices等等工具,以便对数进行析取、分析汇总资料并对数据库的设计提供帮助。2.4JDBC数据库连接JDBC(JavaDataBaseConnectivity)称为Java数据库连接,它是一种用于数据库访问的应用程序API,由一组用Java语言编写的类和接口组成。JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一个标准的API,使他们能够用纯JavaAPI来编写数据库应用程序。JDBC定义了Java语言同SQL数据之间的程序设计接口。JDBC有一个非常独特的动态连接结构,它使得系统模块化。使用JDBC来完成对数据库的访问包括以下四个主要组件:Java的应用程序、JDBC驱动器管理器、驱动器和数据源。简单地说,JDBC可做三件事:与数据库建立连接、发送SQL语句,处理结果。2.4.1JDBC接口一般来说,JDBCAPI中有两层接口:应用程序层,开发人员用API通过SQL调用数据库和取得结果;驱动程序层,处理与具体驱动程序版本的所有通讯。JDBCAPI是一系列抽象的接口,应用程序开发人员通过它可以编写访问数据库的Java应用程序。JDBCAPI中,抽象类的实现是由驱动程序开发商提供的。驱动程序实现了应用程序和某个数据库产品之间的接口,它的管理器则对应用程序和驱动程序之间的交互进行控制。JDBCAPI主要用来连接数据库和直接调用SQL命令,执行各种SQL语句。利用JDBCAPI可以执行一般的SQL语句、动态SQL语句,以及带IN和OUT参数的存储过程。JDBCAPI是一个标准统一的SQL数据存取接口,它为Java程序提供了一个统一无缝地操作各种数据库的接口,程序员编程时,可以不关心它所要操作的数据库是哪个厂家的产品,从而提高了软件的通用性。而且在Internet上确实无法预料你的用户想访问什么类型的数据库,只要系统上安装了正确的驱动器组,JDBC应用程序就可以访问其相关的数据库。您只需用JDBCAPI写一个程序就够了,它可向相应数据库发送SQL语句。而且,使用Java编程语言编写的应用程序,就无须去忧虑要为不同的平台编写不同的应用程序。将Java和JDBC结合起来将使程序员只需写一遍程序就可让它在任何平台上运行。2.4.2JDBC的驱动程序JDBC的数据库访问要通过JDBC驱动程序来完成,JDBC驱动程序是Java应用程序与物理数据库之间桥梁。JDBC驱动程序可以分为下面四种类型,分别适用于不同的场合[6]。(1)JDBC-ODBC桥驱动程序这类驱动程序负责将JDBC转换为ODBC,然后通过JDBC-ODBC的方法调用ODBC驱动程序来存取数据库。(2)本机应用编程接口的JDBC驱动程序这类驱动程序部分采用Java语言编写,部分采用本地代码编写。这种JDBC驱动会将客户机的JDBC调用转换为对特定数据库驱动程序的调用,进而存取数据库,因此必须先在客户机上安装好特定的数据库的数据访问驱动库才能使用。(3)数据库中间件的纯JDBC驱动程序这种类型的驱动程序把客户端的JDBC调用转换为一种独立于特定数据库的协议,然后将数据库访问请求传输给服务器组件,最后该服务器组件将访问请求转换为特定数据库的协议。(4)直接连接数据库的纯JDBC驱动程序这种类型的驱动程序可以将客户端的JDBC请求直接转换成特定数据库的协议,所有存取数据库的操作,都直接由驱动程序来完成。2.5TOMCAT应用服务器Tomcat是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现,Tomcat5支持最新的Servlet2.4和JSP2.0规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。Tomcat很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat部分是Apache服务器的扩展,但它是独立运行的,所以当你运行tomcat时,它实际上作为一个与Apache独立的进程单独运行的。在Tomcat中,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapps目录下,Tomcat会自动检测到这个文件,并将其解压。你在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。另外Tomcat也提供了一个应用:manager,访问这个应用需要用户名和密码,用户名和密码存储在一个xml文件中。通过这个应用,辅助于Ftp,你可以在远程通过Web部署和撤销应用,当然本地也可以。Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如Apache。我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet。这种集成只需要修改一下Apache和Tomcat的配置文件即可。第3章需求分析3.1系统功能描述该系统是用于用户对网络小说的阅读和相互交流,运营者可以管理此平台盈利,是一个基于在线阅读的平台,怎样可以方便管理者的管理并实现盈利,方便用户的使用,提供搜索和阅读功能并且提供一个给用户的交流平台是研究的主要内容。重点在于对访问该系统的身份进行基于角色的识别,使系统可以允许三种不同的角色进行访问,即游客、会员、管理员,并赋予他们不同的访问权限。3.1.1用户及主要操作功能游客可以浏览网站的主页,但是需要注册为会员后才能对网络小说进免费行阅读或阅读。会员登录需要输入帐号和密码信息,每个会员的帐号下都会对应有相关的个人信息,如个人邮箱,地址等,不同的会员等级在阅读图书时会有不同的待遇。以管理员身份登录也需要输入账号和密码,可以管理会员信息,添加公告,管理留言板等,管理员的角色在该系统中拥有最高的权限。3.1.2系统角色管理模块包括系统管理员模块和会员模块(1)在会员模块,作为会员,可以查看个人的信息,修改自己的密码;作为管理员可以查看,管理,删除会员信息。(2)在管理员模块,可以添加、删除管理员,管理员可以修改自己的密码。3.1.3网络小说管理模块网络小说管理模块包括不同网络小说类别的添加,删除以及网络小说的上传,删除管理。(1)网络小说类别的添加是由管理员进行的,可以包括武侠小书,都市言情,穿越小书等各个类别。按照付费与否可以添加免费和付费两种类别,当然这和前一种分类方式并不冲突。(2)各类网络小说由管理员上传,上传时如果是付费网络小说,可以设置下载此网络小说是所需费用。(3)对于一些过时,或人气不高的网络小说,系统管理员可以进行删除操作。3.1.4公告模块公告模块主要包括了公告的发布、编辑、删除和浏览;公告的发布、编辑和删除只能由管理员来进行。3.2系统性能需求分析网络小说租赁下载系统是对广大读书爱好者设计的一个系统,提供给读者一个寻找读物的平台,因此必须方便用户的注册,搜索和下载等功能,并提供一个交流平台。系统应该具有开放性和可靠性,同时又要方便进行操作和维护。3.3开发环境及开发工具操作系统:WindowsXPSP3;语言选择:JSP、JavaScript;数据库选择:SQLServer2000;主要开发工具:DreamweaverCS3、Eclipse3.4;Web应用服务器:Tomcat5.5。第4章概要设计本章详细的介绍了本系统的设计实现,包括系统功能模块的设计和数据库的设计,系统功能模块设计主要介绍了系统的功能和各功能实现的流程,数据库设计主要介绍了数据库表的设计和各字段的意义。4.1系统的体系结构图4-1系统结构模块示意图数据库服务器Web服务器图4-1系统结构模块示意图数据库服务器Web服务器(jsp)管理员游客会员JDBC4.2系统功能结构设计系统功能框图如图4-2所示。网络小说租赁下载系统包括了用户登录模块和匿名模块,在用户登录模块中角色分为管理员和会员三种角色。管理员可以对用户进行管理,可以建立数目类别,上传网络小说,公告的编辑和发布;会员可以浏览系统公告、网络小说信息,可以同其他会员进行交流。小说在线阅读系统小说在线阅读系统点券充值下载小说搜索小说修改密码在线留言会员登录管理员登录会员管理修改密码点券管理小说管理公告管理留言管理系统页面 图4-2系统功能结构图图4-2系统功能结构图4.2.1管理员模块管理员模块会员管理公告管理小说管理点券充值确认会员信息查看会员信息删除管理员模块会员管理公告管理小说管理点券充值确认会员信息查看会员信息删除添加系统公告修改系统公告删除系统公告增删小说类别增删小说信息查看小说信息图4-3管理员模块结构图4.2.2会员模块本模块包括信息管理,点券充值,小说搜索三部分,具体的功能结构如图4-4所示。修改信息充值点券修改信息充值点券信息管理查看信息退出系统会员模块小说阅读会员模块书籍租借搜索书籍下载书籍信息管理信息管理退出系统查看信息退出系统查看信息4-4会员模块结构图4-4会员模块结构图4.3系统流程图4.3.1会员管理会员管理包括对公司新近员的信息进行查看和删除等操作。还有对点券充值的确认。(1)删除会员首先查看会员的信息,查看的会员的信息必须在库里存在,如果有即可找到,如果没有就不能看到。当找到相应的记录后就会显示出来,然后对会员信息进行删除,删除完成该会员的信息就不存在数据库中。具体的操作流程如图4-5所示。不显示任何记录不显示任何记录开始查找user表找到符合条件记录吗否显示相应记录信息执行删除员工表中记录提示删除成功完成是图4-5删除会员流程图图4-5删除会员流程图4.3.2公告管理系统公告的管理由管理员来进行管理,系统公告发布后所有人都可以看见,系统公告的数据表(newsinfo),所有公司公告的相关操作均在本表了进行操作。4.4数据库设计数据库设计是系统设计中非常重要的环节。数据库设计是整个系统的根基,如果设计不好,在后来的系统维护、变更和功能扩充时,甚至在系统开发过程中,将会引起比较大的问题,有时将会重新进行大量的工作。创建数据库:数据库名:manage(软件项目团队管理系统)本系统中一共用到了以下几个数据表:(1)网络小说类别表(t_catelog):存储网络小说类别信息,具体为表4-1所示。表4-1网络小说类别表(t_catelog)名称别名类型长度(字符)1id编号Int42name类别名称Varchar503jieshao类别介绍Varchar5000(2)网络小说表(t_book):用于存放网络小说信息,具体如表4-2所示。表4-2网络小说信息表(t_book)名称别名类型长度(字符)1id编号Int42catalog_id类别编号Int503name名称Varchar504zuozhe作者Varchar505shifoumianfei是否免费Varchar506dianquan下载所需点券Varchar507daxiao大小Varchar508jieshao介绍Varchar509mianfeizhangjie免费试读Varchar5010fujian附件Varchar50(3)会员信息表(t_user):记录会员信息,具体如表4-3所示。表4-3会员信息表(t_user)名称别名类型长度(字符)1id编号Int42loginname登录帐号Varchar503loginpw登录密码Varchar504name姓名Varchar505sex性别Varchar506age年龄Varchar507address住址Varchar508tel联系方式Varchar509email邮箱Varchar5010dianquan拥有点券值Int4(4)充值表(t_chongzhi):用来存放会员充值信息,具体设计如表4-4所示。表4-4充值表(t_chongzhi)名称别名类型长度(字符)1id编号Int42user_id会员编号Int43jine充值金额Int44fukuanfangshi付款方式Varchar505shijian充值时间Varchar506zhuangtai审核状态Varchar50(5)留言表(t_liuyan):用来存放所有的留言信息,具体设计如表4-5所示。表4-5留言表(t_liuyan)名称别名类型长度(字符)1id编号Int42title标题Varchar503content内容Varchar504shijian留言时间Varchar505user_id会员编号Int4(6)公告表(t-gonggao):用来存放公告信息,具体设计如表4-6所示。表4-6公告表(t_gonggao)名称别名类型长度(字符)1id编号Int42title标题Varchar503content内容Varchar504shijian留言时间Varchar50(7)系统管理员表(t_admin):用来存放管理员信息,具体设计如表4-7所示。表4-7管理员表(t_admin)名称别名类型长度(字符)1userId编号Int42userName帐号Varchar503userPw密码Varchar50第5章详细设计本章介绍的是本网络小说下载系统的详细功能,包括了页面的设计以及程序的设计。5.1公告管理模块公告管理包括了公告的发布、管理和浏览,下面介绍这些功能。5.1.1浏览公告浏览公告是前台页面的功能,只要登录网站主页即可进行公告的浏览,在主页上显示最新的几条公告。图5-1为主页显示的部分公告页面:下面为公告模板的核心代码。ListgonggaoList=newArrayList(); Stringsql="select*fromt_gonggaoorderbyiddesc"; Object[]params={}; DBmydb=newDB(); try { mydb.doPstm(sql,params); ResultSetrs=mydb.getRs(); while(rs.next()) { Tgonggaogonggao=newTgonggao(); gonggao.setId(rs.getString("id")); gonggao.setTitle(rs.getString("title")); gonggao.setContent(rs.getString("content")); gonggao.setShijian(rs.getString("shijian")); gonggaoList.add(gonggao); } rs.close(); } catch(Exceptione) { e.printStackTrace(); } mydb.closed(); 图5-3为某条公告的显示页面:5.1.2发布公告发布公告是由管理员来进行的操作,只有管理员有权限进行公告的发布及修改、删除,其他人只能够进行浏览,而管理员进行公告发布之前需要进行登录,登录界面如图5-5所示:在登陆进入管理页面之后,就可以进行公告的发布,管理员进入管理页面之后可以进行很多操作,而公告的发布与管理只是管理员众多工作之一,图5-6为管理员登陆后的界面:5.1.3管理公告公告发布后要及时对公告进行管理,管理界面如图5-7所示:以下公告管理的核心代码:publicvoidgonggaoAdd(HttpServletRequestreq,HttpServletResponseres) { Stringid=String.valueOf(newDate().getTime()); Stringtitle=req.getParameter("title"); Stringcontent=req.getParameter("content"); Stringshijian=newDate().toLocaleString(); Stringsql="insertintot_gonggaovalues(?,?,?,?)"; Object[]params={id,title,content,shijian}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","操作成功"); req.setAttribute("path","gonggao?type=gonggaoMana"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidgonggaoDel(HttpServletRequestreq,HttpServletResponseres) { Stringid=req.getParameter("id"); Stringsql="deletefromt_gonggaowhereid=?"; Object[]params={id}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","操作成功"); req.setAttribute("path","gonggao?type=gonggaoMana"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidgonggaoMana(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException { ListgonggaoList=newArrayList(); Stringsql="select*fromt_gonggao"; Object[]params={}; DBmydb=newDB(); try { mydb.doPstm(sql,params); ResultSetrs=mydb.getRs(); while(rs.next()) { Tgonggaogonggao=newTgonggao(); gonggao.setId(rs.getString("id")); gonggao.setTitle(rs.getString("title")); gonggao.setContent(rs.getString("content")); gonggao.setShijian(rs.getString("shijian")); gonggaoList.add(gonggao); } rs.close(); } catch(Exceptione) { e.printStackTrace(); } mydb.closed(); req.setAttribute("gonggaoList",gonggaoList); req.getRequestDispatcher("admin/gonggao/gonggaoMana.jsp").forward(req,res); } 5.2会员模块会员模块包括会员注册,搜索阅读和点券的充值。5.2.1会员注册首先介绍会员信息的注册,具体界面如图5-9所示:图5-9会员注册界面会员信息的注册有一定的限制条件,用户名必填项,年龄必须为数字,密码输入两次必须一致,否则会提示出错。会员注册的核心代码如下:publicvoiduserReg(HttpServletRequestreq,HttpServletResponseres) { Stringid=String.valueOf(newDate().getTime()); Stringloginname=req.getParameter("loginname"); Stringloginpw=req.getParameter("loginpw"); Stringname=req.getParameter("name"); Stringsex=req.getParameter("sex"); Stringage=req.getParameter("age"); Stringaddress=req.getParameter("address"); Stringtel=req.getParameter("tel"); Stringemail=req.getParameter("email"); Stringqq=req.getParameter("qq"); intdianquan=0; Stringdel="no"; Stringsql="insertintot_uservalues(?,?,?,?,?,?,?,?,?,?,?,?)"; Object[]params={id,loginname,loginpw,name,sex,age,address,tel,email,qq,dianquan,del}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); StringtargetURL="/common/add_success.jsp"; dispatch(targetURL,req,res); } 5.2.2点券充值点券充值应为条件限制,不能做到与付费接口的连接,再此只做模拟,点券充值后需由管理员来确认。具体界面如图5-10所示:点券充值的核心代码如下:publicvoidchongzhiAdd(HttpServletRequestreq,HttpServletResponseres) { Stringuser_id=req.getParameter("user_id"); intjine=Integer.parseInt(req.getParameter("jine")); Stringfukuanfangshi=req.getParameter("fukuanfangshi"); Stringshijian=newDate().toLocaleString(); Stringzhuangtai="a"; Stringsql="insertintot_chongzhivalues(?,?,?,?,?)"; Object[]params={user_id,jine,fukuanfangshi,shijian,zhuangtai}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("msg","申请成功。等待管理员审核"); StringtargetURL="/common/msg.jsp"; dispatch(targetURL,req,res); } publicvoidchongzhiMana(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException { ListchongzhiList=newArrayList(); Stringsql="select*fromt_chongzhiorderbyzhuangtai"; Object[]params={}; DBmydb=newDB(); try { mydb.doPstm(sql,params); ResultSetrs=mydb.getRs(); while(rs.next()) { Tchongzhichongzhi=newTchongzhi(); chongzhi.setId(rs.getInt("id")); chongzhi.setUser_id(rs.getString("user_id")); chongzhi.setJine(rs.getInt("jine")); chongzhi.setFukuanfangshi(rs.getString("fukuanfangshi")); chongzhi.setShijian(rs.getString("shijian")); chongzhi.setZhuangtai(rs.getString("zhuangtai")); chongzhiList.add(chongzhi); } rs.close(); } catch(Exceptione) { e.printStackTrace(); } mydb.closed(); req.setAttribute("chongzhiList",chongzhiList); req.getRequestDispatcher("admin/chongzhi/chongzhiMana.jsp").forward(req,res); } 5.2.3搜索和下载小说登录到系统的会员,可以搜索自己喜爱的小说,可以按照书名搜索,也可以按照作者搜索,如果有符合搜索条件的小说,则会显示在主页面。以下为搜索小说的界面:核心代码如下:publicvoidbookSearch(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException { ListbookList=newArrayList(); Stringsql="select*fromt_bookwheredel='no'andnamelike'%"+req.getParameter("name").trim()+"%'"+"andzuozhelike'%"+req.getParameter("zuozhe").trim()+"%'"; System.out.println(sql+"^^^^^"); Object[]params={}; DBmydb=newDB(); try { mydb.doPstm(sql,params); ResultSetrs=mydb.getRs(); while(rs.next()) { Tbookbook=newTbook(); book.setId(rs.getInt("id")); book.setCatelog_id(rs.getInt("catelog_id")); book.setName(rs.getString("name")); book.setShifoumianfei(rs.getString("shifoumianfei")); book.setDianquan(rs.getInt("dianquan")); book.setDaxiao(rs.getString("daxiao")); book.setJieshao(rs.getString("jieshao")); book.setMianfeizhangjie(rs.getString("mianfeizhangjie")); book.setFujian(rs.getString("fujian")); book.setFujianYuanshiming(rs.getString("fujianYuanshiming")); book.setFabushijian(rs.getString("fabushijian")); book.setDel(rs.getString("del")); book.setCatelog(liuService.getCatelog(rs.getInt("catelog_id"))); bookList.add(book); } rs.close(); } catch(Exceptione) { e.printStackTrace(); } mydb.closed(); req.setAttribute("bookList",bookList); req.getRequestDispatcher("qiantai/book/bookSearch.jsp").forward(req,res); } 下载小说界面:下载核心代码:try{StringfujianPath=request.getParameter("fujianPath"); StringfujianYuashiMing=request.getParameter("fujianYuashiMing"); fujianYuashiMing=.URLDecoder.decode(fujianYuashiMing,"UTF-8"); System.out.println(fujianYuashiMing+fujianPath); SmartUploadsu=newSmartUpload();//新建一个SmartUpload对象 su.initialize(pageContext);//初始化 su.setContentDisposition(null); //设定contentDisposition为null以禁止浏览器自动打开文件, //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为 //doc时,浏览器将自动用word打开它。扩展名为pdf时,将用acrobat打开 //response.sendRedirect(path+"/updown/updown_err.jsp"); //su.downloadFile("/uploadPath/file/liu.doc");//下载英文文件 su.downloadFile(fujianPath,null,newString(fujianYuashiMing.getBytes(),"ISO8859-1"));//下载中文文件 //downloadFile(StringsourceFilePathName,StringcontentType,StringdestFileName) out.clear(); out=pageContext.pushBody();}catch(Exceptione){%><scripttype="text/javascript">alert("文件不存在。请联系管理人员");window.history.back();</script><%}5.3小说管理模块,小说管理模块包括网络小说类别管理模块和网络小说的管理,由管理员来管理操作,可以添加和删除相应的网络小说类别,网络小说,下面详细介绍各个功能。5.3.1网络小说类别的管理网络小说类别的管理包括添加和删除网络小说,界面如下图所示。类别建立时,需要要确定好类别的名称:设计界面如下:核心代码如下:publicvoidcatelogAdd(HttpServletRequestreq,HttpServletResponseres) { Stringname=req.getParameter("name"); Stringjieshao=req.getParameter("jieshao"); Stringdel="no"; Stringsql="insertintot_catelogvalues(?,?,?)"; Object[]params={name,jieshao,del}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","操作成功"); req.setAttribute("path","catelog?type=catelogMana"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidcatelogDel(HttpServletRequestreq,HttpServletResponseres) { Stringsql="updatet_catelogsetdel='yes'whereid="+Integer.parseInt(req.getParameter("id")); Object[]params={}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","操作成功"); req.setAttribute("path","catelog?type=catelogMana"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidcatelogMana(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException { ListcatelogList=newArrayList(); Stringsql="select*fromt_catelogwheredel='no'"; Object[]params={}; DBmydb=newDB(); try { mydb.doPstm(sql,params); ResultSetrs=mydb.getRs(); while(rs.next()) { Tcatelogcatelog=newTcatelog(); catelog.setId(rs.getInt("id")); catelog.setName(rs.getString("name")); catelog.setJieshao(rs.getString("jieshao")); catelogList.add(catelog); } rs.close(); } catch(Exceptione) { e.printStackTrace(); } mydb.closed(); req.setAttribute("catelogList",catelogList); req.getRequestDispatcher("admin/catelog/catelogMana.jsp").forward(req,res); } 5.3.2网络小说管理网络小说的管理包括各个类别中,网络小说的上传和已有网络小说的删除,上传时,有上传类别,付费和免费的选择。网络小说管理的界面如图所示:5.3留言版模块下面介绍的是会员之间的交流,每个会员可以在系统的留言版上进行留言,而其他会员看到留言后可以与之进行交流。留言版界面如下图所示:留言版代码如下所示:publicvoidliuyanAdd(HttpServletRequestreq,HttpServletResponseres) { Stringid=String.valueOf(newDate().getTime()); Stringtitle=req.getParameter("title"); Stringcontent=req.getParameter("content"); Stringshijian=newDate().toLocaleString(); Stringuser_id="0"; if(req.getSession().getAttribute("user")!=null) { Tuseruser=(Tuser)req.getSession().getAttribute("user"); user_id=user.getId(); } Stringsql="insertintot_liuyanvalues(?,?,?,?,?)"; Object[]params={id,title,content,shijian,user_id}; DBmydb=newDB(); mydb.doPstm(sql,params); mydb.closed(); req.setAttribute("message","操作成功"); req.setAttribute("path","liuyan?type=liuyanAll"); StringtargetURL="/common/success.jsp"; dispatch(targetURL,req,res); } publicvoidliuyanAll(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException { ListliuyanList=newArrayList(); Stringsql="select*fromt_liuyan"; Object[]params={}; DBmydb=newDB(); try { mydb.doPstm(sql,params); ResultSetrs=mydb.getRs(); while(rs.next()) { Tliuyanliuyan=newTliuyan(); liuyan.setId(rs.getString("id")); liuyan.setTitle(rs.getString("title")); liuyan.setContent(rs.getString("content")); liuyan.setShijian(rs.getString("shijian")); liuyan.setUser_id(rs.getString("user_id")); liuyan.setUser_name(liuService.getUserName(rs.getString("user_id"))); liuyanList.add(liuyan); } rs.close(); } catch(Exceptione) { e.printStackTrace(); } mydb.closed(); req.setAttribute("liuyanList",liuyanList); req.getRequestDispatcher("qiantai/liuyan/liuyanAll.jsp").forward(req,res); } 5.4通用模块5.4.1登录、修改个人信息及注销退出登录是系统的每个角色都会进行的,但是由于权限的不同所以登录后的功能不同,但是每个人都有修改个人信息、修改密码和注销退出的功能。由于此处的修改个人信息与管理员进行修改没有太大的区别,在此就不做详细介绍,而修改密码和注销退出也是比较简单的功能,在此也就不再详细介绍。5.4.2数据库的连接接本系统采用数据库的连接是用了一个java包来进行连接的,这样方便了数据库的管理。在实现某一个功能时,首先要连接数据库。那么,如果我们在每一次进行数据库操作前都需要加载驱动、创建连接,则这些操作可以封装在一个数据库操作类中。这样做有很大的优点,一旦系统移植、数据库参数改变,则不需要重新修改所有的连接代码并重新编译,只要在这个封装类中改变其中的参数即可。我采用了如下代码的一个类来统一管理数据库的连接://数据库连接封装publicclassDB{ privateConnectioncon; privatePreparedStatementpstm; privateStringuser="sa"; privateStringpassword="sa"; privateStringclassName="net.sourceforge.jtds.jdbc.Driver"; privateStringurl="jdbc:jtds:sqlserver://localhost:1433;DatabaseName=db_ebook"; publicDB() { try { Class.forName(className); }catch(ClassNotFoundExceptione) { System.out.println("加载数据库驱动失败!"); e.printStackTrace(); } } /**创建数据库连接*/ publicConnectiongetCon() { try { con=DriverManager.getConnection(url,user,password); }catch(SQLExceptione) { System.out.println("创建数据库连接失败!"); con=null; e.printStackTrace(); } returncon; } publicvoiddoPstm(Stringsql,Object[]params) { if(sql!=null&&!sql.equals("")) { if(params==null) params=newObject[0]; getCon(); if(con!=null) { try { System.out.println(sql); pstm=con.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); for(inti=0;i<params.length;i++) { pstm.setObject(i+1,params[i]); } pstm.execute(); }catch(SQLExceptione) { System.out.println("doPstm()方法出错!"); e.printStackTrace(); } } } } publicResultSetgetRs()throwsSQLException { returnpstm.getResultSet(); } publicin

温馨提示

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

评论

0/150

提交评论