当前位置: 首页 > news >正文

基于Java(SSH框架)+MySQL 实现(Web)公司通用门户(CMS)网站

一、公司通用门户网站的设计与实现

摘要:随着IT应用的深入普及,各行各业都积累了大量的信息资源,实现企业内部信息技术资源的有效整合和精益化管理,是越来越多公司企业的迫切需求。公司门户网站是一个企业向外宣传企业品牌和展示产品及开拓市场的有力工具,是行业或地区规模化效益的有力手段,是市场应对贸易全球化和管理信息化趋势时的一个必然选择。本文基于J2EE相关技术和B/S模式的MVC架构,使用SSH框架进行开发,合理运用设计模式,并遵循软件工程的开发思想,实现了预期的功能。系统对行业资源和行业信息进行有效的整合,不仅可以增强企业的宣传力度,增加企业产品展示和服务的机会。鉴于此,本文首先阐述了公司通用门户网站的需求分析的设计与实现,其次阐述了其相关技术的理论研究和实践运用。最后系统地实现了公司门户网站的基本功能,包括新闻、产品、视频、留言中心,公司信息介绍等,以及对应的后台管理。

关键词:门户网站;Strusts2;Spring;Hibernate

二、引言

2.1 项目背景

世纪以来,互联网进入到一个高速发展的时代,网络资源和网络信息变得越来越丰富,人们已经习惯于在网络中获取信息,了解世界。信息化的发展,也带动着其它产业的发展,各行业都将与网络进行着更深入的融合和渗透。越来越多的公司企业已开始从对互联网的认知阶段进入到认同和行动阶段,纷纷建立了自己门户的网站,使企业本身不局限于某个地区,而是直接面向全世界,它的广泛性、高效性为企业带来了不容质疑的效益和效率。公司的网络形象是公司形象的重要组成部分,它可以提高公司的知名度,增强企业的竞争力,因此企业建立一个具有自己特色的,精美完善的,集多种功能于一体的公司门户网站,尤其重要。

作为一个公司门户网站,首先要简洁美观,展现出公司的形象,另外要实现公司的资源信息化,使更多的人通过网络可以去了解公司。公司企业可以通过门户网站,发布新闻,展示产品图片和影像资源,招揽加盟商,以及人才招聘等。通过网站可以及时有效获得用户获得反馈,获得用户的需求,有助于提高公司的服务规范和改善不足[1]。

2.2 项目说明

本系统为公司通用门户网站,主要分为前台和后台两大部分。前台包括首页展示,新闻中心,产品展示,视频中心,公司信息,留言中心,加盟注册等功能。后台可以对前台的资源进行有效的管理,包括公司信息管理,新闻管理,产品图片管理,视频管理,留言管理,也可以用户和客户建立连接,发送资源信息。同时项目要比较灵活,实现快速修改,适用于各类中小型企业公司。另外要便于功能扩展,以及后期维护。

三、相关技术

本系统作为一个小型的企业级应用,良好的架构设计起着巨大的作用,系统基于J2EE的体系结构,采用MVC分层设计,使用SSH框架。通过这些技术可以提高系统的开发效率,也方便业务功能的拓展和维护。下面对相关技术进行一个简单的介绍。

3.1 EE相关技术

EE是Java的企业级应用,是一套面向企业应用的体系结构。J2EE通过提供中间层集成框架来满足多种需求,其中包括高可用性、高可靠性、高可扩展性以及低成本等需求。J2EE是JavaSE的扩展和延伸,它拥有JavaSE中的许多优点,例如:平台无关性,也就是常说的“一次编写、随处运行”的特性,从而拥有宽广的应用空间。J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,可简化并规范应用系统的开发与部署,进而提高可移植性、安全与再用价值。J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性。J2EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,有良好的向导支持打包和部署应用,添加目录支持,增强安全机制,提高性能[2]。

3.2 MVC相关技术

MVC是Model,View,Controller的简称,即模型一视图一控制器。MVC是在二十世纪八十年代发明的一种软件设计模式,随着J2EE的成熟,MVC逐渐成为在J2EE平台上推荐的一种设计模式,也是广大Java开发者非常感兴趣的设计模型。随着网络应用的快速增加,MVC对于Web应用的开发无疑是一种非常先进的设计思想,无论选择那种语言,无论应用多复杂,它都能够在理解分析应用模型时提供最基本的分析方法,为构造产品提供清晰的设计框架,也为软件工程提供规范的依据。MVC的设计模式是在框架的发展过程中诞生的一种优秀的设计思想。MVC模型原理图如图2–1所示。

图2–1 MVC模型原理图

这三部分所实现的功能如下:

模型部分(model)是应用程序的主体部分。模型表示业务数据 和业务逻辑。一个模型能为多个视图提供数据。由于同一个模型可以被多个视图重用,所以提高了应用的可重用性。

视图部分(view)是用户看到并与之交互的界面。视图向用户显示相关的数据,并能接收用户的输入数据,但是它并不进行任何实际的业务处理。视图可以向模型查询业务状态,但不能改变模型。视图还能接受模型发出的数据更新事件,从而对用户界面进行同步更新。

控制器部分(controller)是处理用户与软件的交互操作的,其职责是控制提供模型中任何变化的传播,进而实现对模型的计算控制,是使模型和视图协调工作的部件。通常一个视图具有一个控制器。

模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都应反映出这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,致使显示更新。

3.3 SSH框架技术

框架是整个系统或系统一部分的可重用设计,由一组抽象的类及其实例间的相互作用方式组成。框架一般具有即插即用的可重用性、成熟的稳定性以及良好的团队协作性。软件开发越来越离不开框架技术。框架可以缩短应用软件系统的开发周期,提高软件生产效率和质量。J2EE复杂的多层结构决定了大型的J2EE项目需要运用框架和设计模式来控制软件质量。目前,市场上出现了一些商业的、开源的基于J2EE的应用框架,其中主流的框架技术有:基于MVC模式的Struts框架和基于IoC模式的Spring框架以及对象关系映射框架Hibernate等[3]。

3.3.1 Strust2

