XX网站设计与实现

XX网站设计与实现
XX网站设计与实现

毕业论文(设计)

XX网站

设计与实现

摘要

网络科学技术飞速发展,科技产品层出不穷,对于企业或公司,宣传自己的理念及推广所开发的产品是至关重要的。如果人们想要在更短的时间内,了解到更多有关科技产品的信息,一种比较便捷的方式便是通过网络来访问。

xx网站设计,它将需求、产品销售与客户服务高度紧密的结合在一起,大大提高了效率,方便客户了解及订购合适的软件来提高工作效率,使得客户与企业能够轻松交互。

网站以jsp作为前台的主要展示工具,使用MVC设计模式,按照工厂模式解耦,设计程序的底层使用Hibernate持久层框架。Spring容器管理对象,Struts2结合jsp做前台展示,实现了产品发布与展示,新闻发布,企业精神理念展示,留言意见反馈,用户实时咨询,后台管理等功能。

关键词:系统;电子商务;游戏开发;软件开发

Abstract

Network science and technology rapid development, science and technology products emerge in endlessly, for enterprise or company, promote their own ideas and development of products is vital.If people want to be in a shorter period of time, to know more about information technology products, is a more convenient way to access through the network.

Jinrun website design, it will demand product sales and customer service lev el closely unifies in together, greatly improving the efficiency, convenient custom er to understand and order the right software to improve work efficiency, make customers interact with the companies can easily.

Site with JSP as the front desk of the main display tool, using the MVC design pattern, according to the three layers of decoupling relationship.The underlying use Hibernate persistence layer framework, the Spring container management object, struts 2 combined with JSP front-end display.Has realized the product distribution and display, press release, the concept of enterprise spirit, the message feedback, users real-time consultation, background management functions.

Key words : System;Electronic commerce;The game development.Software

development

目录

1 引言 (1)

1.1 研究背景 (1)

1.2 研究意义 (2)

2 网站系统相关技术及工具介绍 (3)

2.1 服务器Tomcat7.0简介 (3)

2.2 JA V A语言 (3)

2.3 MySQL (4)

2.4 Hibernate (4)

2.5 Spring框架 (5)

2.6 MVC开发模式介绍 (5)

3 需求分析及总体设计介绍 (7)

3.1 需求分析 (7)

3.2 项目架构 (8)

3.3 系统工作原理 (9)

3.4模型设计 (10)

3.4.1控制层设计 (10)

3.4.2业务层设计 (11)

3.4.3工具类设计 (16)

3.4.4持久层设计 (18)

4 网站的前台设计与实现 (20)

4.1 首页设计 (20)

4.2 产品展示 (20)

4.3新闻中心 (21)

4.4 留言反馈界面展示 (21)

4.5 其它界面展示 (22)

5 网站的后台设计与实现 (24)

5.1 管理员登录 (24)

5.2 后台主页 (24)

5.3 新闻管理模块 (25)

5.4 产品管理模块 (26)

5.5 网站信息管理模块 (27)

5.6 用户留言管理模块 (27)

5.7 其它模块 (27)

6 系统测试 (28)

6.1 测试要求 (28)

6.2 测试用例设计 (29)

6.3 测试结论 (29)

7 结论 (29)

谢辞 (30)

参考文献 (31)

XX网站

设计与实现

1 引言

1.1 研究背景

目前,网络的发展趋势已经商业化和全民普及趋势。世界上大部分的公司企业都是以营利为首要目的。在宣传推广上,就显得尤为重要。使用有效的广告可以为我们带来高效益,比如在企业宣传,招聘员工信息发布,网上销售等方面,网络给我们带来了许多方便。现在的网络俨然已经成为了企业竞争的重要战略手段。网站的优势源于可以为企业提供一个舞台来展示自己、另一个好处体现在能为消费者更加便捷的提供一个了解企业的途径。公司或企业可以通过网络平台,实时的提供在线客服以供咨询。利用网络推广和宣传企业产品、实时的发布一些要闻,顾客的需求建议也可以通过留言信息及时的反馈给企业网站的工作人员。

