基于JSP和Servlet的新闻频道设计文(含源文件)


获取项目源文件,联系Q:1225467431,可指导毕设,课设


摘 要 随着信息时代的高速发展,传统的报纸杂志已经远远满足不了人们的需求,人们更加希望于能够在网上了解更多的新闻和信息,于是就很有必要在网上创建一个新闻频道系统。基于JSP和Servlet的新闻频道系统正是为方便网络用户浏览新闻,减轻新闻工作者的负担,提高新闻管理的效率而开发设计的系统。基于JSP和Servlet的新闻频道系统系统充分利用互联网信息系统技术,直接面对浏览者,降低了成本;使用户能在第一时间能看到新闻。良好的在线浏览系统是实施用户浏览、后台管理的等各种工作的基础;新闻频道系统为用户提供了查看新闻的方便渠道,建立了用户和新闻发布者的沟通渠道,从网络新闻的发展史来看,网络新闻的开发前景是非常诱人的。也可由此看出网络新闻是未来信息的重要来源和途径。可以预言,在未来的几年中,人们看新闻的主要来源将是互联网。而网络新闻编辑也将成为一个新兴的热门专业!
关键词 Jsp Servlet B/S
JSP and Servlet-based
news channel of the system
Yang Yanfang Driected by Lecturer.Han Dongxia
Abstract With the rapid development of the information age, traditional newspapers, magazines, far can not meet peoples needs, it is even more hope to be able to learn more about the online news and information, so it is necessary we will create a news-line management information system. JSP and Servlet-based news channel of the system is to facilitate users to browse the network news, to reduce the burden on journalists to improve the efficiency of information management and systems development and design. The system is full use of the Internet information system technology, to directly face the viewer, to reduce costs; allows users to see at the first news. A good online system is the implementation of the user browsing, and other background work of the management of the foundation; news channel systems to provide users with a view to facilitate the news channels, set up user and news channel of communication between publishers, from the history of the development of network news of view, the development of network news is a very attractive prospects. This network can also be seen in the press is an important source of future information and means. It can be predicted that in the next few years, people read the news will be the main source of the Internet. The network news editor will also become a new popular professional!
Keywords Jsp Servlet B/S
目录
TOC 1-3 摘 要 I
外文页 II
1 引言 1
2 项目背景 1
2.1 题目来源 1
2.2 相关研究现状 1
2.3 应用前景 1
3 系统分析 2
3.1 需求分析 2
3.2 可行性分析 2
3.2.1 技术开发可行性 2
3.2.2 经济可行性 2
3.2.3 系统应用可行性 2
3.2.4 用户使用可行性 2
3.3 系统运行模式 3
3.4 系统功能分析 3
4 系统主要功能设计 3
4.1 开发模式的选择 3
4.2 系统功能结构图 4
5 系统实现 5
5.1 开发环境配置 5
5.1.1 硬件环境 5
5.1.2 软件环境 5
5.2 服务器配置 5
5.3 Tomcat安装及配置 6
5.4 系统实现的技术原理 6
5.4.1 新闻频道系统设计模式 6
5.4.2 Servlet和JSP 7
5.4.3 Java Server Pages (JSP) 7
5.4.4 JSP的工作原理 7
5.4.5 Servlet和JSP技术的开发原则 8
5.5 前、后台主要功能实现 8
6 数据库相关技术 19
6.1 数据库设计 19
6.2 数据库相关应用 19
6.2.1 控制层实现 20
6.2.2 页面字符的编码方法 22
6.2.3 业务逻辑层实现 22
6.2.4 操作数据库的DAO层 22
7 系统测试 22
7.1 新闻系统的测试方法 22
7.2 前台新闻浏览功能测试 23
7.3 后台登录功能测试 23
8 总 结 24
参考文献 25
致 谢 26
附 录 27
基于JSP和Servlet的新闻频道系统
1 引言
著名搜索引擎谷歌以1000多个新闻网站为信息源,利用搜索技术和页面自动生成技术,形成了谷歌新闻频道。谷歌新闻频道从内容的采集到整个频道的形成,完全不需要人工干预,可以交由计算机自动完成。计算机根据一系列预设的规则,自动选取频道的头条和主要条目,在过去这是只有高级编辑人员才能完成的工作。此后,百度也采用类似技术,推出了百度新闻频道。谷歌、百度基于搜索引擎而形成的新闻频道,都只提供最终新闻的链接,并不参与新闻报道的创制,在进行新闻议程设置的同时,巧妙地回避了新闻报道版权方面的纠纷,而且成本几乎为零。随着语言智能处理技术的完善,这类新闻频道的影响将越来越大。中国互联网络信息中心的调查报告显示,在网民激增的同时,我国网民对网络新闻的接受程度越来越高。
JSP技术就可以用来满足这样的系统要求。JSP规范是Web服务器、应用服务器、交易系统以及开发工具供应商间广泛合作的结果。Sun开发出这个规范来整合和平衡已经存在的对Java编程环境(例如,Java Servlet和JavaBeans)进行支持的技术和工具。其结果是产生了一种新的、开发基于Web应用程序的方法,给予使用基于组件应用逻辑的页面设计者以强大的功能。
2 项目背景
2.1 题目来源
随着信息时代的高速发展,传统的报纸杂志已经远远满足不了人们的需求,人们更加希望于能够在网上了解更多的新闻和信息,于是我们就很有必要在网上创建一个新闻管理信息系统了。
基于JSP和Servlet的新闻频道的系统正是为方便网络用户浏览新闻,减轻新闻工作者的负担,提高新闻管理的效率而开发设计的系统。该系统充分利用互联网信息系统技术,直接面对浏览者,降低了成本;使用户能在第一时间能看到新闻。良好的在线浏览系统是实施用户浏览、后台管理的等各种工作的基础;新闻频道系统为用户提供了查看新闻的方便渠道,建立了用户和新闻发布者的沟通渠道,从网络新闻的发展史来看,网络新闻的开发前景是非常诱人的。也可由此看出网络新闻是未来信息的重要来源和途径。可以预言,在未来的几年中,人们看新闻的主要来源将是互联网。而网络新闻编辑也将成为一个新兴的热门专业!
2.2 相关研究现状
目前市场上的Servlet和JSP技术是用Java开发服务器端应用的主要技术,是开发商务应用表示端的标准。Java开发者喜欢使用它有多种原因,其一是对于已经熟悉Java语言的开发者来说这个技术容易学习;其二是Java把一次编写,到处运行”的理念带入到Web应用中,实现了一次编写,到处实现”。而且更为重要的是,如果遵循一些良好的设计原则的话,就可以把表示和内容相分离,创造出高质量的、可以复用的、易于维护和修改的应用程序。
2.3 应用前景
计算机技术的发展,为各行各业的发展创造了一个全新的时代背景——人们的生活、工作等已经越来越离不开计算机科学的运用, Internet的应用加速了这种趋势,人们越来越需要在互联网上获得各种信息特别是做网站必备。以前我们一直使用看报纸,但是随着网站的大规模化,人们越来越多的迫切需要一种可以方便在网络上快速地浏览、搜索、收藏新闻而且可以发表留言的信息平台,那就需要新闻频道系统。
           