Struts2是一种基于MVC经典设计模式的软件框架,Struts2是Struts1和WebWork技术的合并,它通过把Servlet、JSP、JavaBean、自定义标签和信息资源整合到一个统一的框架中,为Web开发提供具有高可配置性的MVC开发模式。主要分为模型(Model)、视图(Viewer)和控制器(Controller)---部分,其主要的设计理念是通过控制器将表现逻辑和业务逻辑解耦,以提高系统的可维护性、可扩展性和可重用性[4]。

Struts2是一个开源项目软件,可以让使用者深入了解其内部运行的实现机制,甚至可以根据自己的需要对其进行修改和拓展,因此其拥有巨大的灵活性。同时,Struts2经过多年的发展,已经逐渐成长为一个稳定、成熟的Web应用框架,受到了多数人的欢迎和支持,其应用的环境也是相当成熟的。其次,在Struts2应用框架中,通过对MVC各层次良好的划分,清晰的界定了系统各功能层次的界限,有效的理清了系统的结构和流程,为系统今后的维护、拓展和升级打下了良好的基础。同时,通过构建模型层,使得业务逻辑与数据检索逻辑重用变得容易了。在表示层的开发上,Struts2拥有一套完整的Taglib(标记库),灵活使用,能够大大的提高开发效率。最后,Struts2还提供了与其他优秀框架技术相结合的扩展接口,可以方便的进行系统技术上的升级[5]。

3.3.2 Spring

Spring是一个解决了许多J2EE开发中常见问题并能够替代EJB技术的强大的轻量级框架。Spring的轻盈体现在其框架本身的基础结构以及对其他应用工具的支持和装配能力。Spring可使程序研发人员把各个技术层次之间的风险降低。Spring框架的核心是控制翻转IoC(Inversion of Control)/依赖注入DI(Dependence Injection)机制。IoC是指由容器中控制组件之间的关系而非传统实现中由程序代码直接操控,这种将控制权由程序代码到外部容器的转移,称为“翻转”。DI是对IoC更形象的解释,即由容器在运行期间动态地将依赖关系注入到组件之中。Spring采用设值注入和构造子注入的机制,通过配置文件管理组件的协作对象,创建可以构造组件的IoC容器。这样,不需要编写工厂模式或者其他构造的方法,就可以通过容器直接获取所需的业务组件。Spring体系结构如图2–2所示。

图2–2 Spring体系结构图

3.3.3 Hibernate

Hibernate是一个面向Java环境的开放源代码的对象/关系数据库映射工具。它对JDBC进行了轻量级的对象封装,使Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate不仅仅管理Java类到数据库表的映射,还提供数据查询和获取数据的方法,可以大幅度的减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate总体架构如图2–3所示。

图2–3 Hibernate总体架构图

持久化(Persistence)是对数据和程序状态的保持。大多数情况下特别是企业级应用,数据持久化操作往往也就意味着将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系数据库来完成。持久层(Persistence Layer)是把数据库实现当作一个独立的逻辑,因为数据库程序是在内存中的,为了使程序运行结束后状态得以保存,就要保存到数据库。持久层是在系统逻辑层面上,专注于实现数据持久化的一个相对独立的领域。ORM是Object Relational Mapping的简称,即对象关系映射。它是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换为另外一种形式。有了ORM对象,只需用O/R Mapping保存、删除、取对象,O/R Mapping负责生成SQL。这样,我们在具体操作数据库的时候,就不需要再去和复杂的SQL语句打交道 [6]。

3.3.4 SSH整合

SSH架构图如图2–4所示。

Struts负责Web层。ActionFormBean接收网页中表单提交的数据,然后通过Action进行处理,再Forward到对应的网页,在Struts-config.xml中定义了action-mapping,ActionServlet会加载进来。

Spring负责业务层管理,即Service。Service为Action提供统一的调用接口,封装持久层的DAO,并集成Hibernate,Spring可对JavaBean和事务进行统一管理。

Hibernate负责持久层,完成数据库的CRUD操作。Hibernate有一组hbm.xml文件和PO,是与数据库中的表相对应的,然后定义DAO,这些是与数据库打交道的类[7]。

在Struts+Spring+Hibernate系统中,对象之间的调用流程如图2–5所示。

四、系统分析

系统分析的目的在于为系统的实现制定蓝图,使以后的开发过程思路清晰,同时可以提高开发的速度和质量,为系统运行之后的维护升级提供参考。系统分析也是对用户需求的明确描述,是对要解决问题的彻底理解,并且对要解决的问题进行详细的分析,弄清楚客户的需求,页面要如何展示,以及所要实现的功能,具体到各类的细节问题。

4.1 系统可行性研究

4.1.1 技术可行性

本系统主要是公司门户网站,达到企业进行信息资源发布,与客户建立联系,同时实现信息化的管理。从技术方面,Java已经有了将近20年的发展史,设计到各行各业各个领域,其中J2EE作为企业级开发在web中也占据着重要地位,网络资源比较丰富,开源软件比较多。自己在大三的时候已经自学完SSH,对各种数据库也有接触,对前台设计,JS脚本等也都有所学习,加上一年多以来的项目经验积累,对项目开发中的众多问题也都有所了解,加上有老师的指导。因此,本系统开发在技术上是可行的[8]。

4.1.2 经济可行性

本系统的作为JavaWeb程序,在任何平台上搭建服务器都可以运行,而且Java的相关组件大部分都是开源和免费的,因此不需要投入资金去购买相关的产品服务和技术支持,在普通的PC机安装服务器即可运行。本系统的所有开发组件均为开源免费,无须购买。所以本系统在经济上是完全可行的。

4.2 用户功能需求分析

本系统对公司门户网站前台展示、后台管理分别予以实现。

4.2.1 门户网站前台分析

门户网站需要有首页,新闻中心,产品中心,视频中心,公司介绍,留言中心,用户加盟注册等功能。

首页

显示公司宣传图片,图片自动切换,以及公司的简介,公司动态,新闻发布等信息。

新闻中心

显示新闻列表,支持分页,新闻点击排行,进行新闻阅读,支持打印下载等。

产品中心

显示公司的产品图片,支持分页,以及相关图片信息介绍,以及对应产品详情页。

视频中心

显示视频信息,支持分页,显示视频点击排行,下载排行,以及相应视频详情页。可在线观看视频,以及视频下载。