网络的普及,使得计算机走进了千家万户,社会各层人士获得了平等接触实时信息的机会。利用这股发展趋势,各大企业在管理和销售上都能使用到软件领域的工具来进行便捷销售,便捷办公,解放一定的劳动力。利用网站推广产品,推进行业发展,促进产品销售是一个很好的方案,新的促销形式,与传统相比有许多优点:它降低产品成本;利用网络作为交互平台;改变传统的人与人直接碰面交谈的方式,可以降低交互交谈时受空间和时间的限制;信息的传递及发布更新更加迅速灵活,新的技术产品信息上传后,可以立即得到推广和发现,客户可以立即看到,对于满意的产品,可以直接与客服人员交谈,从而大大提高了效率。网站的主要功能是利用网站作为公司企业产品的展示平台,将最新产品的一些基本信息以及相关新闻、公司目前概况等信息以网站的形式发布到网络上,以供人们观看与借鉴。

本次的毕业设计课题是基于JSP设计的企业网站系统,它的产生背景源于武夷山市企业信息化建设。此设计更具实际研究意义,目的是综合所学知识和利用身边的网络资源,锻炼动手实践能力,有利于提高综合学习能力。顺利完成设计课题的前提条件还需要很多课外知识的补充,如MVC开发模式,当前流行的J2EE 框架,对XML等配置文件的书写有一定的了解等等。

1.2 研究意义

信息化技术飞速发展,科学技术一日千里,这推快了人们的生活节奏。时间变得更加宝贵。任何产品需要很好的被使用,其知名度就至关重要。人们生活中更多接触的便是电视、电脑、手机这些科技产品。那么对于软件领域研发出来的科技产品,企业应该如何对其推广宣传和销售。源于这一思考,设想如果各大企业公司能纷纷建立起属于自己的企业网站,将最新的产品和新闻实时的发布更新,那么去推广一个网站相对来讲更加的省时省力,这是提高效率的有效途径。企业建立网站,这样可以很好的对外展示企业文化,是企业实力的一种体现方式。

今天,各行各业的竞争日趋激烈,每个企业所面临的主要任务是提高工作效率和工作质量。企业网站的建立可以大量降低人力资源方面的成本付出,突破了时间和空间的限制,客户对产品的详细了解可以在任何时间和地点进行,可以即时的进行。有了展销产品的网站平台,客户就不需要到实地去查询产品详情,可以借助网络平台联系销售员,通过远程体验,大大便捷了交易所带来的时间问题。

鉴于互联网的诸多优势以及对国内外软件产品的销售现状的研究分析,我此次的设计是开发一个集成了发布产品、发布新闻、服务咨询等功能于一体的企业网站,以微小的力量推动中国互联网的发展。

2 网站系统相关技术及工具介绍

2.1 服务器Tomcat7.0简介

Tomcat由开源社区研究开发,对编程兴趣人员可以自由对Tomcat服务器进行学习和研究。因为它的免费和开源的这些特性。Tomcat得到了极大的推广,并且经过开源社区的贡献,它的性能也更加强大,趋于完善。

Tomcat是纯粹的由java代码编写。它以小型、轻量级Web服务器的特点被广泛的推广运用并受人喜爱。在个人的电脑上安装上服务器软件,个人的PC电脑自然就成为了一个初具模型服务器,在中小型系统和并发访问量不多的情况下可以被普遍地使用。在配置好Tomcat服务器的电脑上,这样Tomcat就可以对HTML页面等用户发出的访问请求进行响应[1]。

我们将web应用程序部署到Tomcat服务器中,就可以实现在本地进行web应用程序的调试运行。

2.2 JA V A语言

