门户网站的设计与开发

更新时间:2024-01-20 09:12:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

摘 要

门户网站的设计与开发

摘 要

21世纪的发展已经很大程度的依赖于计算机网络的发展,随着计算机网络的快速发展而带来的一系列的基于网络的事物的飞速增长和世界信息化步伐的加快,于是越来越多的企事业单位包括各类院校都需要一个自己的信息发布和资源共享的平台。为了满足这个需求,我们开发此门户网站,用于用户发布自己的信息和资源以实现信息的共享和传递。。

在基于JSP页面、MySQL数据库及Tomcat服务器端的基础上开发的新闻发布系统。系统地阐述该网站系统开发的分析及设计过程,包括数据流图,功能分析设计,数据库设计等;

关键词:门户网站系统 新闻发布 JSP;

I

ABSTRACT

ABSTRACT

【Keywords】 portal system, press releases, jsp;

II

目 录

目 录

目 录 ...................................................................................................... III 第一章 绪论 ............................................................................................ 1 1.1门户网站的发展现状及发展趋势 .................................................. 1 1.2课题的目的与意义 ............................................................................. 2 1.3本论文所做的工作 ............................................................................. 3 第二章 开发工具,语言,及数据库简介 .............................................. 5 2.1 MYSQL数据库...................................................................................... 5 2.2 JSP与SERVLET .................................................................................. 5 2.3 STRUTS框架........................................................................................ 7 第三章 总体设计 ...................................................................................... 9 3.1 需求分析 ............................................................................................. 9 3.2 数据库设计....................................................................................... 10 3.3 功能模块简介................................................................................... 10 3.4 框架的应用....................................................................................... 14 第四章 详细设计 .................................................................................... 17 4.1 新闻显示功能................................................................................... 17 4.2 用户注册功能................................................................................... 17

III

ABSTRACT

4.3 修改注册信息功能 .......................................................................... 17 4.4 管理新闻功能................................................................................... 18 4.5 添加新闻功能................................................................................... 18 4.6管理用户 ............................................................................................ 18 4.7注销 .................................................................................................... 18 第五章 功能实现 .................................................................................... 20 5.1 新闻显示功能................................................................................... 20 5.2 用户注册功能................................................................................... 22 5.3 修改注册信息功能 .......................................................................... 24 5.4 管理新闻功能................................................................................... 25 5.5 修改新闻功能 .................................................................................. 27 5.6管理用户 ............................................................................................ 29 5.7注销 .................................................................................................... 30 第六章 结束语 ........................................................................................ 32 致 谢 ......................................................................................................... 33 参考文献................................................................................................... 34

IV

第一章 绪论

第一章 绪论

1.1门户网站的发展现状及发展趋势

门户网站,是指通向某类综合性互联网信息资源并提供有关信息服务的应用系统。门户网站最初提供搜索服务、目录服务,后来由于市场竞争日益激烈,门户网站不得不快速地拓展各种新的业务类型,希望通过门类众多的业务来吸引和留住互联网用户,以至于目前门户网站的业务包罗万象,成为网络世界的“百货商场”或“网络超市”。

实际上,我们今天所谈论的门户与当初yahoo初创时所说的门户已经有了很大的不同。那个时候,大多数网民面对茫茫网海无从下手,正是yahoo这种以提供搜索服务为主的网站扮演了引网民“入门”的角色,成为网民进入互联网的“门户”。将提供新闻服务作为门户网站的主业乃至核心竞争力,这其实只是后来的事情,原本就与门户网站的“本质”或者“正根”没有什么关系。因此,今天在门户问题上,极力强调新闻业务的重要性,似乎不做新闻甚至少做新闻就是对门户的 “背叛”,让人有些不知所云。相反,简单回顾门户的起源和历史,可以让我们清楚地看到,无论是搜索还是新闻,都只是门户发展的一个阶段,门户可以从搜索服务演进到新闻服务,未必就不能从新闻服务演进到别的什么服务。随着网络媒体的发展,原先的门户不一定再将搜索作为主业(例如yahoo和搜狐),而提供搜索引擎服务的又不一定非门户不可(例如百度和google);今人可以这样看过去,后人未必就不能如此看今日。

这场争论同时暗含一个关于门户网站与大众媒体的关系问题。大众媒体的模式是成熟的,其特点集中体现在“一对多”的传播渠道和以新闻为主的传播内容上,不用作理论分析,传统媒体上百年的历史已然充分证明了其在传统信息环境下的合理性和有效性,也充分证明了其能够满足大多数对于新闻、信息的通用需求。问题在于,这种模式在目前和未来的信息环境下依然那么合理和有效吗?作为信息交流平台的网络媒体不会改变这种状况吗?新闻永远是大多数人们的通用需求吗?网络媒体一定要向大众媒体靠拢吗?这些问题都不是显而易见、一目了然的,正确的答案存在于不断的尝试、选择和进化之中,而“先知”们的“定论”却未必那么可信。

网络媒体不同于大众媒体,信息时代的网民及其需求也不同于过去时代的受众及其需求,千万不要轻视网络媒体所具有的信息交流平台功能,千万不要轻视数量日增的网民对新闻服务以外的信息需求。通过向网民发布新闻固然是门户网

