获取项目源文件,技术交流与指导联系Q:1225467431
摘 要
随着互联网技术的发展,网上购物越来越流行,而网上书店更是逐渐受到越来越多的人关注,不用涉及交通、不用到书店翻阅、即可看到全国各地的书籍价格、更加全面地搜索自己喜欢的书籍、需要的书籍。通过网络销售系统的平台,商家将拥有更大的市场,能更加及时快速地得到用户对于商品的反响,可以随时调整销售策略,提高商家的市场竞争力。对于消费者也提供了方便,消费者可以不受时间和地域的限制进行购物,并且可以获取更多信息.。
本文阐述了如何构建基于B/S 架构,以Oracle数据库为基础,应用Java Web SSH框架的网上书店,系统主要完成以下基本的功能:主要是前台展示和后台管理两个部分;其中前台展示包括登陆模块、注册模块、首页展示、图书展示、图书购买、产生订单;后台管理包括广告管理模块、用户管理模块、图书管理模块、订单管理模块。
本次课题主要采用java语言作为程序的开发语言,采用Oracle数据库作为数据库,MyEclipse6.5作为开发工作,运用PowerDesigner作为数据库建模工具,运用的知识还有JavaScript ,CSS, HTML 等知识。
本文阐述了如何构建基于B/S 架构,以Oracle数据库为基础,应用Java Web SSH框架的网上书店,系统主要完成以下基本功能:前台包括注册与登陆、图书展示、图书购买、订单产生;后台管理包括广告管理、用户管理、图书管理、订单管理。
本次课题设计采用的开发语言是java,数据库是Oracle,开发工具是MyEclipse6.5,数据库建模工具是PowerDesigner,此外还运用了JavaScript ,CSS, HTML 等知识。
关键字:SSH框架;java;网上书店;B/S 架构;
ABSTRACT
目 录
第一章 引言 - 3 -
1.1 项目背景 - 3 -
1.2 项目目的 - 3 -
1.3 主要内容 - 3 -
第二章 系统理论和技术 - 3 -
2.1 MyEclipse 的简介 - 3 -
2.2 SSH框架的简介 - 3 -
2.3 B/S架构的简介 - 3 -
2.3 Java简介 - 3 -
2.4 Java Web工程的基本介绍 - 3 -
2.2.1 建立Web工程的基本步骤 - 3 -
2.2.2 Java Web 工程目录结构 - 3 -
2.3 Oracle数据库 - 3 -
2.3.1 Oracle 数据库简介 - 3 -
2.3.2 Oracle数据库的特点 - 3 -
第三章 系统需求分析与设计 - 3 -
3.1 可行性分析 - 3 -
3.2 功能需求分析 - 3 -
3.3 系统用例模型 - 3 -
3.3.1 普通用户用例图 - 3 -
3.3.2 管理员用例图 - 3 -
3.4 系统体系结构 - 3 -
3.5 数据库设计 - 3 -
3.3.1 数据库表E-R图 - 3 -
3.3.2 数据库表分析 - 3 -
第四章 系统实现 - 3 -
4.1 搭建开发环境 - 3 -
4.1.1 安装开发工具 - 3 -
4.1.2 开发软件的配置 - 3 -
4.1.3 建立web工程搭建开发框架 - 3 -
4.2 数据库实现 - 3 -
4.2.1 数据库表字段设计 - 3 -
4.2.2 数据库连接实现 - 3 -
4.3 前台主要功能模块 - 3 -
4.3.1 登陆功能的实现 - 3 -
4.3.2 注册功能的实现 - 3 -
4.3.3 首页功能实现 - 3 -
4.3.4 图书浏览功能 - 3 -
4.3.5 订单功能 - 3 -
4.3.6 购物车功能 - 3 -
4.10 后台管理功能 - 3 -
4.10.1 后台管理功能流程 - 3 -
4.10.2 用户管理 - 3 -
4.10.3 广告管理 - 3 -
4.10.4 图书管理 - 3 -
第五章 总结与问题分析 - 3 -
5.1 系统问题分析总结 - 3 -
5.2 开发过程中常见问题分析 - 3 -
第六章 总结 - 3 -
参 考 文 献 - 3 -
致 谢 - 3 -
第一章 引言
1.1 项目背景
随着网络技术的迅猛发展,越来越多的人热衷于上网。随着用户的不断增加,其规模迅速扩大,它的领域也走向多元化。除了原先的科学技术和教育外,Internet已进入了文化、经济、政治、新闻、体育、娱乐、商业和服务业。可以预见Internet将成为我们构筑未来崭新的生活方式。[10]
电子商务就是在这样一个背景下产生和发展起来的。伴随着电子商务技术的不断成熟,电子商务的功能也越来越强大。书城交易网站就是Internet和电子商务发展的产物,近几年在我国发展迅猛,如同一些书店纷纷在各地开设分店以拉近书店与顾客间距离一样。随着科学技术的飞速发展,Internet已经成了普通百姓都可以初级的大中型媒体传播手段。随着现今全民素质和科学技术水平的不断提高,知识更新的越来越快。人们随时都会有被淘汰的危机,为了不让社会淘汰,做到与时俱进就必须多读书不断学习。21世纪是网络的时代、信息的时代,时间是非常的宝贵的。人们由于种种原因没有时间到书店去,也不知道哪家书店有自己需要的书籍,同时那些传统书店的经营者又没什么好的方法让人们知道我这就有顾客需要的书籍,这种买卖双方之间交流上的阻碍成为“网上书店”网站发展的原动力。网上书店的出现可以更好地解决这方面的问题。[11]
网上书店在价格、时效性、品种、查询方式等方面都有优势。网上书店是一种直销方式,速度和价格上都有优势,在价格上一般网上书店都有7.5-9折的折扣,如果是特价书折扣就更多了,网上书店的书目数据是任何订购书目都无法比拟的,亚马逊网上书店有300多万种图书,另外还有音乐系列产品和其它教育产品,刚刚成立的北京图书大厦网上书店也有16万种书目数据,“中国寻书网”目前也有50万种书籍,年度将突破100万种图书,网上书店的书目除书名,著者,价格等信息外,还有封面,内容简介,目次,评论等详细信息。同时网上书店的目录查询功能也是传统的按某种分类规则编排的图书征订目录无法比拟的,其以关键词或主题从网上检索某类文献,查准率与查全率都有一定的保障。另外还有一些书更是以网站包销或总代理的形式进行销售,这就意味着一种全新的电子商务模式的开始。[10]
1.2 项目目的
随着网络信息技术的高速发展,电子商务迅速发展。网上购物越来越流行。注册用户可以在网上搜索购买到自己想要的各种商品,让人们体会到了足不出户,便可随意购物的快感。而书籍作为一种文化的载体、智慧的结晶,一直是人们生活中必需的物品。由于书籍本身不像其他商品一样,存在多种必需当面检查质量。因此网上书店是发展的最迅速的。网上书店在价格、时效性、品种、查询方式等方面都有优势。因此开发一个网上书店是很有必要的。
随着Java Web技术的发展,Java 语言尤其擅长B/S机构的系统开发。本次课题采用J2EE SSH框架 集合JSP、JavaScript、CSS、HTML等知识联合设计。主要的目的是:针对目前较流行的框架技术进行一定的了解和熟悉。体会框架开发Web应用程序的好处。掌握Struts框架实现MVC模式结构清晰,开发者只关注业务逻辑的实现的优点。熟悉掌握Hibernate框架对于数据库操作的基本方法和步骤,体会代码冗余时的复杂,熟悉hibernate基本编程步骤,了解数据库表和实体类一一对应的基本编程思想。掌握Spring框架的反转控制思想(Inverse Of Control) 和工程设计模式。掌握基本的XML 文件的配置,学会CSS+JS+JSP开发B/S结构模式的浏览器程序。通过本次课题的研究达到对于现在主流框架技术有一点的了解,懂得如何开发B/S架构的应用程序,对于现在网上书店系统业务流程有一点的认知。进一步推广网上书店的发展。
1.3 主要内容
近年来,随着Internet技术的迅猛发展,计算机网络给人们的工作、学习和日常生活带来很大的便利,同时开发Web的技术也在不断更新,框架技术日趋成熟,特别是B/S架构的提出,使得框架技术在B/S架构系统上的优势尤为突出。本课题采用SSH框架结合Servlet、JavaScript、JSP、XML 等技术,基于B/S结构开发的网上书店系统,主要就是框架技术的应用,掌握如何结合数据库知识和框架技术开发出高效、简洁、省事的系统。
本论文具体章节安排如下:
第一章:引言。介绍课题研究的背景和目的。
第二章:系统开发相关的概念和理论以及技术。
第三章:系统分析和设计。
第四章:系统的实现。该部分是该课题的核心部分,包括开发运行环境构建,数据库实现以及根据需求分析和技术分析来实现系统的各个模块功能,使系统能够正常运行,包括开发过程中遇到的问题记载和分析。
第五章:总结与问题分析。对本课题的重点难点做一个分析,提出对本系统需要改进与加强的地方。
第六章:结束语。对本次课题研究的感想以及学到的知识和开发经验的一个总结和对后期开发的一个展望。
第二章 系统理论和技术
2.1 MyEclipse 的简介
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,JavaScript,Spring,SQL,Hibernate。
MyEclipse 是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接工具等多项功能。可以说MyEclipse几乎囊括了目前所有主流开源产品的专属eclipse开发工具。[1]
2.2 SSH框架的简介
SSH框架是指Struts 框架、Spring框架和Hibernate 框架的集成。是目前较为流行的一种Web应用程序开源框架。集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的Java对象,然后编写基本的DAO(Data Access Objects)接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最后由Spring做管理,管理Struts和Hibernate。
Struts 框架:Struts 是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。Struts的MVC设计模式使我们的逻辑变得很清晰。Struts 对Model,View和Controller 都提供了对应的组件。ActionServlet,这个类是Struts的核心控制器,负责拦截来自用户的请求。Action 这个类通常由用户提供,该控制器负责接收来自ActionServlet的请求,并根据该请求调用模型的业务逻辑方法处理请求,并将处理结果返回给JSP页面显示。所以Struts是Web框架技术的基础控制页面的跳转。Struts 框架流程图:
图2.1 struts 框架流程图
Spring 框架:Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。Spring 的反转控制(IOC)和面向切面编程(AOP)思想使我们的软件最大限度上解耦。Spring 的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。Spring在使用IOC容器作为构建所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务。
Hibernate 框架:Hibernate 框架是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。是用来解决传统程序上重复书写数据库连接、数据库关闭操作上的代码冗余的,提高五个接口来解决传统的JDBC操作,分别是Configuration 用来读取配置文件hibernate.cfg.xml 获取连接所需要的参数。SessionFactory 工厂方法负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象 Session 封装了基本的增、删、改、查方法负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。) Transaction 控制事务提交和回滚。Query负责各种数据库查询,不仅可以使用SQL语言还提供了HQL查询语言。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。
2.3 B/S架构的简介
B/S 架构是指:(Browser/Server)浏览器/服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,事务逻辑的极少部分在前端(Browser)实现,在服务器端(Server)实现主要的事务逻辑,形成所谓三层3-tier结构。相对于C/S结构的“胖”客户端,使用者需要在电脑上安装相应的客户端软件来说,B/S结构是属于一种“瘦”客户端,在服务器端存放大多数或主要的业务逻辑,因此,B/S结构的系统不需要安装客户端软件,它运行在客户端的浏览器之上,系统升级或维护时只需更新服务器端软件即可,这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。 B/S结构系统的产生为系统面对无限未知用户提供了可能。[11] B/S体系结构图:
图2.2基于B/S体系结构图
2.3 Java简介
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。是由Sun Microsystems现在称Oracle公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME)的总称。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专用社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景[4]。
Java编程语言风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心,Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。
2.4 Java Web工程的基本介绍
2.2.1 建立Web工程的基本步骤
以开放工具MyEclipse6.5为例。
1. 建立Web工程 单击File--->New--->Web Project 在弹出的窗口输入工程名。
2. 在工程子目录下的WebRoot\WEB-INF\lib 目录下导入开发过程中用到的第三方jar包。
3. 进行开发。相关的开发时用到的目录结构将在下面的篇章中介绍。
2.2.2 Java Web 工程目录结构
1.SRC 该子目录下存放开发过程中编写的java源代码。在改目录结构下可以建立自己的包名。entity 一般存放开发过程中的实体类 DAO 存放开发过程中对数据库进行操作的类。biz 一般是业务逻辑类 action 存放控制页面请求的action类
2.WebRoot 改子目录下一般有建立Web工程时生成的WEB-INF 文件夹和META-INF 文件夹,该目录下一般存放JSP页面和自己的JSP页面需要用到CSS、JS、以及一些文件和图片。CSS 通常放在自己在该目录下建立的CSS的文件夹中JS放置在JS的文件夹中
3.WEB-INF 下有lib 目录 存放开发工程中用到的第三方jar包。web.xml 文件一般配置过滤器 filter 和servlet
4.实体映射文件 xxx.hbm.xml 放置位置随便 一般存放在对应的实体包类,该文件配置的是实体类和对应的数据表之间的映射。
5.hibernate.cfg.xml 配置的是与数据库连接相关的属性,存放在src下
6.struts.xml 配置每个Action的文件,存放在src 下
7.beans.xml 配置的是每个javaBean 在框架中 反转控制就是通过这个文件读取相应的属性值的。
2.3 Oracle数据库
2.3.1 Oracle 数据库简介
Oracle 数据库是由甲骨文公司开发的一款重量量级的大型关系数据库,是目前最流行的客户/服务器(CLIENT/SERVER)或浏览器/服务器(B/S)体系结构的数据库之一 。
2.3.2 Oracle数据库的特点
完整的数据管理功能:1.数据的大量性。Oracle数据库是大型的数据,相比一般的小型、中型数据库,它能存放大量的数据,而且操作效率高。这也是Oracle数据库能应用于C/S,B/S 架构系统的原因。2.数据保存的持久性。3.数据的共享性4.数据的可靠性。
分布式处理功能:1.具有灵活的体系结构。2 适应分布式管理和控制机构,DDBS 的机构符合企业分布的组织结构,允许各个部门对其自身数据实行局部控制,在本地插入、查询和维护。3 经济性能优越。4 系统的可靠性高、可用性好。由于数据库分布在多个场地,并有许多复制数据,即使在个别场地或个别通信链路上发生障碍,也不会影响到整个系统的崩溃。5 局部应用的响应速度快。 6 可扩展性好。
开发性:与SQL Server只能在windows 平台上运行相比,Oracle 能运行在所有主流平台包括Windows(32位和64位)、Linux和不同分支的Unix。
第三章 系统需求分析与设计
3.1 可行性分析
本次课题研究是基于java语言,采用较流行的SSH框架,开发的B/S架构的网上书店系统。由于开发工具和SSH框架都是开源的,所有经济上是可行的,而该研究课题仅仅是个人毕业设计所用,不存在市场价值,而技术上SSH框架适合该类B/S结构的系统开发。因此该课题可以开发。
3.2 功能需求分析
功能需求分析阶段是软件开发前期必须的阶段。该过程是在编码前,综合调查市场需求,客户要求,经济效益以及时间和技术上多方面的因素得出系统该开发什么功能。需求分析一般分两个阶段,即需求获取和需求规格,需求获取是用自然语言清楚地描述用户的要求。需求规格的目的是确定需求的唯一性。需求分析通常是在综合考虑到影响因素后,确定系统有哪些功能,完成哪些功能。完善的需求往往为后续软件开发代来很多好处,往往通过需求分析可以避免开发过程中的很多问题。反而可以节约更多的时间。本研究课题是基于B/S 架构下开发的网上购物系统,由于不涉及到商业性仅仅是自己的一个研究性练习,所有功能大致和大多数网上购物系统功能一样。该系统功能分为前台部分和后台管理部分。前台部分包括: 用户登陆,注册,退出登陆,首页图书展示,图书浏览,广告展示,商品加入购物车,购物图书,生成订单及产生订单详细等功能。后台管理主要是对一些前台数据的管理包括:用户管理,广告管理,图书管理,订单管理等功能。其中每个功能模块包括UI设计和功能实现两部分。系统功能模块图如下图3.1所示:
图3.1系统功能模块图
1 用户登陆模块
登陆功能在本系统中非常重要,本系统实现购买功能必须是在线用户。
功能描述1. 对用户输入的用户名进行数据库匹配,存在用户然后匹配密码。
功能描述2. 对存在的用户检查是否激活,激活了才能登陆成功进入首页,否则跳转到激活页面。激活码采用用户名+随机数产生。
2 用户注册模块
注册功能模块也是B/S架构系统必须具备的功能。
功能描述1用户进行注册,用户名,密码格式是否正确 JS检查。
功能描述2是否输入了所有的信息值 ,验证码检查,采用流输出。
3 首页展示模块
该功能模块是整个该B/S 架构系统最重要的部分,他是系统好坏的门户。
功能描述1图书分类列出 从数据库中读取。
功能描述2图书展示 。
功能描述3广告展示 。
功能描述4系统显示是否登录、是 显示退出 否显现登录。
4 图书浏览功能
功能描述1显示图书比较完整的基本信息。
功能描述2可以选择每一页显示多少、按什么排序显示。
5 添加产品到购物车功能
功能描述1可以将喜欢的书添加到购物车。
功能描述2购物车将存入session 并生成数据库 到时候下次登录可以直接查看。
6 生成订单并产生订单详细
功能描述1可以对相应的产品进行购买,生成相应的订单。
功能描述2对下了的订单生成订单详细,方便发货。
7 后台管理员登陆
功能描述1管理员通过身份确认登陆到后台管理界面。
8 后台用户管理
功能描述1分页显示所有注册过的用户。
功能描述2后台管理员可以对用户进行增、删、改。
9 后台广告管理
功能描述1显示数据库存在的广告
功能描述2对广进行上传,存放到数据库
10 后台图书管理
功能描述1分页显示存在的图书。
功能描述2后台管理员对图书进行增、删、改。
11 后台订单管理
功能描述1分页显示所有的订单。
功能描述2可以对订单进行增、删、改。
3.3 系统用例模型
3.3.1 普通用户用例图
注册用户登录后,可以浏览商品列表信息,购买商品,查看订单,订单退订,修改个人信息等。
图 3.2 普通用户用例图
3.3.2 管理员用例图
管理员登录后,可以对图书,用户,订单,广告进行管理。对广告、图书、用户、订单进行基本的添加、修改、删除、查询等操作。
图3.3 管理员用例图
3.4 系统体系结构
根据该网上书店的基本功能需求,该系统基本结构可分为前台部分和后台部分。而由于SSH框架的特点,前台和后台部分架构都是四层结构。分别为表现层、控制层、业务层、数据层。
表现层:主要负责用户交互和结果显示,交易系统和管理系统有不同的URL 入口界面。
控制层:主要负责系统的访问控制、数据加载和注销,是系统的核心控制单元。控制层通过系统描述来组织工作。
业务层:实现了交易系统和管理系统的主要业务逻辑,是系统主要的运算单元。
持久层:实现了静态数据和数据库数据的持久化管理,为业务层提供数据服务,是系统进行数据操作的统一界面。
图3.4前台架构图
3.5 数据库设计
本次系统主要是基于B/S架构的系统,存在大量的数据读入和取出,对数据库表的要求比较高,每个功能模块基本都涉及到了数据表。
3.3.1 数据库表E-R图
图3.5系统数据E-R图
3.3.2 数据库表分析
对于B/S系统的网上书店来说,数据的存储往往是难点,因为系统将有大量的信息,为管理好改系统,采用如下数据表存储系统信息。
用户表:存储用户信息。包含用户账号,密码,昵称,性别,用户地址省份,城市等信息。
广告表:存储广告信息。包含广告编号,广告图片路径,广告描述。
图书表:存储图书信息。包含图书编号,图书名,图书市场价,图书书店价,作者,出版社,出版时间。
图书类型表:存储图书类型信息。包含图书类型编号,类型名,父类类型编号。
订单项表:存储单条订单项信息。包含订单项编号,订单编号,产品编号,产品市场价,产品书店价,订购数量,当前订单项积分。
订单表:存储订单信息。包含订单编号,用户编号,订购时间,收货人,收货地址,总金额,电话。
购物车表:存储购物车信息。包含购物车编号,用户编号,订单项编号,总售价,总书店价,总积分。
第四章 系统实现
4.1 搭建开发环境
本次课题采用J2EE SSH框架,开发工具采用MyEclipse6.5,数据库采用Oracle数据库,为方便操作数据库,采用oracle 客户端pl/SQL。对于开源框架导入工程jar包尤为最终要。
开发所需要的软件如下:。
开发软件介绍:
JDK:Java 虚拟机 java 语言开发必须的编译器。版本1.6 以上。
MyEclipse6.5:java 开发工具。
服务器:Tomcat5.0 以上
Oracle数据库:大型的数据库服务器。版本10g 以上。
PL/SQL:针对oracle 数据库开发的一款界面操作客户端。
Editplus 或者Dreamweaver:文本编辑器,开发html/JSP 页面工具。
4.1.1 安装开发工具
(1) 登陆http://java.sun.com,下载最新版JDK。这里下载的是jdk-6u7-windows-i586-p版本。
(2) 安装JDK 1.6。
(3) 安装MyEclipse6.5。下载网站http://www.cr173.com/soft/27454.html。由于MyEclipse6.5是一款收费软件,所有必须在首次登陆时输入注册码,网上有很多注册码。
(4) 安装Tomcat 服务器 ,在安装过程中可以修改默认端口8080。本次研究将端口改为8081 访问地址http://localhost:8081/ 也可以在安装目录:tomcat\conf\server.xml 配置文件中修改。
(5) 安装Oracle 数据库,在安装过程中需要设置system/sys 数据库默认用户的密码还要端口1521,以及域名xe。
4.1.2 开发软件的配置
(1) 配置MyEcliplise6.5 默认JDK
启动MyEclipse6.5 在工具栏 window --->preferences ---->java--->Installed JREs 在界面上单击add 然后单击Browser 选择你安装的的JDK。
(2) 配置MyEclipse6.5 服务器
window ----> preferences ---->MyEclipse Enterprise Workbench--->servers--->Tomcat 单击Tomcat6.x 在弹出的界面上,单击Browser 选择本地Tomcat 路径。
4.1.3 建立web工程搭建开发框架
MyEclipse6.5 建立Web工程很方便,但是由于Java 语言的特点,很多开源框架都用到了第三方的jar包 而这些jar包有时候会很容易导致jar包冲突,启动服务器时会报一些莫名其妙的错误。因而使用SSH 开源框架开发Web项目,适当导入jar包 避免jar包冲突很重要。
1 建立Web工程
在工具栏 File ----->New---->Web Project 在弹出的对话框 输入工程名,并选择java EE 1.5 默认是java EE 1.4。
2 导入开发所需jar包
在工程文件夹 WebRoot ---->WEB-INF --->lib 导入开发所需的jar包
4.2 数据库实现
4.2.1 数据库表字段设计
表4.1 用户表(d_user)
字段名 |
字段说明 |
字段类型 |
字段约束 |
是否为空 |
userId |
用户编号 |
integer |
主键 |
非空 |
|
登录邮箱 |
varchar(50) |
— |
非空 |
nickName |
用户昵称 |
varchar2(30) |
检查约束 |
非空 |
password |
用户密码 |
varchar2(30) |
检查约束 |
非空 |
sex |
用户性别 |
varchar2(8) |
检查约束(男) |
— |
province |
用户所在省份 |
varchar2(20) |
— |
— |
city |
用户所在城市 |
varchar2(20) |
— |
— |
Status |
用户状态 |
Integer |
检查约束(0 1) |
— |
eableMSG |
激活码 |
varchar2(50) |
— |
— |
表4.2 广告表(d_advertise)
字段名 |
字段描述 |
字段类型 |
字段约束 |
是否为空 |
advertise_id |
广告编号 |
integer |
主键 |
非空 |
image_path |
广告图片路径 |
varchar2(200) |
— |
非空 |
description |
描述 |
varchar2(100) |
— |
— |
表4.3 产品表(d_product)
字段名 |
字段描述 |
字段类型 |
字段约束 |
是否为空 |
productId |
产品编号 |
integer |
主键 |
非空 |
imagePath |
产品图片路径 |
varchar2(100) |
— |
非空 |
productName |
产品名 |
varchar2(100) |
— |
非空 |
costPrice |
市场售价 |
number(8,2) |
— |
— |
dangPrice |
系统售价 |
number(8,2) |
— |
非空 |
author |
作者 |
varchar2(40) |
— |
— |
publish |
出版社 |
varchar2(50) |
— |
— |
publishTime |
出版时间 |
varchar2(30) |
— |
— |
4.4 产品类别表(d_bookType)
字段名 |
字段描述 |
字段类型 |
字段约束 |
是否为空 |
typeId |
图书类型id |
integer |
主键 |
非空 |
typeName |
类型名 |
varchar2(20) |
— |
— |
parentId |
父类型id |
integer |
— |
— |
4.5 订单表(d_orderDetailed)
字段名 |
字段描述 |
字段类型 |
字段约束 |
是否为空 |
orderDetailedId |
订单详细编号 |
integer |
主键 |
非空 |
userId |
用户编号 |
integer |
— |
非空 |
orderTime |
订购时间 |
Date |
— |
非空 |
totalPrice |
总金额 |
float |
— |
非空 |
receiveName |
收货人 |
varchar2(50) |
— |
非空 |
receiveTime |
收货地址 |
varchar2(200) |
— |
非空 |
postalCode |
邮政编码 |
varchar2(10) |
— |
非空 |
mobile |
电话 |
varchar2(15) |
— |
非空 |
表4.6 订单项列表(d_orderItem)
字段名 |
字段描述 |
字段类型 |
字段约束 |
是否为空 |
|
orderItemId |
订单项编号 |
integer |
主键 |
否 |
|
orderDetailedId |
订单详细编号 |
integer |
— |
否 |
|
productId |
产品编号 |
integer |
— |
否 |
|
count |
订购数量 |
integer |
— |
否 |
|
dangTotalPrice |
系统价格 |
float |
— |
否 |
|
costTotalPrice |
产品市场价 |
float |
— |
否 |
|
sigleScore |
产品的积分 |
integer |
— |
否 |
表4.8 购物车数据表(d_cart)
字段名 |
字段描述 |
字段类型 |
字段约束 |
是否为空 |
cartId |
购物车编号 |
integer |
主键 |
否 |
userId |
用户编号 |
Integer |
外键 |
否 |
dangTatalPrice |
系统总价 |
float |
— |
否 |
costPrice |
市场总价 |
float |
— |
否 |
toatlScore |
总积分 |
integer |
— |
否 |
表4.7 后台管理员表(d_admin)
字段名 |
字段描述 |
字段类型 |
字段约束 |
是否为空 |
adminId |
管理员id |
integer |
主键 |
否 |
login |
登陆账号 |
varchar2(30) |
— |
否 |
password |
密码 |
varchar2(30) |
— |
否 |
realName |
真实姓名 |
varchar2(30) |
— |
— |
telephone |
电话 |
varchar2(30) |
— |
— |
4.2.2 数据库连接实现
Java Web SSH 框架技术连接是数据库,是通过Hibernate 框架技术访问的。Spring框架的SessionFactory 类将连接数据库操作分装起来,通过配置文件bean.xml 文件反转控制,连接数据库。
核心代码:
<!-- 连接相关的属性 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"> <!—驱动名--> <value>oracle.jdbc.OracleDriver</value> </property> <property name="url"> <!-- url ---> <value>jdbc:oracle:thin:@127.0.0.1:1521:xe</value> </property> <property name="username"> <value>graduation</value> </property> <property name="password"> <value>wangjing</value> </property> </bean> <!-- hibernate.cfg.xml Spring config --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource"/> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.Dialect">org.hiberante.dialect.Oracle9Dialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> <property name="mappingResources"> <list> <value>com/wangjing/book/advertise/Advertise.hbm.xml</value> <value>com/wangjing/book/booktype/BookType.hbm.xml</value> <value>com/wangjing/book/product/Product.hbm.xml</value> <value>com/wangjing/book/user/User.hbm.xml</value> <value>com/wangjing/book/backstage/admin/Admin.hbm.xml</value> <value>com/wangjing/book/order/OrderDetailed.hbm.xml</value> <value>com/wangjing/book/order/OrderItem.hbm.xml</value> <value>com/wangjing/book/cart/Cart.hbm.xml</value> </list> </property> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> |
4.3 前台主要功能模块
4.3.1 登陆功能的实现
系统的登陆界面(UI)设计如下图:
图4.1 系统登陆界面
用户在登陆本网上书店系统的时候,只需要输入正确的用户信息和用户密码,即可实现登陆,系统将进入首页,首页会显现用户昵称信息,表示已经成功登陆。如果用户信息错误,系统将进入到不同的页面。用户名不存在,系统将通过Action类跳转到注册页面,如果通过数据库验证用户存在,但状态未激活,系统将进入激活页面。登陆功能流程图入下图:
图4.2 登陆功能流程图
实现登录功能的主要方法:
public String checkUserLogin(String email, String password, ActionContext action) { // TODO 检查登陆是否成功 User user = userDAO.queryUserByEmail(email); // 账号不存在 if (user == null) { return "notExit"; } if (user != null && user.getStatus() == 0) { action.getSession().put("logined", user); return "status"; } // 登陆成功 if (user != null && user.getPassword().equals(password)) { action.getSession().put("logined", user); return "ok"; } return "error"; } |
4.3.2 注册功能的实现
注册页面(UI)设计:
图4.3 系统注册界面
用户通过登录界面的快速注册用户超链接进入注册界面,注册界面用户必须输入用户账号,用户昵称,昵称必须是字母,输入用户密码,密码由六位以上的字母或数字。通过单选框选择用户性别,通过下拉列表选择地址,用户必须输入验证码。正确输入用户信息后,注册成功,将进入激活页面。否则会在注册页面上显示错误信息提示。错误信息提示如下图所示:
图4.4 注册报错页面
激活页面(UI)设计:
图4.5 激活界面图
已经注册的用户可以在登录界面登录,但系统不会进入主页面,而是通过Action跳转到激活页面,在激活页面会显示当前用户的激活码。用户在激活页面可以通过输入显示的激活码,激活自己的账号。激活成功系统将进入登录界面。激活码算法是通过获取当前登录用户的邮箱,然后将字符串转换成字符,对应每一位乘以随机函数产生的数乘以10转换的整数,然后组成新的字符串,作为激活码。激活码算法如下:
// 产生激活码的算法 public String createCodeString(String email) { // 将数据 char[] codeString = email.toCharArray(); for (int i = 0; i < codeString.length; i++) { codeString[i] += (int) (Math.random() * 10); } // System.out.println(new String(codeString)); return new String(codeString); } |
注册功能流程图如下图所示:
图4.6 注册功能流程图
4.3.3 首页功能实现
用户访问系统默认将进入首页,首页将展示网上书店的基本信息。首页页面(UI)如下图:
图4.7 首页展示图
首页核心代码:
@Override public String execute(){ ActionContext ctx=ActionContext.getContext(); //TODO 将书分类放到request中 List<BookTypeInfoItem> bookTypeItem=bookTypeBiz.findAllBookType(); ctx.put("bookTypeItem", bookTypeItem); //TODO 书分类放到request中 List<Advertise> advertises=advertiseBiz.findAllAdvertise(); ctx.put("advertises", advertises); // TODO 产品放入request List<ProductInfo> productInfos=productBiz.findAllProduct(); ctx.put("productInfos", productInfos); // System.out.println("----------访问成功--------"); return "showHomePageOk"; }
|
4.3.4 图书浏览功能
该功能模块主要是展示比较详细的图书信息,图书信息采用分页显示,用户可以点击按钮选择每一页显示8条记录还是16条记录,并实现上一页下一页及第几页等功能,用户还可以选择相应的排序方式。
图书浏览显示界面(UI) 设计:
图4.8 图书浏览功能界面
实现分页显示图书的核心代码:
/** * 查询书分页显示 */ public List<ProductInfo> queryProductPage(final int pageNow, final int pageSize, final String order) { List<ProductInfo> products = (List<ProductInfo>) hibernateTemplate .execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { // TODO 分页查询产品 String sql = "from ProductInfo as p order by p.productId"; Query query = session.createQuery(sql); //query.setString(0,order); query.setFirstResult(pageSize * (pageNow - 1)); query.setMaxResults(pageSize); return query.list(); } }); return products; } |
4.3.5 订单功能
1 订单功能流程
用户通过登录系统,在浏览商品同时,可以对商品直接进行购买。用户单击购买,生成相应的订单,系统将进入订单页面,输入相应的收货人信息,点击生成订单。系统将进入生成订单成功。订单中包含订单项和订单详细。订单项中包含产品基本的信息,而订单项中包含用户收货信息。功能流程图:
图4.9 订单功能流程图
2 订单功能(UI)设计
图4.10 订单功能展示图
其核心功能代码如下:
// execute 方法 public String execute(){ // 得到session 中值 ActionContext action=ActionContext.getContext(); user =(User)action.getSession().get("logined"); if(user!=null){ product=(ProductInfo)action.getSession().get("productInfo"); OrderDetailed orderDetailed=new OrderDetailed(); // 构建订单详细对象 OrderItem orderItem =new OrderItem(); orderDetailed.setUserId(user.getUserId()); orderDetailed.setOrderTime(new Date(System.currentTimeMillis())); orderDetailed.setReceiveName(receiveName); orderDetailed.setReceiveAddress(receiveAddress); orderDetailed.setPostalCode(postalCode); orderDetailed.setMobile(mobile); orderDetailed.setTotalPrice(product.getDangPrice()*1); // 构建订单项对象 orderItem.setProductId(product.getProductId()); orderItem.setCount(1); orderItem.setDangTotalPrice(product.getDangPrice()); orderItem.setCostTotalPrice(product.getCostPrice()); orderItem.setSigleScore(product.getScoreCount()); // 构建对象关系 orderDetailed.addOrderItem(orderItem); // 调用数据库操作方法 生成订单 OrderBiz orderBiz=new OrderBizImpl(); orderBiz.addOrder(orderDetailed); return "orderOk"; } return "loginError"; } |
4.3.6 购物车功能
1 购物车功能设计
购物车功能是网上书店最重要的功能,购物车功能设计是方便用户一次可以购买多种书,或者是当用户看到自己喜欢的书时,但是用户暂时不方便购买也方便将书籍放入购物车,用户下次购买时能方便的查看购物找到书籍购买。
购物车是由一条条的订单项构成的Map集合,购物车中还包括整个商品的总价和节约的钱,以及总积分。订单项数据表(d_orderItem)和购物车数据表(d_cart)存在多对1的关系。通过Cart.hbm.xml 文件配置两个数据表之间的关系,数据库操作添加购物车时,系统会自动插入订单项。
2 购物车流图
用户通过产品信息,将自己喜欢的书加入购物车,系统判定用户是登陆,用户登陆,系统根据用户id查询当前用户是否存在购物车,如果用户已经存在,检查当前产品id是否已经存在购物车中,存在购物车中订单项中当前数量加1。总价对应相加。不存在添加订单项,如果用户id不存在购物车,创建新的购物车,并添加订单项。功能流程图如下图:
图4.11 购物车流程图
3 购物车界面(UI)设计
图4.12 购物车功能界面图
核心实现代码如下:
public void addCart(int userId, int productId) { // TODO Auto-generated method stub Cart cart = cartDAO.queryCartByUserId(userId); // 查询产品 ProductBizImpl productBiz = new ProductBizImpl(); // 1.必须根据productId 获得该件产品 ProductInfo product = productBiz.getProductDAO().queryProductById(productId); // 当前用户不存在购物车 if (cart == null) { // 创建新的购物车 Cart newCart = new Cart(); // 2.做成OrderItem OrderItem newOrderItem = new OrderItem(); newOrderItem.setProductId(productId); newOrderItem.setDangTotalPrice(product.getDangPrice()); newOrderItem.setCostTotalPrice(product.getCostPrice()); newOrderItem.setCount(1); newOrderItem.setSigleScore(product.getScoreCount()); // 添加总结额属性 double totalPrice = product.getDangPrice(); double costPrice = product.getCostPrice(); int totalScore = product.getScoreCount(); // 3. 添加购物车 newCart.addOrderItem(newOrderItem); newCart.setCostPrice(costPrice); newCart.setTotalPrice(totalPrice); newCart.setTotalScore(totalScore); newCart.setUserId(userId); cartDAO.save(newCart); } else { // 用户存在购物车 OrderItem orderItem = cart.getOrderItems().get(productId); double totalPrice = cart.getTotalPrice(); double costPrice = cart.getCostPrice(); int totalScore = cart.getTotalScore(); // 如果不存在 if (orderItem == null) { // 增加订单项 // 2.做成OrderItem OrderItem newOrderItem = new OrderItem(); newOrderItem.setProductId(productId); newOrderItem.setDangTotalPrice(product.getDangPrice()); newOrderItem.setCostTotalPrice(product.getCostPrice()); newOrderItem.setCount(1); newOrderItem.setSigleScore(product.getScoreCount()); // 添加总结额属性 totalPrice += product.getDangPrice(); costPrice += product.getCostPrice(); totalScore += product.getScoreCount(); // 3. 添加购物车 cart.addOrderItem(newOrderItem); cart.setCostPrice(costPrice); cart.setTotalPrice(totalPrice); cart.setTotalScore(totalScore); cart.setUserId(userId); cartDAO.updateCart(cart); } else { // 只增加数量 totalPrice += product.getDangPrice(); costPrice += product.getCostPrice(); totalScore += product.getScoreCount(); // 3. 添加购物车 cart.addOrderItem(orderItem); cart.setCostPrice(costPrice); cart.setTotalPrice(totalPrice); cart.setTotalScore(totalScore); cart.setUserId(userId); cartDAO.updateCart(cart); } } } |
4.10 后台管理功能
4.10.1 后台管理功能流程
后台管理包括四大管理功能,分别是用户管理、广告管理、图书管理、订单管理。其功能流程图如图4.13:
图4.13 后台功能流程图
登录界面如图4.14:
图4.14 登录界面图
4.10.2 用户管理
用户管理包括对数据库中用户信息的增加、删除、查询、修改等功能。后台管理员登陆后台主界面后,单击菜单项---->用户管理--->用户列表,分页显示所有用户信息,通过删除和修改链接可以对用户信息进行删除和修改,通过菜单项--->用户管理--->用户添加,可以添加用户信息。
用户管理查询分页界面如图4.15所示:
图4.15 后台分页显示用户界面图
后台添加用户界面(UI):
图4.16 后台添加用户界面图
分页查询用户核心代码:
/** * 后台管理 分页显示所有用户 */ public List<User> queryUserAll(final int pageNow){ final int pageSize=4; List<User> users=(List<User>)hibernateTemplate.execute(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { // TODO 分页 String hql="from User as u order by u.userId"; Query query=session.createQuery(hql); // 设置显示几条数据开始 query.setFirstResult(pageSize*(pageNow-1)); // 设置每一页显示几条 query.setMaxResults(pageSize); return query.list(); } }); return users; } |
4.10.3 广告管理
广告管理包括对数据库中广告信息的增加、删除、修改、查询等功能。显示广告信息时,能显示图片信息。后台管理员登陆后台主界面后,单击菜单项---->广告管理--->广告列表,显示所有广告信息,通过删除和修改链接可以对广告信息进行删除和修改,通过菜单项--->广告管理--->广告添加,可以添加广告信息。由于数据库存放的仅仅是图片路径,因此必须涉及到将图片上传到服务器。
查询广告信息(UI)如图4.17所示:
图4.17 广告信息展示图
添加广告界面(UI)如图4.18所示:
4.18 广告添加界面图
添加广告代码:
// 后台管理 图片文件上传 @Override public String execute() throws Exception{ Advertise advertise = new Advertise(); // 通过request 获得SevletContext ServletContext ctx=request.getSession().getServletContext(); System.out.println(ctx); //pic 文件 picFileName 文件名 System.out.println("pic "+pic+"picFileName "+picFileName); String absolutePath=ctx.getRealPath("/images/advertise"); FileInputStream fi = new FileInputStream(pic); //建立文件夹 // 文件输出流 读入文件 FileOutputStream fo = new FileOutputStream(absolutePath+"/"+picFileName); byte[] b = new byte[1024]; int len = 0; while(true){ len = fi.read(b); if(len<0)break; fo.write(b, 0, len); } fo.close(); fi.close(); // 图片存放路径 String imagePath="images/advertise/"+picFileName; String description=request.getParameter("description"); advertise.setImagePath(imagePath); // 设置对象值 advertise.setDescription(description); AdvertiseBiz advertiseBiz=new AdvertiseBizImpl(); advertiseBiz.addAdvertise(advertise); return "addAdvertiseOk"; } |
4.10.4 图书管理
图书管理包括对数据库中图书信息的增加、删除、查询、修改等功能。后台管理员登陆后台主界面后,单击菜单项---->图书管理--->图书列表,分页显示所有图书信息,通过删除和修改链接可以对图书信息进行删除和修改,通过菜单项--->图书管理--->图书添加,可以添加图书信息。
图书分页显示界面(UI)如图4.19所示:
图4.19 图书分页查询图
图书添加界面(UI)
图4.20 图书添加界面图
分页查询图书代码:
/** * 查询书分页显示 */ public List<ProductInfo> queryProductPage(final int pageNow, final int pageSize, final String order) { List<ProductInfo> products = (List<ProductInfo>) hibernateTemplate .execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { // TODO 分页查询产品 String sql = "from ProductInfo as p order by p.productId"; Query query = session.createQuery(sql); //query.setString(0,order); query.setFirstResult(pageSize * (pageNow - 1)); query.setMaxResults(pageSize); return query.list(); } }); return products; } |
第五章 总结与问题分析
5.1 系统问题分析总结
对于本次系统设计上还有较多的缺陷,对于知识的整体结构把握不好。由于设计的不好里,导致在实现时出现很大问题。特别是在实体对象属性上的确定时,由于用例图的缺陷,导致数据库建表字段出现冗余和缺省。比如用户表当时没有考虑到状态激活用户和非状态激活用户,缺省字段status和enableMSG导致在验证用户是否激活时不能实现,结果因为修改数据库增加这两个字段,导致实体类,User.hbm.xml 以及action类jsp页面代码都要修改。在比如在建立数据库表时有时候关系不能把握好,是一对一,还是一对多。或者是多对多关系。导致数据库代码冗余。如订单项、必须包括产品信息,订单中用户id,等等都导致开发过程中很多问题。
业务上的不熟悉。对于一个B/S结构的购物网站,要想实现基本的登陆、注册、浏览等基本的功能,而不去追求功能上的具体要求还是比较容易。但是要想实现上线,考虑到用户量、效率、稳定性以及业务的完整其实确实不容易。对于业务上的熟悉与否直接影响到实体类的设计,直接导致数据库的设计。而数据库的设计最大的问题就是要确认各个表直接的关系,而不会导致数据冗余。SQL 语句的好坏直接决定系统的效率。而这正是该系统最大的问题。往往查询过程中速度很慢。因此该系统完全只能作为一个练习,对知识的系统复习。
5.2 开发过程中常见问题分析
问题1:对于B/S 结构的系统,由于浏览器,Tomcat服务器,Struts框架默认中文字体的编码不一样所以中文乱码问题经常会遇到,解决浏览器中文乱码问题,可以在JSP页面通过pageEncoding="gbk" , contentType="text/html;charset=gbk"。解决将Struts默认中文编码改为gbk,在struts.xml 配置文件中配置constant。
<!--设置sturts 中文默认编码为gbk--> <constant name="struts.i18n.encoding" value="gbk"></constant> |
为了彻底解决中文乱码问题,需要开发过滤器(filter) 该类必须实现javax.servlet.Filter 类 过滤器核心代码:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(this.encoding); System.out.println("-------doFilter------------"); chain.doFilter(request, response); } public void init(FilterConfig config) throws ServletException { System.out.println("---------init----------"); this.encoding = config.getInitParameter("encoding"); } |
在web.xml 中配置过滤器:
<filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.wangjing.book.filter.EncodingFilter</filter-class> <init-param> <!--设置中文字体编码--> <param-name>encoding</param-name> <param-value>gbk</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> |
问题2:在SSH框架中混合了Servlet 但是Struts提供的配置文件使用的过滤的url-pattern属性/* 在地址栏访问Servlet时被过滤掉了,需要将url-pattern属性改为.action核心代码具体如下:
<!- 配置Struts的过滤器---> <filter> <filter-name>dispatcher</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>dispatcher</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> |
问题3:启动Tomcat服务器时,通常会报Hibernate Dialect must be explicitly set错误,原因是我为了减少计算机启动时间,将Oracle数据库服务器关闭了,会报数据库连接错误。
问题4:用户分页显示 hibernateTemplate 如何 显示最大纪录数
方法: String hql = "select count(*) from User as user"; Integer count = (Integer)getHibernateTemplate().find(hql).listIterator().next(); return count.intValue();
问题5: 后台添加用户 调用queryUserAllAction 跳转到查询页面成功 但显示数据不成功。原因:调用queryUserAllAction 时要传入pageNow 参数 (当前显示第几页) 直接跳转没有传入 默认pageNow 等于0 所有不显示数据但显示格式。
解决方法:在queryUserAllAction 中加入判断 if(pageNow==0) pageNow=1: 即可。
问题6:后台分页显示 根据id分页不行 只能根据rowNum 。
Query.setFirstResult(0) 表示数据的开始 从下表0开始。
Query.setMaxResult(4) 表示数据显示多少纪录 最多四条。
问题7:a 开始使用com.oreilly.servlet.MultipartRequest 上传总是报io 异常改用文件io FileOutputStream 上传解决问题采用struts 提供的类方法解决org.apache.struts2.interceptor.ServletRequestAware;
第六章 总结
本文讨论了基于B/S模式下,采用Java Web SSH 框架技术设计与开发的网上书店的。同时简要的介绍了SSH框架的工作原理以及各个框架的职责。
在开发期间,通过不断尝试和上网查找资料,学到了很多知识。首先锻炼了自己的动手能力,对于SSH框架的基本开发步骤通过这次的练习已经基本掌握。对于Hibernate、Spring、Struts框架的原理也比较清楚。更主要的是,在开发期间学会了遇到问题自己动手找资料解决的能力。当然在期间同时学到了很多网上书店开发经验。在今后的工作中必将成为宝贵的财富。
当然期间遇到了不少问题,有框架技术本身存在的BUG,比如框架设计到数据库联合查询时,往往因为没有设置延缓机制,导致系统过慢。再比如:由于由于,Oracle数据库、Struts框架还有服器Tomcat等默认对中文编码不一致,所有往往浏览器对中文编码往往会出现乱码。另外,也由于对框架技术不是非常了解,在实体关系映射时也遇到了不少问题。什么一对一,一对多,多对一,多对多,单向、双向等等。在配置文件也耗费了大量时间来了解、熟悉和使用,参考了hibernate annotate api 文档等资料,终于得以基本解决。以上问题通过网上找资料不停的尝试最终解决。
由于时间仓促,自己本身知识所限,该系统还有很多不足之处,有待进一步改善和完善。比如,界面欠缺优化,比较粗造,有些功能还实现的不够完善,跟商用软件相比有一定的差距。但是,不足之处会在以后尽量完善。
参 考 文 献
[1] 徐建波.Java Web 应用开发原理与技术[M]. 国防科技大学出版社,2010-07-10.
[2] (美) Y.Daniel Liang .Java 语言程序设计进阶篇[M]. 机械工业出版社.2006-08-11.
[3] 戎伟,猛劼,苏微. 解密J2EE 项目开发的70个问题[M].人民邮电出版社.2008-01-20.
[4] (美) Roger S.Pressman.软件工程[M]. 机械工业出版社.2011-07.
[5] 施伯乐,丁宝康,汪卫.数据库系统教程M]. 高等教育出版社.
[6] 达内 Core Java 核心技术 C+E 国际软件工程师培训教程.
[7] 达内 Oracle 数据库应用 C+E 国际软件工程师培训教程.
[8] 达内 HTML,JavaScript& Struts Lab Guide C+E 国际软件工程师培训教程.
[9 ] http://wenku.baidu.com/view/451ce528cfc789eb172dc81a.html //SSH 框架的特点.
[10] http://baike.baidu.com/view/2090973.htm// ssh 框架的简介.
[11] http://blog.csdn.net/jianyi7659/article/details/6578534 //ssh 框架的简介.
致 谢
从论文选题到搜集资料,从提纲的完成到正文的反复修改,我经历了喜悦、聒噪、痛苦和彷徨,在写作论文的过程中,心情是如此复杂。如今,伴随着这篇毕业论文的最终成稿,复杂的心情烟消云散,自己甚至还有一点成就感。
我要感谢我的导师陈林书老师。他为人随和热情,治学严谨细心,工作认真负责。从选题、定题、撰写提纲,到论文的反复修改、润色直至定稿,老师始终认真负责地给予我深刻而细致地指导。正是有了老师们的无私帮助与热忱鼓励,我的毕业论文才得以顺利完成。
我还要感谢我的班主任谢艳春老师以及在大学四年中给我们授课的所有老师们,是他们让我学到了很多很多知识,让我看到了世界的精彩,让我学会了做人做事。
最后感谢四年里陪伴我的同学、朋友们,有了他们我的人生才丰富,有了他们我在奋斗的路上才不孤独,谢谢他们。
原文地址:https://www.cnblogs.com/epoch211/p/12623802.html