Java以其面向对象的优势和安卓市场被广大人群深知。由于Java被很流行的推出,同时拥有世界上最大的开源社区正在迅速发展,对c++语言已经形成了强大的冲击。Java可以解决一些复杂的逻辑问题,将问题转化为面向对象的思想去解决。Java语言的由杰姆斯高斯林和他的同事共同开发,工程正式启动于1995年。后期更名为Java,并且重新设计开发的互联网应用。由Java编写出的源代码,经虚拟机的类加载器编译成字节码文件后,可以运行在不同的平台上。这样就脱离了java的运行环境,只需要编译过一次,就可以到处运行[2]。

Java有一个用户友好,贴近现实生活的语法。这样的语言具备着独特的优势,拥有面向对象的概念,稳定性,和平台独立性,安全性,稳定性和支持多线程,动态等优良特性。因为Java多的线程特性,处理器在不同的线程间快速切换。相比其他语言,如C++没有内置的多线程机制,因此C++的多线程就必须调用操作系统的多线程功能来进行多线程程序的设计。Java在软件的编程语言设计中,不单能够应用于开发大型的应用程序,并且在Internet的应用开发方面也较为突出。Ja va不仅是一门现在大家大量使用的编程语言,就现在所知道的IT行业很多最新的

技术都涉及了java语言,java早已经被大家公认为当今世上最重要的语言之一[3]。

2.3 MySQL

就目前的数据分类来看,MySQL的规模可以将其划分到中型数据库,它是由瑞典研发人员所研发,目前已经属于Oracle公司。MySQL是最流行的关系数据库管理系统,MySQL在诸多的Web应用程序中是最好的关系数据库管理系统[4]。MySQL 的特点就是高效灵活,它的工作原理是将数据保存一张张的表中,数据整体存放合理,结构优良。MySQL使用标准的结构化查询语言、其软件体积小、反应速度快、成本低、开源,由于这些优势,特别是小型和中型网站的应用开发通常是以MySQL 为首选。

MySQL的底层应用语言以C和C++为主,使用了多种编译器对其进行测试和不断改善,在移植性方面,mysql的表现较为突出。多种操作系统对mysql都支持,像通俗常用的就有:Linux、Mac OS、Windows等操作系统。它还为为多种编程语言提供了API的支持。例如Java、C++、C和Tcl等,MySQL与这边编程都能完美融合。另外MySQL对多线程处理方面也有一些优势,这样就能使得服务器的CPU资源能够被充分的利用起来。因为MySQL提供的标准结构化查询语言、提供ODBC和JDBC等连接数据库的方法,使其更加便于管理、检查,在优化数据库操作方面也更加便捷[5]。

2.4 Hibernate

Hibernate的优点:

对JDBC的封装,简化了许多重复的代码。

对DAO层编码工作进行了简化,使开发可以集中精力关心业务逻辑。

移植性好,它支持多种数据库,这样更换数据库时代码的改变量就比较少。

该框架没有实现任何接口,没有侵入性。是一个轻量级框架。

Hibernate延迟加载:

延迟加载的特点是当一个对象或对象的属性查询时,该对象或属性暂时不存在内存中,只有当程序真正使用到数据时,该数据才被加载到内存中[6]。

优化Hibernate:

1、在一对多的关联关系中,应该从多的一方维护。

2、避免使用一对一,尽量使用多对一关联关系。

3、配置对象缓存,减少使用集合缓存。

4、减少表字段,表关联不要怕多,二级缓存撑腰。

Hibernate因为其简单的学习成本,功能完备并且运行高效,受到开发人员的喜爱。使用Hibernate自带的查询语言HQL,可以使数据库操作方面更加得心应手,解决很多开发上常见的对数据库操作的一系列繁琐问题,使程序员可以专注于解决业务逻辑的问题[7]。

2.5 Spring框架