3 系统分析
3.1 需求分析
随着信息时代的高速发展,传统的报纸杂志已经远远满足不了人们的需求,人们更加希望于能够在网上了解更多的新闻和信息,于是我们就很有必要在网上创建一个新闻管理信息系统了。
基于JSP和Servlet的新闻频道的系统正是为方便网络用户浏览新闻,减轻新闻工作者的负担,提高新闻管理的效率而开发设计的系统。该系统充分利用互联网信息系统技术,直接面对浏览者,降低了成本;使用户能在第一时间能看到新闻。良好的在线浏览系统是实施用户浏览、后台管理的等各种工作的基础;新闻频道系统为用户提供了查看新闻的方便渠道,建立了用户和新闻发布者的沟通渠道,从网络新闻的发展史来看,网络新闻的开发前景是非常诱人的。也可由此看出网络新闻是未来信息的重要来源和途径。
主要功能:前台新闻浏览模块主要研究新闻管理子系统支持网络用户分栏查看新闻列表,点击查看新闻详细内容,系统内或指定栏目内搜索新闻、留言、将系统的地址设为首页、将系统的地址加入收藏夹等功能。
3.2 可行性分析
可行性分析(Feasibility Analysis)也称为可行性研究,是在系统调查的基础上,针对新系统的开发是否具备必要性和可能性,对新系统的开发从技术、经济、社会的方面进行分析和研究,以避免投资失误,保证新系统的开发成功。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。该系统的可行性分析从系统目标可行性、系统应用可行性、技术开发可行性以及经济可行性四方面进行分析。
3.2.1 技术开发可行性
采用了MVC设计模式,把展现层,控制层和业务逻辑层分割开来,降低了耦合度。Jsp可以交互开发,javabean组件可以重用,JDBC将数据库的连接进行了封装,可以快速的更新数据库。并且也有类似系统的成功案例。因此本方案在开发技术上是可行的。
系统采用Eclipse作为开发工具,,结合HTML、JSP和XML进行B/S模式开发。B/S模式开发已经是很完善的技术,在开发上几乎没有什么障碍,可以实现快速开发。
3.2.2 经济可行性
此系统是一个可以在中小企业中应用的系统程序,硬件基础设施价格低廉,成本较低。软件开发完成后即可以在相关企业中运行,用以检验此系统。因此应用后可以节省用户的时间提高效率,进而体现这套系统的经济价值。
3.2.3 系统应用可行性
Java是跨平台的,并且可移植性很好,它可以在windows, linux等多种操作系统环境下运行,对客户端的配置要求不高。因为本系统最终在分布式系统上运行,因为本人电脑的配置对于做毕业设计以足够,该系统的功能足以被实现。因此系统运行是可行的。
由于系统是可以给用户带来好处,所以用户本身是希望用它的。而做出后的系统操作上是充分考虑了人性化的需求。本系统界面友好,操作简单,可维护性强,功能完备。所以本系统在应用上是可行的。
3.2.4 用户使用可行性
现在计算机已经非常普及,并且系统操作简单,有计算机基础的人无需培训即可使用,用户在网络上可以实现所有的的相关内容,不需要额外的消费,可以随时随地进行练习。
综上所述,此系统开发目标已经明确,在技术开发、经济可行性和系统应用等方面都可行,并且投入少、见效快,因此系统的开发是完全可行的。
 