1

门户网站的设计与开发

站的一种模式选择,但是,为网民提供信息交流平台,使网民从多种渠道(例如其他网民)获取多元信息(不仅限于新闻)也是门户网站的一种模式选择,也许,这是更好、更有前途的模式选择——以这种模式成功的网站正在涌现。 随着中国互联网10年的过去,已经诞生出几家全国大型的门户。中国城市百分之九十都是属于中小二三级城市,电脑终端在中国的普及和网民快速增长,中国城市未来的网络发展是趋势,市场空间也是很巨大的。在此同时也出现地方门户,通常我们所说的地方门户系统是指“地方门户网站系统”,它由多个网站功能系统构成,主要有分类信息系统、社区论坛系统、地方信息资讯系统、商家企业黄页系统等。并非单指地方某个行业垂直网站系统,如单一的论坛系统、单一的分类信息系统等。

1.2课题的目的与意义

在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用.因此网站建设在Internet应用上的地位显而易见,它已成为政府、企事业单位信息化建设中的重要组成部分,从而倍受人们的重视。现今的社会,人们已经离不开了网络,网络已经成为人与人之间交流的一种形式,他能够把事情的复杂化转为简单。新闻发布系统的提出使电视不再是唯一的新闻媒体,从此以后网络也充当了一个重要的新闻媒介的功能。简单地说,新闻发布系统就是充当一个网络新闻媒介的功能,主要实现对新闻的分类、上传、审核、发布,模拟了一般新闻媒介的新闻发布的过程,通过不同权限的账号分别实现以上所说功能,当然这些功能也可以是某一个账号全部具有。

随着互联网的进一步发展,网络媒体在人们心中的地位进一步提高,新闻发布系统做为网络媒体的核心系统,其重要性是越来越重要:一方面,它提供一个新闻管理和发布的功能;另一方面,现在的新闻发布要求实现与普通的用户实现交互,用户可以很方便地参加一些调查和相关新闻的评论,这一点也是其他一些媒体现在无法做到的(电视、电台等),同时,Internet发展到当今,可以说,只要你上Internet,你就会接触到新闻发布系统,新闻发布系统的用户是相当惊人的,其重要性是不容置疑的,当然这也对新闻发布系统的开发提出了更高的要求。

网站新闻发布系统,是将网站上需要经常变动的信息,社会的动态等更新信息集中管理,并通过信息的某些共性进行分类,最后系统化、标准化发布到网站上的一种网站应用程序。传统的网站新闻管理方式有两种,一是静态HTML页面,更新信息时需要重新制作页面然后上传页面并修改相应链接,这种方式因为效率

2

第一章 绪论

太低已不多用。二是基于JSP和脚本语言,将动态网页和数据库结合,通过应用程序来处理新闻,这是目前较为流行的做法。人们对最新信息的需求和发布迫切的需要及时性,而动态交互式网页刚好提供了这些功能,本系统就是一个能够在网上实现新闻的网上多用户发布,多栏目管理,实时的进行行为统计和记录的网上交互。

1.3本论文所做的工作

本论文实现了一个新闻发布系统的门户网站,主要的功能有七大模块: 1 新闻浏览模块

首页显示网站所有新闻列表,根据新闻的数量分页,网站顾客可以自由浏览新闻。

2 用户登录模块

用户登界面,用户需根据自己的类型(普通用户,管理员)进行选择性登陆,登录时需要填写验证码。注意本系统部分功能只有在登陆后才被激活,且不同用户类型登陆后所具有的功能也不同。 3 用户注册模块

注册模块仅服务于普通用户,在网站上注册的用户身份仅是普通用户,管理员需到服务器注册信息。 4 用户修改信息模块

普通用户登陆后才能修改自己的信息,为了确保系统安全系统管理员不能在客户端修改信息,必须到服务器数据库直接修改信息。 5 管理新闻模块

用户登陆后此模块被激活,为了确保其他用户在本站的利益,用户仅可以管理自己的新闻,管理新闻包括(删除,修改),系统管理员可以管理所有用户发表的新闻。 6 添加新闻模块

用户登录后可以发布新闻,发布的新闻将在系统首页新闻列表中显示出来,用户在发表新闻时若不填写作者,系统默认当前用户为作者。发表时间不用填写,由系统根据服务器时间默认。 7 管理用户模块

此模块专属于系统管理员,系统管理员登陆后,可以查看本系统存在的所有普通用户的信息,信息包括(用户名,密码,联系电话,即时通信QQ)。 管理员可以根据需要,对系统中的任何用户进行封号处理。 8 注销模块

3

门户网站的设计与开发

当用户登录后,不再进行操作时,为了减少服务器资源的浪费和自身账户的安全性,可以进行注销。

4

第二章 开发工具,语言,及数据库简介

第二章 开发工具,语言,及数据库简介

2.1 MySql数据库

随着门户类网站的发展,尤其是新闻类门户网站的发展,今天MySQL已被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