Spring是一个轻量级容器,默认的许多服务是不自动打开的,需要手动配置来将其打开。学习Spring框架的两个关键:IOC和AOP。内部核心是一个Bean工厂(Bean Factory),它提供和实现控制反转和依赖注入。另外Spring容器用于申明式的事务,安全等服务应用[8]。Spring可以与当前流行框架的集成,应用范围广泛,可以是B/S或者C/S[9]。

本网站系统采用注释的方式来管理事务。从三层结构来看,Web层的Struts2框架和Dao层的Hibernate框架都与其进行整合。Spring的强大管理及代理等方式,使任何Java应用都可以从Spring中受益[10]。其结构如图2-1所示:

图2-1 Spring结构

2.6 MVC开发模式介绍

MVC是企业级应用的开发中常用的设计模式。它把项目架构进行分层设计,分

为表现层、业务逻辑层、数据访问层。MVC即代表模型视图控制器。模型(Model)即为一些常用的实体类,(如Person类实体),实体类主要用于封装数据。视图(V iew),一般用作数据的显示。在J2EE中视图由jsp负责显示。控制器(Controlle r),用于协调M和V的关系,也用作解决业务逻辑,在Struts2中就是Action类[11]。

1、模型

模型一般表示数据的封装。在三层架构中,模型拥有较多的处理任务。模型能为视图提供数据支持。因为模型的代码可以被多个视图重复使用,这样可以减少代码的重复性书写[12]。

2、视图

视图提供给用户使用,并且可以与之交互的界面。在Web应用初期,界面主要是由HTML做出简单的显示,然而,在现在的网络技术发展下,一些新技术的出现,如XHTML,XML/XSL,WML这些标记语言和Web服务。MVC应用程序可以处理许多不同的返回结果视图[13]。

3、控制器

当用户请求数据,控制器做出响应处理,最终将数据进行封装,再交给jsp

做显示。所以当你点击在JSP互动环节时,控制器接收组件的要求和决策模型的呼叫建立负责处理传入的请求,然后封装的数据,确定该视图显示界面[14]。

3 需求分析及总体设计介绍

3.1 需求分析

《xx》模型是典型网上产品展销实践中较为普遍的商务企业B/S模式,其主要功能模块包括产品发布、新闻管理、留言反馈、业务咨询等基本功能。此外,此网站也将实现企业网站系统的后台管理,其中包括新增产品的添加与修改信息、新闻的相关处理功能等。本系统的Web层框架,是基于目前流行的SSH,前台采用JSP技术作为显示和交互,在网站的设计与开发过程中,利用软件设计模式,做到尽量削减体系功能模块间的耦合。

本网站系统前后台的功能关系,如图3-1所示:

图3-1 系统功能分析

前台(游客浏览)部分:

①企业文化展示:显示企业精神理念,公司福利待遇等信息;

②经营业务展示:显示企业经营范围内业务项目;

③新闻显示:按最新更新展示新闻条目及详细;

④产品显示:通过预览图片或产看详细的方式查看产品的详细信息;

⑤留言反馈:通过表单的填写提交对此网站以及产品的建议或意见。

1.后台(管理员管理)部分:

①管理员:管理员登录;

②新闻管理:分页查看所有新闻,对新闻进行编辑、批量删除、添加新闻

操作;

③产品管理:按更新时间顺序添加新产品、查看产品详细信息、编辑产品、删除产品信息;

④网站基本信息管理:更新网站基本信息,企业理念精神及公司福利,地址和联系信息;

3.2 项目架构

图3-2 项目架构

如图3-2所示,左边是项目工程的三层架构。Dao层及其接口实现类,这两个包中的类协调负责对数据库中的数据进行存取操作。而domain包下存放的是实体类,主要是为了对数据进行封装和携带数据。Service及其实现类在三层架构中主要是针对业务逻辑进行编写的类。Beans.xml、Hibernate.cfg.xml与struts.xml 这三个配置文件则是对应SSH框架。而jinrun.properties则是此web应用程序中用到的一个自定义配置文件。右边的是根目录结构,其下是JSP页面的存放和