公司介绍

显示公司的信息,包括公司介绍,公司大事件,企业文化,福利待遇等。

留言中心

用户可进行留言,反馈信息,留言页面要交互友好,提高用户体验。

加盟注册

用户可以在线注册成企业会员,支持邮箱激活账号,注册页面要交互友好,提高用户体验。

4.2.2 系统后台管理分析

后台管理系统,包括公司信息管理,新闻管理,产品管理,视频管理,留言管理,用户管理,考虑系统安全性,加入权限验证。

公司信息管理

对前台的公司信息进行管理,可进行修改。

新闻管理

可以进行新闻发布,以及把新闻群发给注册加盟用户,以及对以往新闻信息进行修改删除操作。

产品管理

可以进行图片上传,图片压缩,以及相关产品信息添加修改和删除操作。

视频中心

可以对视频进行上传,视频格式类型转化,采用多线程技术进行处理,对视频信息可以进行修改,删除。

留言管理

可以对用户留言信息进行管理,对相关留言进行的答复,以及通过用户留言的联系方式进行交流和答复。

用户管理

可以对注册用户进行管理,提高用户权限,对注册用户进行分组,发送邮件等操作。

4.3 数据需求分析

根据以上的用户功能需求,分别设计成数据项和数据结构。

新闻信息包括的数据项有:新闻编号,新闻标题,新闻内容,发布时间,点击数。

产品信息包括的数据项有:产品编号,产品信息,产品名称,图片名称,小图片路径,大图片路径,上传时间。

视频信息包括的数据项有:视频编号,视频标题,视频简介,视频状态,点击次数,下载次数,视频截图路径,视频存放路径,上传时间。

留言信息包括的数据项有:留言编号,留言标题,手机号,邮箱号,用户名,留言内容,留言时间。

公司信息包括的数据项有:信息编号,信息内容。

用户信息包括的数据项有:用户编号,用户名,密码,省份,城市,性别,邮箱,手机号,用户权限,激活状态,激活码。

4.4 性能需求分析

4.4.1 系统界面

要求界面美观简洁大气,布局合理,颜色搭配合理,能展示出公司良好的形象。

4.4.2 系统性能

对于前台,新闻中心,产品中心,视频中心信息的显示要正常,加载流畅,操作简介方便,留言,注册模块要用户体验好。对于后台管理员操作,信息的修改,添加,删除要方便简单,使用无刷新技术。视频上传视频类型转换采用多线程技术后台自动转换。图片的上传采用无刷新的上传方式。

采用优化技术,包括数据库优化和程序优化,对于频繁的数据库访问,可以采用缓存技术。后台数据库操作要使用事务管理,保证数据库信息的完整。

4.4.3 安全性能

用户注册后要保证用户信息的安全性,对于密码可以采用加密技术。后台的操作使用过滤器要验证用户的权限和状态,避免跨权限操作。同时网站要避免SQL注入,影响数据库的安全性。

五、系统设计

5.1 概要设计

5.1.1 系统设计目的和原则

作为公司门户网站,起到宣传公司企业品牌的作用。以往一个公司的知名度只能通过电视,报纸去进行宣传,或者通过产品扩大公司的知名度。往往广大消费者只知道公司的产品,不知道公司的其它信息。通过门户网站,广大用户可以了解公司的详细信息。网站能帮助企业增强处理信息的能力提高企业在新经济时代的竞争力,降低宣传成本,提高效率,也可以为国内、外所有客户提供全面、周到的网上咨询、交流、洽谈、订购等服务。

设计本系统需要采用先进的应用框架和以实用性为根本准则,使得系统既能满足业务需求,又能适应将来发展需要。

实用性原则,是本系统的最基本原则,直接衡量系统的成败。如果开发出来的东西不实用,不能解决实际问题,不能展示出公司的形象和信息,那么系统必将是失败的。

适应性原则,本系统要能适应于多种运行环境,来应对未来变化的环境和需求。虑了在建设平台上保证系统的可靠性和安全性。系统设计中,应有适量冗余及其他保护措施,平台和应用软件具有良好的容错性。

可靠性原则,本系统应该是可靠的,在出现异常时应该有人性化的异常信息方便用户理解原因,或采取适当的应对方案。

拓展性原则,考虑到的网站业务建设是一个循序渐进、不断扩充的过程,系统采用积木式结构,整体构架可以与原有系统进行无缝连接,为今后系统扩展和集成留有扩充余量[9]。

总体规划、分层实施原则,在开始设计之前应该对Web系统进行总体设计,然后在总体设计指导下分布开发。本系统的前台和后台基本J2EE技术,融合了多元信息,采用分层开发:表现层、控制层、业务逻辑层、模型层、数据访问层等,在适应系统需求的准则下,降低耦合的分层结构,能够提高开发效率,降低项目风险,实现各个模块的功能设计,从而完成整个系统的开发。

5.1.2 系统概述

本系统为公司门户网站系统,其中分为前门展示模块与后台管理模块。其中前台展示模块,是公司与广大消费者用户信息交互的桥梁,前台的信息展示中的公司信息,新闻信息,产品信息,视频信息均由后台发布,由后台进行管理,后台的操作影响到前台的显示。同时前台支持用户留言,获得用户信息的反馈,实现用户和企业的沟通。用户通过在前台注册成为企业会员,可以获取公司企业的信息动态,用户浏览和注册简单易用,并且使用无刷新验证和提交技术,提高用户体验。

后台主要是资源的管理,通过在后台信息的管理,实现前台内容的更新。随时可以根据公司需求,对公司信息进行修改,随时可以发表信息,发布产品,发布视频,也可以删除某些资源,并且对某些信息的访问等进行统计。后台信息的增删改查都使用无刷新技术,方便管理人员的操作。图片上传是用无刷新多文件上传技术,减少不必要的操作。支持多格式视频上传,程序自动转换视频格式,以保证前台视频能够正常播放,同时视频转换采用多线程技术,提高系统的使用效率。在发布新闻的时候,可以选择群发 邮件,把公司最新动态发布到用户邮箱。是客户第一时间获得企业最新动态。

系统的总体要求是在网络中实现公司资源的信息化,是用户在网络中能够了解公司信息,企业动态,了解公司产品,提高公司以及产品知名度,树立企业形象,提高公司的竞争力,是公司走向更大的辉煌。