MySQL是一个真正的多用户、多线程SQL数据库服务器。系统采用加载纯Java数据库驱动程序的方式操作数据库,目前mysql还不支持桥连接。

SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成,并且能够支持多平台。

2.2 JSP与Servlet

Java Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面。

Java Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。

Java Servlet与Applet 的比较: 相似之处:

它们不是独立的应用程序,没有main()方法。

它们不是由用户或程序员调用,而是由另外一个应用程序(容器)调用。 它们都有一个生存周期,包含init()和destroy()方法。 不同之处:

Applet具有很好的图形界面(AWT),与浏览器一起,在客户端运行。 Java Servlet则没有图形界面,运行在服务器端。 Java Servlet与CGI(Common Gateway Interface) 的比较:

与传统的CGI和许多其他类似CGI的技术相比,Java Servlet具有更高的效率,更容易使用,功能更强大,具有更好的可移植性,更节省投资。在未来的技术发展过程中,Servlet有可能彻底取代CGI。

5

门户网站的设计与开发

高效

在传统的CGI中,每个请求都要启动一个新的进程,如果CGI程序本身的执行时间较短,启动进程所需要的开销很可能反而超过实际执行时间。而在Servlet中,每个请求由一个轻量级的Java线程处理(而不是重量级的操作系统进程)。

在传统CGI中,如果有N个并发的对同一CGI程序的请求,则该CGI程序的代码在内存中重复装载了N次;而对于Java Servlet,处理请求的是N个线程,只需要一份Servlet类代码。在性能优化方面,Servlet也比CGI有着更多的选择。 方便

Java Servlet提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等。 功能强大

在Java Servlet中,许多使用传统CGI程序很难完成的任务都可以轻松地完成。例如,Java Servlet能够直接和Web服务器交互,而普通的CGI程序不能。Servlet还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。 可移植性好

Java Servlet用Java编写,Servlet API具有完善的标准。因此,为IPlanet Enterprise Server写的Servlet无需任何实质上的改动即可移植到Apache、Microsoft IIS或者WebStar。几乎所有的主流服务器都直接或通过插件支持Servlet。 节省投资

不仅有许多廉价甚至免费的Web服务器可供个人或小规模网站使用,而且对于现有的服务器,如果它不支持Servlet的话,要加上这部分功能也往往是免费的(或只需要极少的投资)。

Java Servlet与JSP(JavaServer Pages) 的比较:

JavaServer Pages(JSP)是一种实现普通静态HTML和动态HTML混合编码的技术,JSP并没有增加任何本质上不能用Servlet实现的功能。但是,在 JSP中编写静态HTML更加方便,不必再用println语句来输出每一行HTML代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计者进行HTML设计,同时留出供Java Servlet程序员插入动态内容的空间。

6

第二章 开发工具,语言,及数据库简介

2.3 Struts框架

在我学习Struts框架时,我本人更愿意看到Struts的本质,其实Strurts框架就是一个核心类ActionServlet,这个类把所有请求都劫走了,然后根据请求的URL转发到相应的Action上,让Action处理相应的系统业务,表单数据由Struts替我们进行封装FormBean中,我们只需取出来进行操作。在有Struts框架编程时我们不需要认真考虑里面的机制,而是要学会如何更好的去运用它。 如果有一天我愿意,我会在我做的项目中手动编写一个框架。 Strusts框架的基本组成如下:

1: Client browser(客户浏览器) 来自客户浏览器的每个 HTTP 请求创建一个事件。Web 容器将用一个 HTTP 响应作出响应。

2: Controller(控制器) 控制器接收来自浏览器的请求,并决定将这

个请求发往何处。就 Struts 而言,控制器是以 servlet 实现的一个命令设计模式。 struts-config.xml 文件配置控制器命令。

3:业务逻辑 业务逻辑更新模型的状态,并帮助控制应用程序的流程。就 Struts 而言,这是通过作为实际业务逻辑“瘦”包装的 Action 类完成的。

4:Model(模型)的状态 模型表示应用程序的状态。业务对象更新应用程序的状态。ActionForm bean 在会话级或请求级表示模型的状态,而不是在持久级。JSP 文件使用 JSP 标记读取来自 ActionForm bean 的信息。

5:View(视图) 视图就是一个 JSP 文件。其中没有流程逻辑,没有业务逻辑,也没有模型信息 —— 只有标记。标记是使 Struts 有别于其他框架(如 Velocity)的因素之一。

6: Struts中的Controller(控制器) 命令设计模式的实现: Struts 的控制器将事件(事件通常是 HTTP post)映射到类的一个 servlet.

ActionServlet (Command) 创建并使用 Action 、 ActionForm 和 ActionForward .通过struts-config.xml 文件配置该 Command.从而扩展 Action 和 ActionForm 来解决特定的问题。可以通过扩展 ActionServlet 来添加 Command 功能。