样式控制文件等,例如CSS、js文件等。

本次的项目设计遵循MVC设计模式,利用Spring容器巧妙的创建和管理类,遵循工厂设计模式对类进行解耦,按照三层架构进行设计和实现,层与层之间类的功能明确,整体结构清晰,便于调试和管理。

3.3 系统工作原理

基于web的网站系统是用户通过浏览器发送请求,根据HTTP协议,Tomcat服务器接收到用请求后,将根据配置文件为其分配是由哪种Servlet来处理。如果是访问以.do结尾的URL地址,就交由Struts2来处理,Struts2将根据配置文件为其分配相应的Action来处理请求。Action类中对应的方法将调用相应的业务类方法去完成请求,由业务类调用dao方法来完成对数据库的存取和访问。

如图3-3所示:Spring将三层中所有的类的创建管理起来,包括控制层,业务层的实现类和DAO层中的类。

图3-3 工作原理

3.4模型设计

3.4.1控制层设计

在SSH框架组合下,控制层的代码由struts2的Action来充当,根据请求信息调用指定action类中的方法来进行请求处理,以及返回对应的结果视图,由jsp 将数据作为展示给用户。命名空间以"/sys"标记的为后台的包,以"/cli"标记的对应前台,一般由网络上的游客随机访问。在两大类对应的包名下有对应前台和后台模块的诸多Action类,代码如下:

Struts2中的前台配置:

/WEB-INF/client/index.jsp

/WEB-INF/client/business.jsp

/WEB-INF/client/product.jsp

/WEB-INF/client/promore.jsp

/WEB-INF/client/news.jsp /WEB-INF/client/fullText.jsp

3.4.2业务层设计

业务层由Struts2的action类和一些实体类配合使用,主要是针对业务逻辑与数据封装,数据携带这些请求进行处理,然后返回结果视图,供页面做显示。业务层的处理内容包含:企业软件产品的增删改查功能、新闻模块的显示功能、留言与意见反馈功能、客服在线咨询等。

1、软件产品业务设计,灵感来自于一些企业的门户网站,其思路是:产品罗列,可以对产品的详细信息查看,在产品的查看过程中可以即时的联系客服人员订购咨询或了解详情。下面是产品业务类实现的部分代码:

// 后台--显示产品列表

public String list() {

QueryBuilder queryBuilder = new QueryBuilder(Product.class);

queryBuilder.addOrderProperty("updateTime", true);

PageView pageView = productService.getPageView(queryBuilder, ge tPage Num(request));

request.setAttribute("Products", pageView);

return "list";

}

// 后台--添加产品

public String add() {

String suffix = null;

try {

suffix = product.getPicFileName().substring(product.getPicFi leName().lastIndexOf("."));

if (!".jpg".equalsIgnoreCase(suffix)) {

this.addFieldError("msg", "格式错误");

return "addUI";

}

} catch (Exception e) {

this.addFieldError("msg", "请选择产品图片");

return "addUI";

}

// 文件上传

if (product.getPicFileName() != null) {

String tmpFileName = product.getPicFileName().substring(prod uct.getPicFileName().lastIndexOf("/") + 1);

String UUIDName = UUIDUitls.getUUID() + suffix;

String savedPath = ServletActionContext.getServletContext(). getRealPath(uploads);

File savedFile = new File(savedPath, UUIDName);

if (product.getPic() == null) {

this.addFieldError("warn", "请选择图片");

return "addUI";

}

product.getPic().renameTo(savedFile);

// 添加记录到数据库

product.setNewName(UUIDName);

product.setOglName(tmpFileName);

product.setUpdateTime(new Date());

productBiz.save(pro);

request.setAttribute("msg", "提示:上传成功");

}

return "addUI";

}

2、留言反馈处理:首先对想要留言的用户进行姓名规则校验、电话号码校验、邮箱规则校验,校验不通过的(包含空)将不提交页面,当非空等检测通过之后,就提交表单,这样就可以从数据库中查看到经过检测的用户留言,可以避免大量的垃圾留言。