5.2 系统模块设计

根据对该系统功能进行分析,该系统的总体功能模块如图4–1所示,前台功能模块如图4–2所示,后台功能模块如图4–3所示。

门户网站分为前台显示和后台管理两大部分,其中前台显示包括新闻中心,产品中心,视频中心,公司信息介绍,留言中心,加盟注册等基本功能。如图4–2所示。

后台管理主要包括新闻管理,产品管理,视频管理,信息管理,留言管理,用户管理等。根据不同模块功能不同,如图4–3所示。

5.3 数据库设计

5.3.1 E-R图的设计

根据数据分析,以及抽象实体的描述和实体间的联系,公司门户网站生成的E-R图分别为图4–4,图4–5,图4–6,图4–7,图4–8,图4–9所示。

用户实体有12个属性:编号、用户名、密码、省份、城市、用户权限、性别、邮箱、手机号、注册时间、激活码、状态。

新闻实体有5个属性:编号、标题、新闻内容、点击量、发布时间。

产品实体有7个属性:编号、产品名称、大图片路径、小图片路径、图片名称、上传时间、信息描述。

视频类型实体有9个属性:视频编号、点击量、下载量、视频名称、路径、上传时间、视频信息、图片路径、视频状态。

留言信息实体有7个属性:编号、用户名、邮箱、手机号、标题、内容、留言时间。

公司信息实体有2个属性:编号、内容。

5.3.2 数据表的设计

在3.3节数据需求分析和节E-R图设计,可以将其概念结构转化为数据库所支持的实际数据模型,即数据库逻辑结构[10]。门户网站系统的数据库表如表4–1所示。

序号

数据库表

数据库表存储内容

1

user

用户信息表

2

message

用户留言表

3

news

新闻信息表

4

picture

产品图片信息表

5

video

视频信息表

6

companyinfo

公司信息表

用户信息表除了记录用户的基本信息外,还保存用户的激活类型,默认为0,当程序收到用户的激活后,修改数据库acticetype为1,表示用户激活。用户信息表如表4–2用户信息表所示。

字段名

类型

长度

允许空值

注释

id

int

11

主键,自增

activecode

varchar

30

激活码

activetype

int

11

激活状态

city

varchar

50

城市

country

varchar

20

国家

email

varchar

255

邮箱

name

varchar

50

用户名

password

varchar

50

密码

power

int

11

权限

province

varchar

50

省份

regtime

varchar

50

注册时间

sex

varchar

4

性别

新闻信息表包含5条字段,主键自动递增,click记录新闻点击量,title和content字段分别用来存储标题和创建时间。uptime字段用来存放新闻上传时间。新闻信息表如表4–3所示。

字段名

类型

长度

允许空值

注释

id

int

11

主键,自增

click

int

30

新闻点击量

content

longtext

0

内容

title

varchar

255

标题

uptime

varchar

100

发布时间

产品信息表包含7条字段,其中pname用来存放上传到服务器后,根据时间戳生成的文件名,上传产品图像会自动缩小存放一份,小图片路径记录在smallscr下,原始图片路径记录在src下。产品信息表如表4–4所示。

字段名

类型

长度

允许空值

注释

id

int

11

主键,自增

info

longtext

0

产品信息

pname

varchar

50

文件名

smallsrc

varchar

255

小图片路径

src

varchar

255

大图片路径

title

varchar

50

标题

uptime

varchar

50

上传时间

视频信息表cd字段用来记录视频的状态, 1表示视频上传成功,2表示正在转换,3表示转换成功。Psrc字段用来存放视频截图的图片路径。视频信息表如表4–5所示。

字段名

类型

长度

允许空值

注释

id

int

11

主键,自增

cd

int

11

视频状态

click

int

11

点击量

download

int

11

下载量

psrc

varchar

255

图片路径

title

varchar

40

标题

uptime

varchar

60

上传时间

vinfo

longtext

0

视频信息

vname

varchar

60

视频名称

vsrc

varchar

255

视频路径

留言信息表有7个字段,记录用户的留言信息。留言信息表如表4–6所示。

字段名

类型

长度

允许空值

注释

id

int

11

主键,自增

content

longtext

0

内容

mail

varchar

100

邮箱

name

varchar

50

用户名

phone

varchar

20

用户电话

title

varchar

100

留言标题

ctime

varchar

50

留言时间

公司信息表有2个字段,用来记录公司的每条信息。公司信息表如表4–7所示。

字段名

类型

长度

允许空值

注释

id

int

11

主键,自增

content

longtext

0

内容

六、系统实现

6.1 系统开发工具的选择

6.1.1 开发工具和组件

本系统使用JDK _03,编译器为MyEclipse10.0,数据库为 MySQL Server5.0,服务器为Tomcat7.0.26,使用的框架有Strust2,Hibernate4.0,Spring3.1。

MyEclipse10.0做为Java企业级工作平台,利用它我们可以在数据库和J2EE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率,对各种开源产品的支持十分不错,它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持Html,Struts,JSP,CSS,JavaScript,Spring,SQL,Hibernate。

数据库采用MySQL Server5.0。MySQL作为关系型数据库管理系统,具有标准的SQL语言支持,同时数据库体积小、速度快、适应于所有平台,灵活性强,而且开源,可以使用免费版,适用于中小型网站的使用。

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

6.1.2 相关插件工具

在系统的前台和后台中,需要使用相关的插件,提高网站的整体性能。使用到JavaScript插件有jQuery,上传插件SWFUpload,表单验证插件jQuery Inline Form Validation,视频格式转换工具ffmpeg,视频播放插件CoolPlayer。

jQuery是一个优秀的JavaScript框架。它是轻量级的js库,它兼容CSS3,还兼容各种浏览器。jQuery使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互。它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。在表单验证中我们使用到了jQuery Inline Form Validation插件。

SWFUpload是一个客户端文件上传工具,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统标签的文件上传模式。可以同时AJAX的无刷新上传多个文件,显示上传进度,拥有良好的浏览器兼容性。

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库。 FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。可以轻易地实现多种视频格式之间的相互转换,把众多视频格式转成现在视频网站所采用的flv格式。