3.3 系统运行模式
本系统采用三层B/S结构。B/S结构即浏览器和服务器结构。MVC应用程序有模型组件,视图组件和控制器组件3个组件构成。
其中,模型组件表示 Web应用程序的各种数据元素,视图组件用于开发用户界面,而控制器组件充当应用程序的视图对象和模型对象之间的中间对象。模型组件被设计成一个JavaBean,记录用户信息,视图组件设计用户界面,控制器是一个Servlet,它用来分发客户请求。
3.4 系统功能分析
系统开发目标是建立一个稳定的,健全的,要求系统操作方便,安全性高,并提供完善的用户管理界面。
基于JSP和Servlet的新闻频道系统主要有以下功能: 前台新闻浏览模块主要研究新闻管理子系统支持网络用户分栏查看新闻列表,点击查看新闻详细内容,系统内或指定栏目内搜索新闻、留言、将系统的地址设为首页、将系统的地址加入收藏夹等功能。
后台管理员管理模块主要实现三大模块:管理员登录模块(主要研究用户登录时密码和用户名是否匹配);后台管理首页模块(网站信息设置、网站友情链接、退出后台管理);网站信息管理模块(增加后台用户、管理后台用户);后台用户管理模块(操作信息类别、信息类别管理、发布新信息、管理网站信息)。
以上的系统开发需求上完成的主要有以下几点:
1.后台管理首页http://localhost:8080/news/main/index.jsp (​http:​/​​/​localhost:8080​/​news​/​main​/​index.jsp​);
2.各项功能的任务列表;
3.添加管理员流程,能实现用户修改密码和删除功能;
4.网站信息管理:
1)修改类别中分:本站新闻,今日话题,热点专题,国内新闻,国际新闻五个板块,进入本站新闻;
5.信息类别管理;
6.管理员登录,后台管理首页,网站信息管理模块,后台用户管理。
4 系统主要功能设计
4.1 开发模式的选择
B/S (Browser/Server),即浏览器/服务器方式的网络结构,而统一采用如IE一类的浏览器,通过Web浏览器向Web服务器提出请求,由Web服务器对数据库进行操作,并将结果逐级传回客户端。这种三层的体系机构如图4-1所示:
图4-1 B/S模式的三层应用
C/S(Client/Server),客户机/服务器方式的网络计算模式,分别由服务器和客户机完成。应用的形式如图4-2所示:
图4-2 C/S模式应用图
C/S开发和维护的成本和维护成本较高,而B/S,客户端只需要通过浏览器,所有的维护成本都在服务器上执行,因而大大降低了开发和维护的成本。C/S移植困难,不同开发工具开发的应用程序,一般来说不兼容,而对于B/S来说,不存在移植问题。C/S用户界面是由客户端软件来决定的,用户界面各不相同,培训的时间和费用较高。而B/S通过通用的浏览器访问应用程序,浏览器的界面统一友好,使用时类似于浏览网页,从而可大大降低培训的时间和费用[5]。
综上所述,B/S相对于C/S更适合本系统,因此选择B/S模式进行开发。
4.2 系统功能结构图
该系统主要包含以下模块:
(1) 前台新闻浏览模块:主要研究新闻管理子系统支持网络用户分栏查看新闻列表,点击查看新闻详细内容,系统内或指定栏目内搜索新闻、留言、将系统的地址设为首页、将系统的地址加入收藏夹等功能;
(2)管理员登录模块:主要研究用户登录时密码和用户名是否匹配;
(3)后台管理首页模块:主要实现网站信息设置、网站友情链接、退出后台管理;
(4)网站信息管理模块:主要实现增加后台用户、管理后台用户;
(5)后台用户管理模块:操作信息类别、信息类别管理、发布新信息、管理网站信息;
图4-3 系统功能结构图
5 系统实现
5.1 开发环境配置
5.1.1 硬件环境
CPU:400HZ Pentium处理器或者AMD处理器,内存256M以上,硬盘:40G以上。
5.1.2 软件环境
本系统采用的开发工具主要有:MyEclipse6.0.1,TOMCAT5.5.20。服务器和客户端微机需要安装Eclipse3.3.1、JDK、Tomcat 6.0。所需要的操作系统:Windows 2000 Server,Windows XP,Professional均可。
Myeclipse : Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。  这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言。
5.2 服务器配置
首先安装JDK,配置步骤如下:
第一步:从网上下载jdk-6u6-windows-i586-p.exe文件;
第二步:双击.exe文件,安装在C:Program FilesJavajdk1.5.0_06;
第三步:JDK的环境配置:选中我的电脑按右键,选择属性”,在系统特性”表单内选择高级”标签,在高级”标签内选择环境变量”,在系统变量中加入变量JAVA_HOME
(变量名为C:ProgramFilesJavajdk1.5.0_06),classpath(变量值为C:Program FilesJavajdk1.5.0_06libdt.jar;C:ProgramFilesJavajdk1.5.0_06lib ools.jar;C:ProgramFilesJavajdk1.5.0_06)和path(变量值为C:Program FilesJavajdk1.5.0_06in;)。
安装和配置完毕后,在命令提示符”中输入javac,出现图5-1所示,则说明JDK安装
和配置都是正确的。
图5-1 调试界面
5.3 Tomcat安装及配置
TOMCAT5.5.20:Tomcat是开源的JSP/Servlet服务器。多年的开发使Tomcat已越来越完善,被越来越多的网站采用。Jaxmao项目的任务是为Tomcat提供一个友好的中文界面,推广Tomcat在中文JSP/Serlet 开发者中的使用,
下载apache-tomcat-5.5.20.exe文件,按照一般的Windows程序安装步骤即可安装好Tomcat,安装时它会自动寻找JDK的位置。安装过程中需要选择一个文件夹作为Tomcat的安装目录。我选择安装的位置是C:Tomcat 5.5。
安装完成以后,添加一个Tomcat的环境变量,添加方法和JDK的环境变量的添加方法相同,设置变量名为TOMCAT_HOME,变量值为C:Tomcat 5.5。
设置完毕后就可以运行Tomcat服务器了。Tomcat成功启动后,在浏览器中输入http://localhost:8080/,如果出现欢迎界面,则说明Tomcat安装成功。
5.4 系统实现的技术原理
5.4.1 新闻频道系统设计模式
主要采用java语言开发新闻频道系统采用MVC设计模式,如图5-2所示:
JSP技术规范种给出了两种使用JSP开发Web应用的方式,这两种方式可以归纳为模型一和模型二,这两种模型的主要差别在于它们处理业务的流程不同。模型一,称之为JSP+JavaBeans模型。在这一模型中,JSP页面独自响应请求并将处理结果返回给客户,所有的数据通过JavaBean来处理,JSP实现页面的表现。
JSP+JavaBeans模型也实现了页面表现和业务逻辑相分离。然而使用这种方式就要在JSP页面使用大量的Java代码,当需要处理的业务逻辑很复杂时,这种情况会变得非常糟糕。所以,模型一不能满足大型应用的需要,但是可以很好地满足小型应用的需要。
JSP+Servlet+JavaBeans模型结合了JSP和Servlet技术,充分利用了JSP和Servlet两种技术原有的优势。这个模型使用JSP技术来表现页面,使用Servlet技术完成大量的事务处理,使用Bean来存储数据。Servlet用来处理请求的事务,充当一个控制者的角色,并负责向客户发送请求。它创建JSP需要的Bean和对象,然后根据用户请求的行为,决定将哪个JSP页面发送给客户。
从设计结构来看,新闻频道系统充分体现了模型视图控制器(MVC)的设计架构。事实上,现存的很多开发框架都是基于这种模型的,充分实现了MVC。
5.4.2 Servlet和JSP
早期的动态网页主要采用CGI(Common Gateway Interface,公共网关接口)技术,虽然CGI技术发展成熟且功能强大,但由于编程困难、效率低下、修改复杂等缺点,所以有逐渐被取代的趋势。在所有的新技术中,JSP/Servlet具备更高效、更容易编程、功能更强、
更安全和具有良好的可移植性,因而被许多人认为是未来最有发展前途的动态网站技术。
简单来说Servlet就是一个Java类。与一般类的不同之处是,这个类运行在一个Servlet容器内,可以提供session管理和对象生命周期管理。因而当你使用Servlet的时候,你可以得到Java平台的所有好处,包括安全性管理、使用JDBC访问数据库以及跨平台的能力。而且,Servlet使用线程,因而可以开发出效率更高的Web应用。
5.4.3 Java Server Pages (JSP)
新闻频道系统的表现层主要利用 JSP技术来实现:JSP技术是J2EE的一个关键技术,它在更高一级的层次上抽象Servlet。它可以让常规静态HTML与动态产生的内容相结合,看起来像一个HTML网页,却作为Servlet来运行。现在有许多商业应用服务器支持JSP技术,比如BEA WebLogic、IBM WebSphere、 JRun等等。使用JSP比用Servlet更简单。如果你有一个支持JSP的Web服务器,并且有一个JSP文件,你可以把它放倒任何静态HTML文件可以放置的位置,不用编译,不用打包,也不用进行ClassPath的设置,就可以像访问普通网页那样访问它,服务器会自动帮你做好其他的工作。
5.4.4 JSP的工作原理
(1)JSP 文件就像一个普通静态HTML文件,只不过里面包含了一些Java代码。它使用.jsp的后缀,用来告诉服务器这个文件需要特殊的处理。当我们访问一个JSP页面的时候,这个文件首先会被JSP引擎翻译为一个Java源文件,其实就是一个Servlet,并进行编译,然后像其他Servlet一样,由Servlet引擎来处理。Servlet引擎装载这个类,处理来自客户的请求,并把结果返回给客户, 以后再有客户访问这个页面的时候,只要该文件没有发生过更改,JSP引擎就直接调用已经装载的Servlet。如果已经做过修改的话,那就会再次执行以上过程,翻译、编译并装载。其实这就是所谓的第一人惩罚”。因为首次访问的时候要执行一系列以上的过程,所以会耗费一些时间;以后的访问就不会这样。
新闻系统前台建的页面主要有adminLogin.jsp、index.jsp、left.jsp、newsIndex.jsp、newsList.jsp、newsLook.jsp、welcome.jsp;后台用的页面主要有:adminAdd.jsp、newsAdd.jsp、newsEdit.jsp、newsTypeAdd.jsp、messageList.jsp。
(2)这一部分我们列出一些开发原则,重点是JSP页面。关于如何分离表现和内容的MVC因为要涉及到JSP和Servlet的整合。
不要在JSP页面中嵌入过量的Java代码:对于非常简单或是测试性的代码,把所有的Java 代码直接放入JSP页面内是没有问题的。但是这种方法不应该被过度使用,否则就会产生一大堆HTML和Java混合起来的代码,让人难以阅读和理解。解决方法是写一个单独的类,用来执行相关的计算。一旦这个类测试通过,就可以把它放在任何执行同样计算的场合中。这样可以促进代码的复用。 在JSP技术中,JavaBean实现了业务逻辑部分,它把数据返回给JSP页面,由JSP页面负责格式化数据并输出到客户端的浏览器。在JSP页面中使用JavaBean组件的好处是: 产生了可以复用的组件:任何应用都可以使用这些组件。
(3)用数据库来保存持久性数据: Servlet/JSP中可以使用HttpSession对象也就是会话对象来保存用户的临时数据。不过如果你想保存持久性数据的时候,你应该使用数据库,
数据保存数据会更安全,而且对客户所用的浏览器没有什么要求。这样即使你的应用服务器由于某种原因崩溃了,数据依然良好。
(4)高速缓存页面: 应用程序中总有一些东西是相对固定的,而另外一些东西是经常变化的。使用静态的HTML文档来存储那些相对固定的内容,这样客户端就可以进行高速缓存,客户每次访问你的应用时,只需访问已经改动的部分。这样可以加快客户的访问速度。
(5)使用连接池: 如果你要自己写数据库访问代码的话,我觉得使用你应该学会如何使用数据库连接池技术。每一个服务器都有针对数据库连接池的配置文档,你要学习一下如何使用。数据库连接池可以加速你的应用的数据访问的速度,而且由于服务器替你管理了数据库连接,可以节省很多工作。
(6)采用JSP的XML语法: JSP技术中经常存在着两种完成同一个任务的语法,一种是常规的JSP语法,一种是对应的XML语法。虽然两种语法作用相同,最好还是使用XML语法。存在两种语法的原因是,JSP语法可以与以前的代码兼容,而J2EE使用XML作为其交换数据的核心,所以同时提供了XML语法。随着J2EE的发展,XML的作用会越来越大,所以新闻系统使用XML语法。
5.4.5 Servlet和JSP技术的开发原则
Servlet和JSP技术是用Java开发服务器端应用的主要技术,是开发商应用表示端的标准。新闻系统使用它有多种原因,其一是对于已经熟悉Java语言的开发者来说这个技术容易学习;其二是Java把一次编写,到处运行”的理念带入到Web应用中,实现了一次编写,到处实现”。而且更为重要的是,如果遵循一些良好的设计原则的话,就可以把表示和内容相分离,创造出高质量的、可以复用的、易于维护和修改的应用程序。
5.5 前、后台主要功能实现
前台主要包括的新闻浏览模块
1) 研究新闻管理子系统支持网络用户分栏查看新闻列表,点击查看新闻详细内容,运行界面如图5-3:
2)前台页面的主要实现文件index.jsp内容如下:




 

 

 

 

 

 

 

 

 

 

 

 




 
   