3、新闻展示业务:包括新闻条目,新闻的发布时间按照更新的时间排序,通过分页对新闻进行显示。新闻模块的功能实现,是从数据库按页查出当前显示页的新闻页集合信息,用list集合封装,然后借助ognl对其进行迭代操作并显示。而在前台页面的分页功能实现,则是由Action去获取每页的大小数和所查看数据的当前页码,动态的拼凑hql语句,每次去数据库询出指定页码的记录条数,进

行封装到page实体,再将多个page实体封装成list集合,完成查询后将返回结果给页面进行迭代显示。下面为新闻模块的部分代码:

// 新闻列表

public String listNews() {

QueryBuilder queryBuilder = new QueryBuilder(News.class);

queryBuilder.addOrderProperty("record", false);

PageView pageView = newsService.getPageView(queryBuilder, getPa geNum(request));

request.setAttribute("news", pageView);

return "listNews";

}

// 批量删除新闻

public String del() {

// 获取ids

String[] sids = request.getParameterValues("News_ids");

Integer ids[] = DataType.converterStringArray2IntegerArray(sid s);

if (ids != null) {

// 删除

newsService.deleteSysProductsByIds(ids);

return "listAction";

}

return null;

}

// 发布新闻

public String addNews() {

// 非空判断----title

if (StringUtils.isBlank(news.getTitle())) {

this.addFieldError("msg", "请填写文章标题");

return "addNewsUI";

}

// 如果是事纪---年份不能为空

String suffix = null;

if (News.EVENTS_VALUE.equals(news.getRemark())) {

if (StringUtils.isBlank(news.getYear())) {

this.addFieldError("msg", "请填写事纪年份");

return "addNewsUI";

}

} else {

// 如果是新闻,图片不能为空

if (StringUtils.isBlank(news.getPicFileName())) {

// 新闻有图片

this.addFieldError("msg", "请选择新闻图片");

return "addNewsUI";

}

// 图片名不为空的时候-----验后缀名

try {

suffix = news.getPicFileName().substring(news.getPicFile Name().lastIndexOf("."));

if (!".jpg".equalsIgnoreCase(suffix)) {

this.addFieldError("msg", "格式错误");

return "addNewsUI";

}

} catch (Exception e) {

this.addFieldError("msg", "请选择图片");

return "addNewsUI";

}

}

// 新闻发布者--验空

if (StringUtils.isBlank(news.getName())) {

this.addFieldError("msg", "请填写您的身份");

return "addNewsUI";

}

// 新闻内容--验空

if (StringUtils.isBlank(news.getContent())) {

this.addFieldError("msg", "请填写文章内容");

return "addNewsUI";

}

// 1根据remark判断新闻还是事纪

if (News.EVENTS_VALUE.equals(news.getRemark())) {

// 设置年份"2010 -"

String temp = news.getYear().substring(0, 4);

news.setYear(temp + " -");

}

// 2设置新闻发布时间,截取

news.setPostTime(new Date());

// 3.新闻摘要截取

if (news.getContent().length() > 100) {

news.setDigest(news.getContent().substring(0, 99));

}

// 4.设置新闻图片上传信息----图片上传

if (StringUtils.isNotBlank(news.getPicFileName())) {

// System.out.println(picForm.getPicFileName());

String tmpFileName = news.getPicFileName().substring(news.ge tPicFileName().lastIndexOf("/") + 1);

String UUIDName = UUIDUitls.getUUID() + suffix;

String savedPath = ServletActionContext.getServletContext(). getRealPath(uploads);

System.out.println("--新闻添加--" + savedPath);

File savedFile = new File(savedPath, UUIDName);

// 新闻必须要有图、事纪图片可有可无---以下判断不需要

if (news.getPic() == null) {

this.addFieldError("warn", "请选择图片");

相关主题
相关文档
最新文档