CoolPlayer是一款国内自主研发的具有高清处理能力的万能播放器,拥有超强的解码能力和容错机制,支持几乎所有格式的音视频文件播放,在网络视频播放方面,支持HTTP、FTP、BT、电骡、COOL、CPTP等几乎所有协议的视频边下边播,视频资源流畅、高清,视频下载快速,用户体验极佳。

6.2 开发环境搭建

  1. 打开MyEclipse 10,Window->Preferences->Java->Installd JREs->add->Standard VM中选择本地JDK。
  2. 点击NEW->File->Web Project新建一个Web项目,命名为enterprise。
  3. 把项目需要的jar包拷贝在项目/WebRoot/WEB-INF/lib目录下。
  4. 在MyEclipse的Windows->Preferences->Myeclipse->Server->Tomcat中配置tomcat,然后点击

    图标,选择选择enterprise项目以及tomcat服务器,点击add。
  5. 项目添加到服务器后,点击

    图标,选择服务器点击start,开启服务器。或者右击项目,选择Debug as->MyEclipse Server Application运行服务器。
  6. 当访问到http://localhost:8080/enterprise/index.jsp页面成功表示项目部署成功[11]。

6.3 系统文件结构

网站类结构如图5–1所示。

网站页面结构如图5–2所示。

6.4 系统配置文件

系统使用到了SSH框架,Struts2负责Action的控制,Hibernate负责数据持久化,Spring作为中间件负责组织管理容器,在程序中需要使用到一些配置文件。其中包括Spring的配置文件,Struts2的配置文件,数据库连接的配置等[12]。

数据库配置文件jdbc.properties代码如下。

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/news
jdbc.username=root
jdbc.password=

网站的Spring配置文件beans.xml代码如下。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><context:annotation-config /><context:component-scan base-package="com.qianyan" /><beanclass="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><value>classpath:jdbc.properties</value></property></bean><bean id="dataSource" destroy-method="close"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName"value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="packagesToScan"><list><value>com.qianyan.entity</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.hbm2ddl.auto">update</prop></props></property></bean><bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 事务管理配置 -->	<bean id="txManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><aop:config><aop:pointcut id="bussinessService"expression="execution(public * com.qianyan.service..*.*(..))" /><aop:advisor pointcut-ref="bussinessService"advice-ref="txAdvice" /></aop:config><tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes>
<tx:method name="get*" read-only="false" propagation="NOT_SUPPORTED"/><tx:method name="find*" read-only="false" propagation="NOT_SUPPORTED"/><tx:method name="save*" propagation="REQUIRED"/><tx:method name="add*" propagation="REQUIRED"/>  <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/>			</tx:attributes></tx:advice></beans>

网站struts2的配置文件struts.xml代码如下。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts><!-- 通过常量配置Struts 2的国际化资源信息 --><constant name="struts.custom.i18n.resources" value="global"/><!-- 通过常量配置Struts 2所使用的解码集--><constant name="struts.i18n.encoding" value="UTF-8"/><!-- 配置Struts上传文件的最大上限 --><constant name="struts.multipart.maxSize" value="10000000000" /><package name="json" namespace="/validate" extends="json-default"><action name="validate" class="com.qianyan.action.ValidateAction"method="vali"><result type="json"><param name="excludeProperties">msg</param></result></action></package><!-- 配置本系统所使用的包 --><package name="lu" extends="struts-default"><interceptors><interceptor name="Login" class="com.qianyan.interceptor.AdminLogin"></interceptor></interceptors> <action name="Admin_*" class="com.qianyan.action.AdminAction" method="{1}"><result name="adminloginSucc">/WEB-INF/admin/adminmain.jsp</result><result name="adminlogin">/WEB-INF/admin/login.jsp</result><result name="adminlistnews">/WEB-INF/admin/listnews.jsp</result><result name="adminlistmessages">/WEB-INF/admin/listmessages.jsp</result><result name="adminlistusers">/WEB-INF/admin/listusers.jsp</result><result name="adminlistvideos">/WEB-INF/admin/listvideos.jsp</result><result name="adminlistpictures">/WEB-INF/admin/listpictures.jsp</result><result name="admingetcompanyinfo">/WEB-INF/admin/companyinfo.jsp</result><result name="adminaddnews">/WEB-INF/admin/addnews.jsp</result>		 	<result name="addvideo">/WEB-INF/admin/addvideo.jsp</result>		 	<result name="addnews">/WEB-INF/admin/addnews.jsp</result>		 	<result name="addcompanyinfo">/admin/view/addcompanyinfo.jsp</result><result name="compupdateinput">/WEB-INF/view/updateinputcompanyinfo.jsp</result>		 	<result name="pictureupload">/WEB-INF/admin/pictureupload.jsp</result>
<result name="autoupload">/WEB-INF/admin/autoupload.jsp</result><result name="admingetnews">/WEB-INF/admin/newsview.jsp</result><result name="updatepictureinput">/WEB-INF/admin/pictureupdate.jsp</result><result name="pictureupdateSucc">/WEB-INF/view/success.jsp</result><result name="getvideo">/WEB-INF/admin/videoshow.jsp</result><result name="getuser">/WEB-INF/admin/userinfo.jsp</result><result name="deleteadminSucc">/WEB-INF/view/success.jsp</result><result name="addadminSucc">/WEB-INF/view/success.jsp</result><result name="Succ">/WEB-INF/view/success.jsp</result><interceptor-ref name="Login"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref>		     </action><!-- 采用通配符匹配action --><action name="*_*" class="com.qianyan.action.{1}Action" method="{2}"><!-- /WEB-INF 下防止用户直接访问 --><result name="mainpage">/main.jsp</result><result name="error">/WEB-INF/view/error.jsp</result><result name="addvideo">/WEB-INF/view/addvideo.jsp</result><result name="addvideoSucc">/WEB-INF/view/success.jsp</result><result name="listvideo">/WEB-INF/view/listvideo.jsp</result><result name="getvideo">/WEB-INF/view/videoshow.jsp</result><result name="deletevideo">/WEB-INF/view/success.jsp</result><result name="videoupdateinput">/WEB-INF/view/updatevideo.jsp</result><result name="videoupdatesuccess">/WEB-INF/view/success.jsp</result><result name="addnews">/WEB-INF/view/addnews.jsp</result><result name="addnewsSucc">/WEB-INF/view/success.jsp</result><result name="deleteSucc">/WEB-INF/view/success.jsp</result><result name="listnews">/WEB-INF/view/listnews.jsp</result><result name="getnews">/WEB-INF/view/newsview.jsp</result><result name="demo">/WEB-INF/view/demo.jsp</result><result name="getcompanyinfo">/WEB-INF/view/companyinfo.jsp</result><result name="addcompanyinfo">/WEB-INF/view/addcompanyinfo.jsp</result><result name="compupdateinput">/WEB-INF/view/updateinputcompanyinfo.jsp</result><result name="connect">/WEB-INF/view/connect.jsp</result><result name="register">/WEB-INF/view/register.jsp</result><result name="usersaveSucc">/WEB-INF/view/success.jsp</result><result name="changlocal">/index.jsp</result><result name="listpictures">/WEB-INF/view/listpicture.jsp</result><result name="savePicSucc">/WEB-INF/view/success.jsp</result><result name="deletePicSucc">/WEB-INF/view/success.jsp</result><result name="pictureupload">/WEB-INF/view/pictureupload.jsp</result><result name="autoupload">/WEB-INF/view/autoupload.jsp</result><result name="listbynum">/WEB-INF/view/picturewall.jsp</result><result name="getpicture">/WEB-INF/view/pictureview.jsp</result><result name="pictureupdateSucc">/WEB-INF/view/success.jsp</result><result name="uservaliSucc">/WEB-INF/view/success.jsp</result>	</action><action name="download" class="com.qianyan.action.DownloadAction"><param name="inputPath">videos/flv/</param><result type="stream"><param name="contentType">application/octet-stream</param><!--${downloadFileName}相当于调用action的getDownloadFileName()方法--><param name="contentDisposition">attachment;filename="${downloadFileName}"</param><param name="inputName">targetFile</param></result></action>				 <action name="admin" class="com.qianyan.action.AdminAction" method="login"><result name="adminlogin">/WEB-INF/admin/login.jsp</result>	        </action></package>
</struts>