在Struts框架中控制器组件由三个部分构成: (1)消息控制模块; 用户所有的提交请求都发往消息控制模块,在由消息总线模块根据视图映射模块找到消息处理模块来执行处理逻辑。 消息控制模块接收所有用户的请求,并根据请求视图找到处理。 Strtus中通过ActionServlet和RequestProcessor类来完成。 2,消息处理模块; 该模块执行该消息的逻辑处理,因此通常由用户扩展实现。 Struts中通过Action类来实现。 3,视图映射模块; 控制器逻辑和视图逻辑之间的结合是通过配置模块和配置文件建立其的链接。 Struts中配置模块通过ModuleConfig类来完成,而配置文件由struts-config.xml文件提供。

7: Struts中的View(视图) 视图组件通过JSP组件实现的。Struts框架对视图组件进行了扩展和封装。 Struts对视图的扩展提供了一组扩展服务器标签用来提供视图显示以及传递数据到处理缓冲,而处理缓冲由ActionForm

7

门户网站的设计与开发

的扩展类来实现。 Struts框架利用ActionForm Bean来实现视图与控制器之间的数据的交互,维持会话级或请求级的模型的状态。 服务器标签主要包括: Html视图标签; Logic逻辑流程控制标签; Bean数据缓冲读取标签;

8:Struts中的Model(模型) 1,Struts框架中并没有定义特定的模型组件,而是希望由用户自己决定选择合理的模型组件。 J2EE中可用的模型组件包括: JavaBean 用户定义组件; EJB 组件,由EJB容器实现组件; JDO 未来J2EE数据访问模型; 一些扩展框架如:Hibernate; 2,模型中状态的级别 会话级或请求级:ActionForm bean来维持 ; 持久级:模型组件来。

8

第三章 总体设计

第三章 总体设计

3.1 需求分析

本系统是新闻发布系统。由于网站新闻需要频繁性更新,每次更新管理员都要到服务器上更新,给管理员管理网站造成不便,因这种需求本系统诞生了。

在系统开发过程中寻找需求是一件十分重要的工作,在认真分析和调查后确本系统参与者:管理员、普通用户、浏览者。

系统功能模块:

用户登陆 用户注册 用户修改信息 管理新闻 添加新闻 管理用户 注销

定了本系统的需求要求。

新闻浏览

系统功能模块图3.1

新闻发布系统 浏览新闻用户登录注册用户修改注册信息添加新闻管理新闻管理用户注销 图3.1

9

门户网站的设计与开发

3.2 数据库设计

数据库命名为mynews,三张表user,news,admin。 User表字段(username,password,phone,qq)

图3.2

News表字段(id,title,author,message,post_time,username)

图3.3

Admin表字段(username,password)

图3.4

3.3 功能模块简介

新闻浏览

首页显示网站所有新闻列表,根据新闻的数量分页,网站顾客可以自由浏览新闻。 用户登陆

用户登界面,用户需根据自己的类型(普通用户,管理员)进行选择性登陆,登录时需要填写验证码。注意本系统部分功能只有在登陆后才被激活,且不同用

10

第三章 总体设计

户类型登陆后所具有的功能也不同。 图3.5是用户登录用例图

图3.5

用户注册

注册模块仅服务于普通用户,在网站上注册的用户身份仅是普通用户,管理 图3.6新用户注册状态图 员需到服务器注册信息。

11

门户网站的设计与开发

图3.6

用户修改信息

普通用户登陆后才能修改自己的信息,为了确保系统安全系统管理员不能在客户端修改信息,必须到服务器数据库直接修改信息。 图3.7用户修改信息序列图

图3.7

管理新闻

用户登陆后此模块被激活,为了确保其他用户在本站的利益,用户仅可以管理自己的新闻,管理新闻包括(删除,修改),系统管理员可以管理所有用户发表的新闻。

图3.8用户管理新闻用例图

12

第三章 总体设计

图3.8

添加新闻

用户登录后可以发布新闻,发布的新闻将在系统首页新闻列表中显示出来,用户在发表新闻时若不填写作者,系统默认当前用户为作者。发表时间不用填写,由系统根据服务器时间默认。 管理用户

此模块专属于系统管理员,系统管理员登陆后,可以查看本系统存在的所有管理员可以根据需要,对系统中的任何用户进行封号处理。 普通用户的信息,信息包括(用户名,密码,联系电话,即时通信QQ)。 图3.9管理员管理用户用例图

13

门户网站的设计与开发

图3.9

注销

当用户登录后,不再进行操作时,为了减少服务器资源的浪费和自身账户的安全性,可以进行注销。

3.4 框架的应用

使用struts框架需要搭建环境

拷贝struts lib下的所有jar到WEB-INF/lib下 ? 修改web.xml文件,配置ActionServlet ? 指定struts-config.xml的位置 ? ActionServlet的日志输出等级

? 配置Apache的第三方组件的日志输出等级

? 当Tomcat启动的时候执行ActionServlet的初始化方法 ? 提供struts-config.xml文件 ? 应用struts创建登录项目

? 创建jsp页面(login.jsp,success.jsp,error.jsp)

? 创建LoginActionForm.java,做数据收集的。属性名与表单元素名一致 ? 创建LoginAction.java ? 配置struts-config.xml文件 ? ActionServlet

? 由Struts提供:org.apache.struts.action.ActionServlet ? 是一个Servlet,需要在web.xml中配置 ? ActionForm