border=0>

 

 

 

 

 

 

 

 

 

 



 
 



3)系统内或指定栏目内可以搜索新闻、将系统的地址设为首页、将系统的地址加入收藏夹留言等功能,其中留言运行界面如下图5-4:

4)留言本的主要实现文件Add_adminDaoImpl.java内容如下:
package com.news.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.news.bean.News;
import com.news.bean.NewsMessage;
import com.news.dao.NewsMessageDao;
import com.news.util.DButil;
import com.news.util.StringUtil;
public class NewsMessageDaoImpl implements NewsMessageDao {
private final String ADD = insert into message(newsid,message) values(?,?);
private final String DEL = delete from message where id=?;
private final String LIST = select * from message where newsid=? order by id desc;

@Override
public int addMessage(NewsMessage L) {
int i = 1,ret = 0;
Connection conn = DButil.getConnection();

try {
PreparedStatement pstmt = conn.prepareStatement(ADD);
//pstmt.setInt(i++, L.getId());
pstmt.setInt(i++, L.getNewsId());
pstmt.setString(i++, L.getMessage());

ret = pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
DButil.close();
}
return ret;
}
@Override
public int delMessage(Integer id) {
int i = 1,ret = 0;
Connection conn = DButil.getConnection();
try {
boolean autoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
PreparedStatement pstmt = conn.prepareStatement(DEL);
pstmt.setInt(1, id);
ret = pstmt.executeUpdate();//按id删除
conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
DButil.close();
}
return ret;
}
@Override
public List getMessageList(Integer newsId) {

List list= new ArrayList();
try {
PreparedStatement pstmt = DButil.getPreparedStatement(LIST);
pstmt.setInt(1, newsId);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
NewsMessage newsMessage=new NewsMessage();
newsMessage.setId(rs.getInt(id));
newsMessage.setNewsId(rs.getInt(newsId));
newsMessage.setMessage(StringUtil.gbTOiso(rs.getString(message)));
list.add(newsMessage);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DButil.close();
}
return list;
}
}
后台管理员管理模块主要实现三大模块:
1)管理员登录模块(主要研究用户登录时密码和用户名是否匹配)。运行界面如下图5-5:
图5-5 管理员登陆界面
2)实现管理员登陆的文件adminLogin.jsp内容如下:
<%@ page language=java import=java.util.* pageEncoding=utf-8%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;
%>