6.5 业务逻辑实现步骤

通过SSH框架,对系统进行代码分层,以上传视频举例进行说明。

6.5.1 视图层

上传视频界面如图5-3所示。

管理员登陆后台后,可进入视频管理模块上传视频页面[13],填写视频信息,选择视频文件。代码如下:

<form action="Video_add" method="post" enctype="multipart/form-data" name="form" id="form1"><table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#D1DDAA" align="center" style="margin-top:8px"><tr bgcolor="#E7E7E7"><td height="24" colspan="10" align="center">&nbsp;添加视频信息&nbsp;</td></tr>	<tr><td width="80" height="40">选择视频:</td><td bgcolor="#FFFFFF"><input name="file" type="file"  >&nbsp;&nbsp;&nbsp;*(上传的视频只能是avi,asf,asx,3gp,mpg,mov,mp4,wmv,flv格式) </td></tr>      <tr><td width="80" height="40">视频标题:</td><td bgcolor="#FFFFFF"><input name="title" type="text" ></td></tr>	  <tr><td width="80" height="40">视频类别:</td>
<td bgcolor="#FFFFFF"><select name="typeid"><option value="1">教学视频</option><option value="2">娱乐视频</option></select>        </td></tr>	  <tr><td width="80" height="40">视频描述:</td><td bgcolor="#FFFFFF"><textarea name="vinfo" rows="5" cols="60"></textarea></td></tr><tr><td width="40" height="40" bgcolor="#FFFFFF" ><div align="center" id="load"></div></td><td bgcolor="#FFFFFF"><input type="button" id="submitf"  value=" 上传视频 ">&nbsp;&nbsp;<input type="reset" name="Reset" value=" 重新选择 "></td></tr> </table>
</form>

将表单信息请求发送给相应的action,也就是Video_add。

6.5.2 Action层

采用通配方式把 配置在struts 的struts.xml中,框架可以找到com.qianyan.action 包下面VideoAction.java的add方法。处理方法代码如下:

//添加视频
public String add() {// 第一步:先检查视频格式// System.out.println(fileContentType);String format = fileFileName.substring(fileFileName.lastIndexOf(".") + 1, fileFileName.length());if (!checkFormat(format.trim())) {message = "您上传的视频文件格式不正确,请选择正确的视频格式";return "error";}// 第二步:写文件String serialName = String.valueOf(System.currentTimeMillis());// 设置存储名字String upfilePath = ServletActionContext.getServletContext().getRealPath("/videos/") + "/upload/" + fileFileName; // 设置上传到服务器文件路径String flvpath = ServletActionContext.getServletContext().getRealPath("/videos/")+ "/flv/" + serialName + ".flv";String cutPicPath = ServletActionContext.getServletContext().getRealPath("/videos/") + "/pic/" + serialName + ".jpg";File tarFile = new File(upfilePath);try {writeFile(file, tarFile);} catch (IOException e) {System.out.println("写文件失败");message = "文件上传到服务器失败!!";e.printStackTrace();return "error";}	Video video = new Video();video.setTitle(title);video.setVinfo(vinfo);video.setClick(0);video.setDownload(0);video.setVname(serialName + ".flv");video.setUptime(DateTime.getDateTime());video.setVsrc("/videos/flv/" + serialName + ".flv");video.setPsrc("/videos/pic/" + serialName + ".jpg");video.setCd(1); // 3代表要求格式videoservice.addVideo(video);boolean istrue =false;if(!format.equalsIgnoreCase("flv")){  //不是flvSystem.out.println("视频需要类型转化");ConvertVideoThread cvt = new ConvertVideoThread();cvt.setVideoservice(videoservice);cvt.setVideo(video);cvt.setCutPicPath(cutPicPath);cvt.setFlvFilePath(flvpath);cvt.setUpFilePath(upfilePath);cvt.setServerPath(ServletActionContext.getServletContext().getRealPath("/"));cvt.thread.start();message = "上传视频成功,等待视频类型转化";}else{				//是flv 仅仅需要截图istrue = cutpic(upfilePath, flvpath, cutPicPath);File flvFile = new File(flvpath);try {writeFile(file, flvFile);} catch (IOException e) {System.out.println("写文件失败");message = "文件上传到服务器失败!!";e.printStackTrace();return "error";}video.setCd(3); // 3代表要求格式videoservice.updateVideo(video);message = "上传flv文件成功";}return "addvideoSucc";}

VideoAction的add方法对上传视频信息的判断和处理,程序判断如果不是flv格式的视频,通过ConvertVideoThread多线程类进行视频类型转换。

private VideoService videoservice;public VideoService getVideoservice() {return videoservice;
}@Resource(name = "videoservice")
public void setVideoservice(VideoService videoservice) {this.videoservice = videoservice;
}

在action类中,使用注解Spring注入service,获得service对象,通过service对象,调用videoservice.addVideo(video)方法,保存视频信息。

6.5.3 Service层

@Component("videoservice")
public class VideoService {private VideoDao videodao;public VideoDao getVideodao() {return videodao;}@Resource(name="videoDao")public void setVideodao(VideoDao videodao) {this.videodao = videodao;}public void addVideo(Video video){videodao.save(video);}...
}

通过@Component("videoservice")注释把VideoService 类作为service层。在VideoService 类中通过@Resource(name="videoDao")注解注入DAO,然后使用addVideo方法调用videodao.save(video),实现video实体类的持久化操作。

6.5.4 DAO层

程序中,使用到了BaseDao基础数据库持久化接口类,以及BaseDaoImpl基础数据库持久化实现类。VideoDao通过泛型继承BaseDao类,添加自己特殊的Dao访问接口,然后VideoDaoImpl实现类通过泛型继承BaseDaoImpl类并且实现VideoDao接口,即可继承通用的数据库操作方法,然后再自己实现VideoDao中的特殊持久化操作。

public class BaseDaoImpl<T,ID extends Serializable> implements BaseDao<T, ID> {private HibernateTemplate hibernateTemplate; public HibernateTemplate getHibernateTemplate() {return hibernateTemplate;}@Resource(name="hibernateTemplate")public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {this.hibernateTemplate = hibernateTemplate;}public void save(T entity) {		hibernateTemplate.save(entity);			}}

门户网站的所有业务逻辑功能都是依据此流程开发实现的。这也就是J2EE多层架构的精髓所在。Spring的作用贯穿了整个项目,将Web层、Action层、Service层、DAO层无缝整合,实现了高层去调用底层,各层高内聚低耦合,增强了可扩展性[14]。

6.6 网站主要功能的实现

网站的主要功能主要分为前台显示和后台管理两大部分,根据前面的系统分析和设计,最终实现了门户网站的相关的功能。

6.6.1 前台显示

网站前台首页

公司门户网站前台主页面,是进入网站的第一个页面,在首页中要显示出一些主要的信息,比如公司信息,联系方式,最新动态,以及自动切换的图片显示。首页要简洁美观大气,给用户一个好的印象。前台首页如图5–4所示。

新闻中心

新闻中心,显示公司发布的新闻信息,列表按照新闻发布时间进行排序,用户可通过新闻中心了解企业动态。新闻中心如图5–5所示。

产品中心

产品中心,显示公司的产品信息,点击图片可进入产品信息的详情页,包括产品介绍等信息。产品中心如图5–6所示。

视频中心

视频中心,用于显示公司的视频信息,左侧有视频点击排行和下载排行,点击视频可进入视频详情页,进行视频的观看,同时支持视频下载。视频中心模块如图5–7所示。

关于我们

关于我们,用于显示公司的详细信息,左侧可以进行选择,查看公司介绍,公司动态,公司大事记,企业文化,薪酬福利。关于我们模块如图5–8所示。

联系我们

联系我们模块,是用户进行留言的地方,留言采用无刷新验证和提交方式,提高用户体验。通过CKEDITOR插件插件,可以对留言信息进行样式处理。模块如图5–9所示。

加入我们

加入我们模块,是用户进行注册的地方,表单使用FormValidate插件进行ajax无刷新验证,注册后会向用户邮箱发送一封激活邮件,用户可以通过点击邮件相关链接进行激活,激活邮箱可接收企业新闻消息。模块如图5–10所示。

6.6.2 后台管理

后台登陆

管理员可对后台信息进行管理,首先要在后台登陆页进行登陆,验证用户名和密码,以及相关权限,登陆不成功,会进行提示。后台登陆界面如图5–11所示。

网站信息管理

网站信息管理用于管理公司的基本信息,用于修改前台显示的公司基本信息。网站信息管理如图5–12所示。

新闻管理

在左侧选项卡中,选择添加新闻,可以发布新闻,同时可以选择发送邮件,在网站发布新闻的同时,也将给注册用户邮箱发送新闻。新闻列表显示全部新闻,可进行修改和删除,点击新闻标题,可进入修改页。新闻管理模块如图5–13所示。

产品管理

产品列表显示产品的信息,可以修改和删除。左侧选项卡,可以选择普通上传模式和快速上传两种模式。普通模式可以填写产品具体信息,选择上传文件进行上传。产品管理模块图5–14所示。

快速上传模式采用swfupload插件进行ajax无刷新多文件上传方式,如图5–15所示。

视频管理

视频中心可以进行视频的上传,视频格式的转换使用多线程技术在后台进行,不影响系统的使用,当视频转换时,显示视频状态转换中,转换成功后自动更新状态。视频列表可以对视频信息进行修改和删除。视频管理模块如图5–16所示。

留言管理

留言中心管理用于对用户的留言信息进行查看和管理,如图5–17所示。

用户管理

用户管理如图5–18所示,用于对注册用户的信息管理,可进行用户信息的查看,删除,权限提升等操作。

七、系统测试与运行

系统测试,英文是System Testing。是将已经确认的、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,系统测试是针对整个产品系统进行的测试。

7.1 测试目的

系统测试是软件开发过程的重要组成部分,用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。系统测试的目的是为了保证软件产品的最终质量,在软件开发的过程中,对软件产品进行质量控制。并希望能以最少的人力和时间发现潜在的各种错误和缺陷。

7.2 测试时间

测试活动

计划起止日期

实际起止日期

进度偏差

备注

制定测试计划

设计测试用例

测试执行

测试总结

7.3 测试过程

为保证系统能够正常运行,在完成整个系统的设计与实现后,我对其进行了全面的测试。系统测试非常重要,其中测试过程中的记录文档等也尤为重要,我主要对以下几个方面进行了全面的测试,如表6–2所示。

测试类型

测 试 内 容

测 试 目 的

测试工具和方法

功能测试

前台首页:查看新闻,查看产品,播放视频,下载视频,在线留言以及注册功能测试。;

核实所有功能均已正常实现;1.流程检验:各个业务流程符合常规逻辑,用户使用时不会产生疑问。;2、数据精确:各数据类型的输入输出时统计精确。

采用黑盒测试,使用边界值测试、等价类划分、数据驱动等测试方法,进行手工测试;

功能测试

管理后台:管理员登录系统,增加修改和删除新闻,上传产品信息和图片,上传视频以及系统转换视频,删除留言,提高用户权限等。

核实所有功能均已正常实现;1.流程检验:各个业务流程符合常规逻辑,用户使用时不会产生疑问。;2、数据精确:各数据类型的输入输出时统计精确。

采用黑盒测试,使用边界值测试、等价类划分、数据驱动等测试方法,进行手工测试;

用户界面(UI)测试

1.导航、链接、页面结构包括菜单、背景、颜色、字体、按钮名称、Title、提示信息的一致性等。;2.友好性、易用性、合理性、一致性、正确性等

核实各个窗口风格(包括颜色、字体、提示信息、图标、Title等等)都与基准版本保持一致,或符合可接受标准,能够保证用户界面的友好性、易操作性,而且符合用户操作习惯。

WEB测试通用方法;手工测试

安全性和访问控制测试

密码:登录、普通注册用户、管理员用户;;权限限制;;通过修改URL非法访问;;登录超时限制等等;

1.应用程序级别的安全性:核实用户只能操作其所拥有权限能操作的功能。;2.系统级别的安全性:核实只有具备系统访问权限的用户才能访问系统。

黑盒测试、手工测试

性能测试

最大并发数;;查询日志,产品,视频时,注册新用户时以及登录时系统的响应时间;

核实系统在大流量的数据与多用户操作时软件性能的稳定性,不造成系统崩溃或相关的异常现象

7.4 测试结果

通过对以上内容进行测试,系统在正常操作的情况下,不会出现异常。在输入非法数据时,也能够进行提示。总体来说,系统比较稳定,系统设计达到了预期目标。

7.5 结论

本文以门户网站的应用理念为中心,结合网站特点,对系统的设计与实现过程进行了分析。对J2EE平台深入分析的基础上,以SSH框架等关键技术作为主要研究对象。从用户需求分析到底层数据库的建设、再到代码的编写、系统的测试,逐步完成。本文完成了以下工作:

  1. 分析了研究背景与意义
  2. 对本系统所用的相关技术进行了基本介绍
  3. 对系统进行分析,包括用户功能需求分析、数据需求分析、系统可行性研究、性能需求分析
  4. 对系统进行设计,包括系统开发工具的选择、系统概要设计、系统模块总体设计、数据库设计
  5. 进行编码与实现,包括系统开发环境的搭建、文件结构、配置文件、业务逻辑分析以及门户网站系统主要功能的实现
  6. 对系统进行综合测试,包括测试目的的编写、测试时间的制定、测试过程的记录、测试结果的分析与总结

八、结束语

忙碌了几个月,毕业设计终于告一段落。其实这个项目不是短时间内完成的,从大三就开始积累各方面知识,从框架技术,到各种组件和插件,再到页面效果,都是一点一滴的积累,通过一次一次的修改调试,最后才把一个个小项目组建成一个大项目。里面基本用到了我大学学到的所有东西。虽然作品的各部分功能都已经实现,但是和真正的门户网站比起来还有很多不足。

本次毕业设计我学到的最多的就是如何查阅书籍和资料,并充分利用网上资源。几乎系统出现的所有问题,在网上合理查询都会找到解决办法,学会如何解决问题将使我终身受益匪浅。同时系统的前期设计和规划也很关键,从环境的搭建,数据库设计,再到整体架构都很重要,提前考虑好各种情况,才能在后期遇到问题而从容不惊。

还有就是要严格按照软件开发的标准和流程去开发,用软件工程的思想去行动,这样一切都显得井然有序,而且更为标准,同时能使我们养成良好的开发习惯。

当然程序中还有许多不完善的地方,目前功能还是有点单一,后期我还会对这个系统不断完善,不断打磨,使这个系统更加完美。

相关文章:

  • 栈与队列:数据结构的有序律动
  • 二、OpenCV图像处理-图像处理
  • mysql的Memory引擎的深入了解
  • 电子电路:D触发器的工作原理及应用详解
  • 换宽带ip地址会变吗?同一个宽带如何切换ip地址
  • audit日志轮训保留180天的日志,按天保存
  • 每个路由器接口,都必须分配所属网络内的 IP 地址,用于转发数据包
  • 实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.13 R语言解题
  • openppp2 -- 1.0.0.25225 优化多线接入运营商路由调配
  • AI Agent开发入门笔记(1)
  • 面试大厂Java:从Spring Boot到微服务架构
  • Asp.Net Core FluentValidation校验框架
  • 判断它是否引用了外部库
  • Linux Kernel动态调试:运行时调试的利器
  • 【自然语言处理】——基于与训练模型的方法【复习篇1】
  • Visual Studio 2022 发布独立的 exe 文件
  • 【android bluetooth 案例分析 04】【Carplay 详解 1】【CarPlay 在车机侧的蓝牙通信原理与角色划分详解】
  • C++ 实现 std::move_only_function
  • 西蒙诺维奇-炮弹导体粗糙度模型揭秘
  • 详解RBAC权限模型
  • 论坛网站论坛网站建设建设/营销策划公司
  • 乐从做网站/网络游戏营销策略
  • 珠海网站建设招聘/全国互联网营销大赛官网
  • 北京网站设计公司排名/百度推广客服投诉电话
  • 西安品牌网站建设服务商/近期时事新闻
  • 12306网站多少钱做的/石家庄疫情太严重了