? 封装页面提交的数据

? 继承自org.apache.struts.action.ActionForm ? 需要在struts-config.xml中配置

? 与JSP的交互:从页面获取数据loginActionForm.getUsername();

发送数据到页面request.setAttribute(\? Action[****Action.java] ? 封装一类客户操作

? 继承自org.apache.struts.action.Action,实现execute方法 ? 需要在struts-config.xml中配置 ? struts-config.xml

? 配置Form Bean和Action Bean

14

第三章 总体设计

? 服务器启动时,Struts装载struts-config.xml信息

服务器启动后,根据web.xml加载ActionServlet读取struts-config.xml文件内容到内存。

输入用户名密码提交表单、提交到action属性的login.do,通过ActionServlet

读struts-config.xml文件找到 action下的path属性找到.do,通过name属性找form-beans中的form-bean的name属性得到ActionForm的包名类名,先实例化form,把表单的值填充给form,调用form的validate方法验证、ActionErrors返回null表示验证通过,否则失败返回input指定的页面.验证通过会实例化Action,执行Action的excute方。

整个项目的Struts-config.xml配置文件代码:

\

\

15

门户网站的设计与开发

16

门户网站的设计与开发

第四章 详细设计

4.1 新闻显示功能

首页(index.jsp)负责显示新闻列表,点击新闻标题将显示出新闻详细内容,新闻标题上加有链接,链接到showNewsDeatil.Jsp页面,此页面负责显示新闻详细内容(标题,发表时间,内容,作者)。根据新闻条数NewsTurnPageAction.java负责新闻列表分页,点击“上一页”“下一页”实现分页。

新闻内容都存与UserBean 的实例化对象user中,数据封装好后存放到session中供用户读取。

4.2 用户注册功能

register.jsp页面负责提交新用户注册信息,信息提交给Struts,有RegisterActionForm.java把表单数据接收过来封装,Register.java从FormBean(RegisterActionForm.java)中把数据提取出来,进行检测,首先检测用户名,检查是否已被注册,此过程用到myutils包中的UserUtils类。

此系统支持汉化用户名,所以用户名还要进行编码处理,用以保障用汉字注册用户名的用户。

注册成功返回success.jsp 否则返回error.jsp页面。

4.3 修改注册信息功能

此模块登陆后才能被激活,此模块是普通用户设计的,管理员不可以在客户端修改信息,modifyUserMess.jsp页面负责修改。

当用户登陆后,点击修改,GetUserOldMessAction.java负责查询用户信息,得到信息后,把信息存放到UserMessage.java的实例化对象userMess中,然后modifyUserMess.jsp页面引入userMess对象获得旧的信息,修改后提交给ActionServlet.java类,ActionServlet根据Struts-config.xml中的URL配置再转发到ModifyUserMessAction.java,经过处理后最终存入数据库中。

17

第四章 详细设计

4.4 管理新闻功能

此模块登录后被激活,普通用户登陆后仅可以管理自己的新闻,管理项目包括(删除,修改)。

管理员登陆后可管理数据库中所有的新闻,管理项目包括(删除,修改)。 删除新闻基本实现流程:managerUserAction.jsp显示新闻列表,单击“删除”——>confirmDeleteNews.Jsp——>DeleteNewsAction.java最终SqlUtils.java工具类根据接收到的id号,从数据库的news表把相应的新闻删除。

编辑新闻基本实现流程:单击“修改”——>modifyNews.jsp(负责显示当前新闻,并提交新新闻)——>ModifyNewsAction.java(处理后存入数据库)。

4.5 添加新闻功能

添加新闻的最低用户级别是普通用户,用户登录后可以在addNews.jsp页面

添加新闻,新闻提交给Struts,ActionServlet.java负责分发给相应的Action类处理,给据配置文件的FormBean把提交的新闻信息封装,然后AddNews.java类从FormBean(AddNewsActionForm.java)中取出数据处理后存入news表中。

添加新闻基本流程:addNews.jsp——>AddNewsAction.java——>SqlUtils.java(工具类)——>news新闻表。

4.6管理用户

此模块系统管理员专有,系统管理员登录后,此模块被激活。

managerUserList.jsp页面负责显示用户列表,管理员可以根据需要对个别

用户进行封号处理。点击删除,把对应用户的用户名最终传递给SqlUtils.java(工具类),由工具类实施删除。

封号实现流程:点击“删除”——>confirmDeleteUser.jap——>DeleteUserAction.java——>SqlUtils.java(工具类:根据接收到的用户名,在数据库mynews的User表中删除相应用户)。

4.7注销

ExitAction.java负责注销,当用户登录后,不再进行操作点击导航栏上的“注销”系统会销毁当前session。

18

门户网站的设计与开发

基本实现流程:点击“注销”——>ExitAction.java(销毁当前session对象)。

19

门户网站的设计与开发

第五章 功能实现

5.1 新闻显示功能

NewsBean.java部分代码(负责新闻数据封装):

private CachedRowSetImpl row; private int pageSize; private int pageCount; private int rowCount; private int currentPage; public NewsBean(){ pageSize= 10; currentPage = 1; String sql = https://www.bwwdw.com/plus/\ List parameters = new ArrayList(); row = SqlUtils.querySql(sql, parameters); try { row.last(); rowCount = row.getRow(); pageCount

(rowCount%pageSize==0)?(rowCount/pageSize):(rowCount/pageSize+1); } catch (SQLException e) { e.printStackTrace(); rowCount = 0; pageCount = 0; } } public NewsBean(String username){ pageSize= 10; currentPage = 1; String sql; boolean ok; List parameters = new ArrayList(); ok = UserUtils.isExistingUser(username); if(ok){ sql = https://www.bwwdw.com/plus/\ parameters.add(username); }else{ sql = https://www.bwwdw.com/plus/\ } row = SqlUtils.querySql(sql, parameters);

20

=

第五章 功能实现

try { row.last(); rowCount = row.getRow(); pageCount

(rowCount%pageSize==0)?(rowCount/pageSize):(rowCount/pageSize+1); } catch (SQLException e) { e.printStackTrace(); rowCount = 0; pageCount = 0; } } showNewsList.jsp主要代码(负责首页新闻题目列表): <% NewsBean news = null; news = (NewsBean)session.getAttribute(https://www.bwwdw.com/plus/\ if(news==null){ response.sendRedirect(https://www.bwwdw.com/plus/\ }else{ news.setPageSize(12); CachedRowSetImpl row = news.getRow(); int pageCount = news.getPageCount(); int currentPage = news.getCurrentPage(); int rowCount = news.getRowCount(); int pageSize = news.getPageSize(); %>

  <% row.absolute((currentPage-1)*pageSize+1);

String str;//声明一个截取时间的临时字符串 for(int i = 1; i<= pageSize;i ++){ str = row.getString(https://www.bwwdw.com/plus/\ %> ' target=https://www.bwwdw.com/plus/\ ><%=row.getString(https://www.bwwdw.com/plus/\ <%=str.substring(0,11) %>

21

=

门户网站的设计与开发

<% if(!row.next())break; } %>  

图5.1

5.2 用户注册功能

RegisterAction.java部分代码(负责处理注册动作) package action; import myutils.*; .

.//部分包省略

import actionForm.RegisterActionForm;

public class RegisterAction extends Action { /**

22

第五章 功能实现

}

* 注册用户

* 先查询用户是否存在

* 根据查询结果来处理是否执行注册 */

@Override

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { RegisterActionForm raf=(RegisterActionForm)form; String username=StringUtils.StringEcode(raf.getUsername()); String password=StringUtils.StringEcode(raf.getPassword()); String phone=StringUtils.StringEcode(raf.getPhone()); String qq=StringUtils.StringEcode(raf.getQq()); boolean isExistingUser=UserUtils.isExistingUser(username); if(isExistingUser){ return mapping.findForward(\ }else{ boolean ok = UserUtils.addUser(username, password,phone,qq); if(ok){ return mapping.findForward(\ }else{ return mapping.findForward(\ } } }

图5.2

23

门户网站的设计与开发

5.3 修改注册信息功能

GetUserMessAction.java(负责向用户返回旧信息) package action; /

/部分包省略

import org.apache.struts.action.ActionMapping;

public class GetUserMessAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { UserLogin login = null; HttpSession session = null; try { session = request.getSession(true); login = (UserLogin)session.getAttribute(\ } catch (Exception e) { return mapping.findForward(\ } if(login!=null){ ResultSet rs = null; UserMessage usermess = new UserMessage(); String username = login.getUsername(); String password = login.getPassword();

}

//查询当前用户信息 rs = UserUtils.queryUserMess(username); if(rs.next()){ String phone = rs.getString(3); String qq = rs.getString(4); usermess.setUsername(username); usermess.setPassword(password); usermess.setPhone(phone); usermess.setQq(qq); request.setAttribute(\ return mapping.findForward(\ }else{ return mapping.findForward(\ } }else return mapping.findForward(\

24

第五章 功能实现

}

UserModifyMessAction.java部分代码(处理用户提交的新信息) package action;

public class UserModifyMessAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { RegisterActionForm raf = (RegisterActionForm)form; String username = StringUtils.StringEcode(raf.getUsername()); String password = raf.getPassword(); String phone = raf.getPhone(); String qq = raf.getQq(); boolean ok = UserUtils.updateUserMess(username, password, phone, qq); if(ok){ return mapping.findForward(\ }else{ return mapping.findForward(\ } } }

图5.3

5.4 管理新闻功能

managerNewsList.jsp(负责新闻管理页面新闻列表)部分代码:

 

25

门户网站的设计与开发

<% row.absolute((currentPage-1)*pageSize+1); String str;//声明一个截取时间的临时字符串 for(int i = 1; i<= pageSize;i ++){ str = row.getString(\ %> <%=(i+ (currentPage-1)*pageSize)%> <%=row.getString(\ <%=row.getString(\ <%=str.substring(0,11) %> 删除 ' >修改 <% if(!row.next())break; } %>

DeleteNewsAction.java(负责删除新闻)主要代码:

public class DeleteNewsAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { HttpSession session = request.getSession(true); UserLogin login = (UserLogin)session.getAttribute(\ String id = request.getParameter(\ String sql = \ List parameters = new ArrayList(); parameters.add(id); int count = SqlUtils.ZSGSql(sql, parameters); if(count>0){ NewsBean mNews = null; mNews = (NewsBean)session.getAttribute(\ int pageSize = mNews.getPageSize(); int currentPage = mNews.getCurrentPage(); mNews = new NewsBean(login.getUsername()); mNews.setPageSize(pageSize); int pageCount = mNews.getPageCount();

26

第五章 功能实现

if(currentPage>pageCount) mNews.setCurrentPage(pageCount); else mNews.setCurrentPage(currentPage); session.setAttribute(\ return mapping.findForward(\ }else{ return mapping.findForward(\ } } }

ManagerNewsTurnPageAction.java(负责新闻管理面板的分页)代码省略: ModifyNewsAction.java(负责修改新闻)代码省略:

图5.4

5.5 修改新闻功能

ModifyNewsAction.java(负责修改新闻)部分代码: public class ModifyNewsAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { HttpSession session = request.getSession(); UserLogin login = (UserLogin)session.getAttribute(\ AddNewsActionForm modnews = (AddNewsActionForm)form;

27

门户网站的设计与开发

}

String title = StringUtils.StringEcode(modnews.getTitle()), author = StringUtils.StringEcode(modnews.getAuthor()), message = StringUtils.StringEcode(modnews.getMessage()), id = modnews.getId();

String sql = \List parameters = new ArrayList(); parameters.add(title); parameters.add(author); parameters.add(message); parameters.add(id);

int count = SqlUtils.ZSGSql(sql, parameters); if(count>0){ NewsBean mNews = null; mNews = (NewsBean)session.getAttribute(\ int pageSize = mNews.getPageSize(); int currentPage = mNews.getCurrentPage(); mNews = new NewsBean(login.getUsername()); mNews.setPageSize(pageSize); mNews.setCurrentPage(currentPage); session.setAttribute(\ return mapping.findForward(\}else{ return mapping.findForward(\} }

28

第五章 功能实现

图5.5

5.6管理用户

managerUserList.jsp(负责管理用户界面显示用户信息列表)部分代码: <% row.absolute((currentPage-1)*pageSize+1); for(int i = 1; i<= pageSize;i ++){ %> <%=(i+ (currentPage-1)*pageSize)%> <%=row.getString(\ <%=row.getString(\ <%=row.getString(\ <%=row.getString(\ 删除 <% if(!row.next())break; } %>

DeleteUserAction.java(负责删除用户)部分代码: public class DeleteUserAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { HttpSession session = request.getSession(true); String id = StringUtils.StringEcode(request.getParameter(\ String sql = \ List parameters = new ArrayList(); parameters.add(id); int count = SqlUtils.ZSGSql(sql, parameters); if(count>0){ UserBean user = null; user = (UserBean)session.getAttribute(\ int pageSize = user.getPageSize(); int currentPage = user.getCurrentPage();

29

门户网站的设计与开发

}

}

user = new UserBean(); user.setPageSize(pageSize); int pageCount = user.getPageCount(); if(currentPage>pageCount) user.setCurrentPage(pageCount); else user.setCurrentPage(currentPage); session.setAttribute(\ return mapping.findForward(\}else{ return mapping.findForward(\}

ManagerUserTurnPageAction.java(负责用户管理界面用户列表分页)代码与新闻分

页基本相同,不再重复。

图5.6

5.7注销

ExitAction.java(负责系统注销)代码如下:

package action;

import mybean.UserLogin; import javax.servlet.*;

30

第五章 功能实现

import javax.servlet.http.*;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class ExitAction extends Action { @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { HttpSession session = request.getSession(true); UserLogin login = (UserLogin)session.getAttribute(\ if(login==null) return mapping.findForward(\ else { session.invalidate(); return mapping.findForward(\ } } }

如图导航栏最右边链接(即注销按钮):

图5.7

31

第六章 结束语

第六章 结束语

通过本次Web系统的课程设计,使我对面向对象的概念有了更进一步的了解,把过去的知识又重新串了一遍,我现在已经认同Java不仅是语言,而更应该说他是一个平台。Jsp开发系统十分灵活,使得开发的系统扩展性更好。 有了这次数据苦的设计,我知道了开发系统不是选择最好的数据库,而是选择最合适的数据库,mysql作为免费、开源数据库中的优胜者,当之无愧被我选择。 在整个系统的设计中,寻找需求是最重要,这次课程设计前期需求分析没有做好,导致后便开发模块时需要大量修改前面的大量代码。所以一件成功的事情,不能仅仅在事情将要结束时把能量集中去保证一个好的结果出现,而是要有个好的开始并伴随到最后。

这次设计我明白了思想的重要性,如果我们没有自己的编程思想和好的工作方式,而是一味的模仿其他,那么当我们遇到棘手的问题时是很难解决的,所以在学习和工作中我们要不断的积累经验,激活自己的思想,这样才能应变各种困难。

这次课程设计我看了很多书,在网上查找了许多资料,要感谢的人太多了,确实不知道要感谢谁,但我一定不会忘记感谢邓红老师,他对学生就像朋友一样,没有了两千多年保留下来的师生关系的鸿沟,正是这种原因我才有了一有问题就去问他的勇气。良师益友,人生舵手。

32

致 谢

致 谢

从论文选题到搜集资料,从写稿到反复修改,期间经历了喜悦、聒噪、痛苦和彷徨,在写作论文的过程中心情是如此复杂。如今,伴随着这篇毕业论文的最终成稿,复杂的心情烟消云散,自己甚至还有一点成就感。那种感觉就宛如在一场盛大的颁奖晚会上,我在晚会现场看着其他人一个接着一个上台领奖,自己却始终未能被念到名字,经过了很长很长的时间后,终于有位嘉宾高喊我的大名,这时我忘记了先前漫长的无聊的等待时间,欣喜万分地走向舞台,然后迫不及待地开始抒发自己的心情,发表自己的感想。这篇毕业论文的就是我的舞台,以下的言语便是有点成就感后在舞台上发表的发自肺腑的诚挚谢意与感想: 我要感谢,非常感谢我的导老师。她为人随和热情,治学严谨细心。在闲聊中她总是能像知心朋友一样鼓励你,在论文的写作和措辞等方面她也总会以“专业标准”严格要求你,从选题、定题开始,一直到最后论文的反复修改、润色,许老师始终认真负责地给予我深刻而细致地指导,帮助我开拓研究思路,精心点拨、热忱鼓励。正是邓红老师的无私帮助与热忱鼓励,我的毕业论文才能够得以顺利完成,谢谢老师。 我要感谢,非常感谢学长。正在撰写硕士研究生毕业论文的他,在百忙之中抽出时间帮助我搜集文献资料,帮助我理清论文写作思路,对我的论文提出了诸多宝贵的意见和建议。对学长的帮助表示真挚的感谢。

33

参考文献

参考文献

[1] JSP数据库系统开发完全手册 人民邮电出版社 2006年3月 [2] Delphi数据库系统开发完全手册 人民邮电出版社 2006年3月 [3] Visual Basic数据库系统开发完全手册 人民邮电出版社 2006年3月 [4] Visual C++数据库系统开发完全手册 人民邮电出版社 2006年3月 [5] JSP 信息系统开发实例精选 机械工业出版社 王国辉、牛强、李南南等 2005年7月

[6] Visual Basic信息系统开发实例精选 机械工业出版社 宋坤、赵智勇、刘强等 2005年7月

[7] SQL Server数据库开发实例解析 机械工业出版社 宋昆、李严等 2006年1月

[8] Access数据库开发实例解析 机械工业出版社 李俊民、高春燕等 2006年1月

[9] Visual Basic精彩编程200例 机械工业出版社 赛奎春、高春艳等 2003年1月

[10] ASP数据库开发实例解析 机械工业出版社 李严、于亚芳、王国辉

2004年12月

[11] Delphi工程应用与项目实践 机械工业出版社 宋坤、赵智勇等 2005年1月

[12] Visual Basic工程应用与项目实践 机械工业出版社 高春艳、李俊民等 2005年1月 2005年1月

[14] JSP工程应用与项目实践 机械工业出版社 陈威、白伟明、李楠 2005年2月

[15] ASP工程应用与项目实践 机械工业出版社 王国辉、牛强、李南南

2005年4月

[16] Visual Basic 信息系统开发实例精选 机械工业出版社 高春艳、李俊民、张耀庭等 2005年7月

[17] ASP 信息系统开发实例精选 机械工业出版社 王国辉、牛强、李南南等 2005年7月 2005年7月

[18] Delphi 信息系统开发实例精选 机械工业出版社 宋坤、赵智勇、刘强等 [19] Visual FoxPro数据库开发关键技术与实例应用 人民邮电出版社 周桓、

34

[13] Visual C++工程应用与项目实践 机械工业出版社 张雨、阮伟良等

参考文献

张雨、王国辉 2004年5月

[20] PowerBuilder数据库开发关键技术与实例应用 人民邮电出版社 刘志铭 张振坤 冯文萃 2004年5月

[21] Delphi数据库开发关键技术与实例应用[M] 人民邮电出版社 赛奎春 陈紫鸿 2004年5月

[22] Visual basic数据库开发关键技术与实例应用 人民邮电出版社 高春艳、李艳 2004年5月

[23] Visual C++ 管理信息系统完整项目实例剖析 人民邮电出版社 明日科技 2005年7月

[24] Visual Basic 管理信息系统完整项目实例剖析 人民邮电出版社 明日科技 2005年7月

[25] PowerBuilder 管理信息系统完整项目实例剖析 人民邮电出版社 明日科技 2005年7月

[26] Visual FoxPro管理信息系统完整项目实例剖析 人民邮电出版社 明日科技 2005年7月

35

本文来源:https://www.bwwdw.com/article/ambo.html

Top