>













 















 
  管理员登录
帐号:
*
密码:
*
 



3)后台管理首页模块(网站信息设置、网站友情链接、退出后台管理);如图5-6:
4)后台首页实现文件index.jsp内容如下:
<%@ page language=java import=java.util.* pageEncoding=utf-8%>
<%String path = request.getContextPath();
String basePath = request.getScheme()+://+request.getServerName()+:+request.getServerPort()+path+/;
%>
















 


 
useMap=#Map border=0>


coords=351,43,468,90 href=../index.jsp>
shape=RECT target=_blank coords=230,42,347,89
href=../index.jsp>

border=0>









 


 
 

 





3)后台用户管理模块(增加后台用户、管理后台用户),文件Add_adminDaoImpl.java中的实现代码如下:
package com.news.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.news.bean.Add_admin;
import com.news.dao.Add_adminDao;
import com.news.util.DButil;
public class Add_adminDaoImpl implements Add_adminDao{
private final String LOGIN = select account_no,password from add_admin where account_no=? and password=?;
private final String SHOWUSER = select * from add_admin;
private final String ADDUSER = insert into add_admin(account_no,password) values(?,?);
private final String DELUSER = delete from add_admin where id=?;
private final String CONT = select count(*) total from add_admin;
private final String EDITUSER = update add_admin set password=? where id=?;

static int total;
//登录实现
public boolean login(String account_no,String password) {

Connection conn = DButil.getConnection();
try {
PreparedStatement pstmt = conn.prepareStatement(LOGIN);
pstmt.setString(1, account_no);
pstmt.setString(2, password);
ResultSet rs = pstmt.executeQuery();
if(rs.next()){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
//显示列表
public List showuser(Map map) {
int i = 0,ret = 0;
List list = new ArrayList();
try {

PreparedStatement pstmt = DButil.getPreparedStatement(SHOWUSER);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
Add_admin ad = new Add_admin();
ad.setId(rs.getInt(id));
ad.setAccount_no(rs.getString(account_no));
ad.setPassword(rs.getString(password));
list.add(ad);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
DButil.close();
}
return list;
}
//添加管理员
public int adduser(Add_admin ad) {
int i = 1, ret = 0;
//Add_admin ad = new Add_admin();
Connection conn = DButil.getConnection();
try {
PreparedStatement pstmt = conn.prepareStatement(ADDUSER);
//pstmt.setInt(i++, ad.getId());
pstmt.setString(i++, ad.getAccount_no());
pstmt.setString(i++, ad.getPassword());
ret = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally{
DButil.close();
}

return ret;
}
//测试数据库是否只剩一位管理员
public int testCount() {
try {
PreparedStatement pstmt = DButil.getPreparedStatement(CONT);
ResultSet rs = pstmt.executeQuery();
rs.next();
total=rs.getInt(total);
System.out.println(total);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
DButil.close();
}
return total;
}

//删除管理员
public int deluser(Integer id) {
int i = 0,ret = 0;
Connection conn = DButil.getConnection();
ResultSet rs=null;
try {
boolean autoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
PreparedStatement pstmt = conn.prepareStatement(DELUSER);
pstmt.setInt(1, id);//按id删除
ret = pstmt.executeUpdate();

conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
DButil.close();
}
return ret;
}
//编辑管理员
public int edituser(Add_admin ad) {
int i = 1,ret = 0;
try {
PreparedStatement pstmt = DButil.getPreparedStatement(EDITUSER);

pstmt.setString(i++, ad.getPassword());
pstmt.setInt(i++, ad.getId());
ret = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally{
DButil.close();
}
return ret;
}

}
4)网站信息管理模块(操作信息类别、信息类别管理、发布新信息、管理网站信息),实现文件SetinfoDaoImpl.java部分代码如下:
package com.news.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.news.bean.Setinfo;
import com.news.dao.SetinfoDao;
import com.news.util.DButil;
public class SetinfoDaoImpl implements SetinfoDao{
private final String SETINFO = insert into setinfo(title,keyword,setauth) values(?,?,?);
private final String SETINFO_LIST = select * from setinfo;
public int setinfo(Setinfo si) {
int i = 1;
int ret = 0;
//Setinfo si = new Setinfo();
try {
PreparedStatement pstmt = DButil.getPreparedStatement(SETINFO);
pstmt.setString(i++, si.getTitle());
pstmt.setString(i++, si.getKeyword());
pstmt.setString(i++, si.getSetauth());
ret = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DButil.close();
}

return ret;
}
public List getSetinfoList(Map map) {
List list = new ArrayList();
try {
PreparedStatement pstmt = DButil.getPreparedStatement(SETINFO_LIST);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
Setinfo si = new Setinfo();
si.setId(rs.getInt(id));
si.setKeyword(rs.getString(keyword));
si.setTitle(rs.getString(title));
si.setSetauth(rs.getString(setauth));
list.add(si);
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
DButil.close();
}
return list;
}
}
6 数据库相关技术
6.1 数据库设计
本系统采用MYSQL作为系统数据库存储所有与系统有关的数据,数据库表和数据表中字段的命名规则:
(1) 数据记录是一组经过声明的数据类型就可以组成一条记录。记录小到可以只包含一个数据变量,大到可以满足用户的各种复杂需求。多条记录组合在一起就构成了数据表的基本结构。
(2) 数据表是我们在执行各种数据库命令之前,首先需要创建用来保存信息的数据表。注意,同一个数据库中不能存在两个名称相同的数据表。
(3) 创建数据表时所用到的几个主要的参数选项:Primary Key ;Auto_Increment ;NOT NULL。
6.2 数据库相关应用
基于JSP和Servlet的新闻频道系统在数据库建了六个表:
第一 add_admin,添加管理员;
表6-1 添加管理员表
id account_no password
1 admin admin
2 b b
3 c c
第二 link,友情链接;
表6-2 友情链接表
id name address Img_Iogo sort
1 谷歌 http://www.google.cn C:IMG_2456.JPG 0
2 百度 http://www.baidu.com C:DSC00689.JPG 1
null null null
第三 news,添加新闻内容;
表6-3 新闻内容表
Id Title Sort Writer Dates Shows Message hits
1 国务院... 509 a 2009-05-28 1 1
2 广东罢... 509 a 2009-05-28 1 1
3 510 a 2009-05-28 1 1
4 508 a 2009-05-28 1 端午节开心 1
5 508 a 2009-05-28 1 1
第四 newstype,新闻类别;
表6-4 新闻类别表
id name sort
1 本站新闻 506
2 今日话题 507
3 热点专题 508
4 国内新闻 509
5 国际新闻 510
第五 setinfo,本站信息设置;
表6-5 信息设置表
id title keyword setauth
1 新闻发布系统 新闻发布系统 版权所有admin
null null
第六 message,留言;
表6-6 留言表
id newsid message
1 13 留言测试!
2 13 测试成功!
(null) (null)
6.2.1 控制层实现
采用servlet类来实现页面转的控制,调用业务逻辑层的类来完成相应的处理然后再控制页面的跳转,如下是添加管理员的部分控制实现代码:
public class Add_adminServlet extends HttpServlet{
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpServletRequest httpRequest=(HttpServletRequest)req;
HttpServletResponse httpResponse=(HttpServletResponse)resp;
HttpSession httpSession=httpRequest.getSession();
Map map = new HashMap();
Add_admin ad = new Add_admin();
Add_adminDao ado= new Add_adminDaoImpl();
String admin = req.getParameter(admin);
String id = req.getParameter(id);
String account_no = req.getParameter(account_no);
String password = req.getParameter(password);
List list = ado.showuser(map);
req.setAttribute(list, list);
if(id!=null){
ad.setId(Integer.valueOf(id));
}
ad.setAccount_no(account_no);
ad.setPassword(password);
//匹配相应的admin的值
if(admin!=null){
if(admin.equals(showuser)){
req.getRequestDispatcher(/main/adminList.jsp).forward(req, resp);
}if(admin.equals(login)){
if(ado.login(account_no, password)){
HttpSession session=req.getSession();
session.setAttribute(account_no, account_no);
resp.sendRedirect(main/index.jsp);
}else{
resp.sendRedirect(adminLogin.jsp);
}
}if(admin.equals(adduser)){
ado.adduser(ad);
req.getRequestDispatcher(admin?admin=showuser).forward(req, resp);
}if(admin.equals(deluser)){
ado.deluser(Integer.valueOf(id));
req.getRequestDispatcher(admin?admin=showuser).forward(req, resp);
}if(admin.equals(edituser)){
ado.edituser(ad);
req.getRequestDispatcher(admin?admin=showuser).forward(req, resp);
}
}

}
@Override
Public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp);
}
}
6.2.2 页面字符的编码方法
使用过滤器来实现对页面字符的编码方法的控制,和控制只有用户登陆后才能进入其它页面,由此可以增加对数据的安全性等一些其他的过滤功能。
6.2.3 业务逻辑层实现
业务逻辑模型,全部由一些逻辑业务类和业务数据类来组成,业务数据类一般与数据库中的某个或多个关系表相对应。
新闻频道JavaBean实现了业务逻辑部分,它把数据返回给JSP页面,由JSP页面负责格式化数据并输出到客户端的浏览器。在JSP页面中使用JavaBean组件的好处是: 产生了可以复用的组件:任何应用都可以使用这些组件。
6.2.4 操作数据库的DAO层
该层负责运用sql语句,调用数据库工具类完成对数据库的操作,从数据库中取得或修改数据,然后将数据返回给业务逻辑层进行处理。
其中DAO层添加管理员的部分实现代码如下:
package com.news.dao;
import java.util.List;
import java.util.Map;
import com.news.bean.Add_admin;
/*
* 添加管理员
*/
public interface Add_adminDao {
//登录
public boolean login(String account_no,String password);
//显示列表,可以有多个管理员
public List showuser(Map map);
//添加用户
public int adduser(Add_admin ad);
//修改用户
public int edituser(Add_admin ad);
//删除用户
public int deluser(Integer id);
}

7 系统测试
7.1 新闻系统的测试方法
功能测试就是对系统的各功能进行验证,根据功能测试用例,逐项测试,检查系统是否达到用户要求的功能。Web系统的常用测试方法如下:
1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。
2. 相关性检查:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确。
3. 字符串长度检查:输入超出需求所说明的字符串长度的内容,看系统是否检查字符串长度,会不会出错。
4. 字符类型检查:在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型,会否报错。
5. 中文字符处理:在可以输入中文的系统输入中文,看会否出现乱码或出错。
6. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按”delete”,看系统如何处理,会否出错; 然后选择一个和多个信息,进行删除,看是否正确处理。
7. 检查添加和修改是否一致:检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填; 添加规定为整型的项,修改也必须为整型。
8. 检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错。同时,也要注意,会不会报和自己重名的错。
9. 重复提交表单:一条已经成功提交的纪录,back后再提交,看看系统是否做了处理。14. 检查多次使用back键的情况:在有back的地方,back,回到原来页面,再back,重复多次,看会否出错。
10. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加*
11. 快捷键检查:是否支持常用快捷键,如Ctrl+C Ctrl+V Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。
12. 回车键检查:在输入结束后直接按回车键,看系统处理如何,会否报错。
7.2 前台新闻浏览功能测试
(1)输入首页网址:打开首页,网络用户可以浏览新闻的各类信息,点击查看新闻详细内容,系统内可以指定栏目内搜索新闻、留言、将系统的地址设为首页、将系统的地址加入收藏夹等。
7.3 后台登录功能测试
(1)后台登录:如果用户已注册,填写登录信息后单击登录”,
登录成功,页面会自动转到后台首页。
(2)用户登录:如果用户尚未注册,填写登录信息后单击登录”,
如登录失败,重新填写信息。
(3)后台管理首页的左栏显示相应的列表;
(4)点击网站信息设置可以实现对前台显示的信息设置;
(5)点击网站友情链接可以添加相应的链接网址;
(6)网站信息管理模块:增加后台用户、管理后台用户;
(7)后台用户管理:操作信息类别、信息类别管理、发布新信息、管理网站信息;
(8)点击退出后台管理:便可退出后台。
8 总 结
通过设计和实现本系统,巩固了在校期间所学的相关专业知识,并且熟悉了java技术开发的环境和流程,深一步了解了MVC模式的设计方法和这种设计模式的好处,掌握了Servlet + JSP 这套技术实现方法,通过接触多种开发工具,使自己的能力得到了很大的提高 ,为今后能够很快的适应工作环境打下了良好的基础。
开发过程中遇到的主要问题及解决方法:
问题1:读数据库的烦琐代码,和反复操作,浪费太多的时间和精力。
解决的方法:将对数据库的操作封装成一个工具类。并且这个工具类可以保留下来作为以后开发系统的工具类,实现了代码的可重用性。
问题2:在页面中出现的中文乱码问题。
解决的方法:对所有页面进行过滤,严格控制其编码方式。
遗留的问题:由于本人的技术还有所欠缺,以及本系统功能模块很多,一个人开发有些困难,所以导致部分小功能实现不够理想。再有就是本人美工技术有限,界面有些粗糙。不过对于这些问题,将在今后继续努力实现。

参考文献
主要参考文献:
[1] 邹竹彪. JSP宝典.北京:电子工业出版社,2007
[2] 周影.网络编程语言JSP实例教程.北京:电子工业出版社,2003
[3](美)Bruce W. Perry. Java Servlet & JSP经典实例.中国电力出版社,2005
[4] Bruce Eckel. Thinking in Java (Fourth Edition). 陈昊鹏译. Java编程思想(第四版),机械工业出版社,2007,6
[5] [美]精通JavaScript.人民邮电出版社,2008,4
[6] 邹竹彪.JSP网.编程从入门到精通.北京:清华大学出版社
[7] 申吉红,廖学峰,余健.JSP课程设计案例精编.清华大学出版社,2007,2
[8] 萨师煊, 王珊. 数据库系统概论. 北京: 高等教育出版社, 2004.
[9] 张海藩.软件工程导论(第四版).清华大学出版社,2007,5
[10] 郑凯,刘爱芳. 基于JSP的分页与页面保存技术的实现. 计算机工程 (​http:​/​​/​JSJC.chinajournal.net.cn _blank​), 2004
致 谢
在此篇毕业论文划上句号之际,我郑重地向我的指导教师 韩东霞 老师表示我最诚挚的感谢!衷心地感谢他的关心、指导和教诲。在 韩东霞 老师的精心引导下,几经修改和完善我终于完成了毕业论文,从她身上我获得了太多的文化和知识,更汲取了诸多纯朴而伟大的高尚品德。
我在撰写毕业论文期间的工作自始至终都是在 韩东霞 老师的全面、具体指导下进行的。老师渊博的学识、民主而严谨的作风,使我受益匪浅。韩东霞老师谦逊的学术作风和高尚的人格品德将永远激励我前行!
最后还要感谢我的同学和朋友几年来对我的关心和帮助。
附 录
Web.xml:

xmlns=http://java.sun.com/xml/ns/j2ee
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation=http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd>



charset
com.news.util.Filterutil


Authentication
company.AuthenticationFilter

onError
/adminLogin.jsp



Authentication
/main/*


charset
/*




Connector

company.ConnectorServlet


baseDir
/UserFiles/


debug
false


AllowedExtensionsImage

gif|jpg|jpeg|doc|xls


UnallowedExtensionsFile
exe|java|class|jsp|bat|do|vm

1



Connector

/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector





admin
com.news.servlet.Add_adminServlet


admin
/admin



newstype
com.news.servlet.NewsTypeServlet


news
com.news.servlet.NewsServlet


link
com.news.servlet.LinkServlet


message
com.news.servlet.MessageServlet


setinfo
com.news.servlet.SetinfoServlet


newstype
/newstype


news
/news


link
/link


message
/message


setinfo
/setinfo

图5-2 MVC设计模式
表现层
控制层
业务逻辑层
控制层
DAO层
 图5-3 前台首页
图5-4 留言本
图5-6 新闻频道系统后台管理首页
PAGE
获取项目源文件,联系Q:1225467431,可指导其它毕设,课设

猜你喜欢

转载自blog.csdn.net/u010783228/article/details/86035363
今日推荐