还剩64页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
电子商务书店系统的设计与实现【摘要】利用JspStruts和Hibernate等开发技术,采用了结构化设计方法,进行了电子商务书店系统的开发系统实现的功能有新用户注册,用户登录,商品列表,商品分类,查询商品,特价商场,新品上市,用户留言以及购物车和订单管理等,并实现了后台管理员对商品、订单、会员等的管理首先分析了系统的业务流程和数据流程,接着进行数据库分析并建立了完整性强、安全性好的数据库,最后设计了系统的框架并编程实现应用系统,并通过Junit进行了测试【关键词】网上书店;JSP;Struts;Hibernate;MySQLDesignandImplementationofElectronicCommerceBookstoreSystemSHAOXu-DongGrade07Class1MajorInformationManagementandInformationSystemComputerScienceandTechnologyDept.ShaanxiUniversityofTechnologyHanzhong723000ShaanxiTutor:YANGGangAbstract:TheDevelopmentofElectronicCommerceBookstoreSystemwithtechnologyofJsp,StrutsandHibernateandstructureddesignmethod.Itimplementsomefunctionsasfollowingnewusers’registrationuser’loginmerchandiselistmerchandisecategorybargainmarketnewmerchandisemarketleavewordscartmanagementandordermanagementandsoon.Besidesitimplementsthemanagementofmerchandiseorderandmemberfromadministrator.Fisrtlyanalyzingtheflow-processanddataflowonthesystem.Secondlyanylyzingdatabaseandbuildingacompletesafedatabase.LastlydesigningasystemframetoimplementtheapplicationsystemandpastthetestoftheJunit.Keywords:OnlineBookstore;Jsp;Struts;Hibernate;MySQL毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意作者签名 日 期 指导教师签名 日 期 使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容作者签名 日 期 学位论文原创性声明本人郑重声明所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明本人完全意识到本声明的法律后果由本人承担作者签名日期年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文涉密论文按学校规定处理作者签名日期年月日导师签名日期年月日目录TOC\o1-3\h\z\u引言11开发工具的选择及相关技术简介
21.1数据库软件MySQL
21.2主要开发环境软件MyEclipse
21.3服务器Tomcat
21.4JAVA语言在网络上的应用
21.5JSP的基础——Servlet技术
21.6Struts概述
31.7Hibernate简介32需求分析
42.1国内外现状
42.2可行性分析
42.3系统功能分析
42.4数据流图
52.5数据字典63系统设计
83.1系统总体框架设计
83.2数据库设计
83.
2.1概念结构设计
83.
2.2逻辑结构设计
103.
2.3数据库表的设计
103.3系统模块设计124系统实现
134.1系统主界面
134.2购物车的实现
144.
2.1选购商品的实现
144.
2.2查看购物车选购商品
174.3会员模块
184.
3.1验证登录帐号
184.
3.2会员登录
194.
3.3修改注册信息
194.4商品模块
204.
4.1新增商品分类
204.
4.2浏览商品分类
214.
4.3新增商品
214.
4.4分页浏览商品
224.5订单模块
234.
5.1浏览某会员的所有订单
234.
5.2浏览所有订单
244.
5.3浏览某订单的商品记录
254.6留言板模块265系统测试
295.1单元测试
295.2白盒和黑盒测试29总结30致谢31参考文献32科技外文文献33附录A:源程序代码42附录B:系统使用说明书58引言 随着信息技术在国际贸易和商业领域的广泛应用,利用计算机技术、网络通信技术和Internet来实现商务活动的国际化、信息化和无纸化,已成为各国商务发展的—大趋势 电子商务Electronic Commerce正是为了适应这种以全球为市场的变化而出现和发展起来的它可以使销售商与供应商更紧密地联系起来,以更快地满足客户的需求,也可以让商家在全球范围内选择最佳供应商,在全球市场上销售图书电子商务基于网络技术.网络技术提供了实现电子商务的技术平台,而电子商务是网络技术的最新应用和最终目标 从形式上看,电子商务利用计算机网络检索和获取信息,对个人和公司提供决策服务,解决了组织、商家和客户的需求,减少了用于改善货物和服务质量的投入,加快了商品交易的速度Internet正在将不同形式的电子商务结合起来,产生出许多创新的、混合的电子商务形式 从电子商务的目标上看,电子商务能够扩大顾客群,获取更高收益,开拓目标市场,节省费用和开支,加速商品流通,加快顾客信息反馈,并提高服务质量在过去的几年间,随着Internet的迅速发展,通过网络使在家庭办公的个人用户也积极投入到了电子商务中由于激烈的市场竞争和对成本的关注,大量企业正在改进原有的电子商务系统来支持新兴的网络经济 1开发工具的选择及相关技术简介
1.1数据库软件MySQLMySQL 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统它具有功能强、使用简便、管理方便、运行速度快、安全可靠性强等优点,用户可利用许多语言编写访问MySQL 数据库的程序,另外,MySQL在UNIX等操作系统上是免费的,在Windows操作系统上,可免费使用其客户机程序和客户机程序库所以是一个首选的数据库软件
1.2主要开发环境软件MyEclipseMyEclipse是一个专门为Eclipse设计的商业插件和开源插件的完美集合MyEclipse为Eclipse提供了一个大量私有和开源的Java工具的集合,很大程度上解决了各种开源工具的不一致和缺点问题,并大大提高了Java和JSP应用开发的效率MyEclipse的实际价值来自其发布的大量的可视化开发工具和实用组件如CCS/JS/HTML/XML的编辑器,帮助创建EJB和Struts项目的向导并产生项目的所有主要的组件如Action/SessionBean/Form等,此外还包含编辑Hibernate配置文件和执行SQL语句的工具此外MyEclipse还包含大量由其他组织开发的开源插件,Genuitec增强了这些插件的功能并且撰写了很多实用文档便于开发者学习
1.3服务器TomcatTomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现与传统的桌面应用程序不同,Tomcat中的应用程序是一个WAR(WebArchive)文件WAR是Sun提出的一种Web应用程序格式,与JAR类似,也是许多文件的一个压缩包这个包中的文件按一定目录结构来组织通常其根目录下包含有Html和Jsp文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录,这个目录很重要通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)通常这些所依赖的类也可以打包成JAR放到WEB-INF下的lib目录下,当然也可以放到系统的CLASSPATH中,但那样移植和管理起来不方便
1.4JAVA语言在网络上的应用Java是一种简单易用、完全面向对象、具有平台无关性且安全可靠的主要面向Internet的开发工具自从1995年正式问世以来,Java的快速发展已经让整个Web世界发生了翻天覆地的变化在早期,Java比较多的用在浏览器上,插入到网页中即是Java Applet程序,成为最灵活、最强大的网页多媒体的载体,但由于Java虚拟机相对于个人电脑而言,有占用资源大,安全性相对较差等缺点,Applet逐渐的被后起之秀Flash所替代,但随着Java Servlet的推出,Java在电子商务方面开始崭露头角,最新的JSPJava Server Page技术的推出,更是让Java成为基于Web的应用程序的首选开发工具,目前的Java技术已成为所有大型电子商务项目的必然选择 Java程序可以获取网络上结点的图象、声音、HTML文档及文本等资源,并可以对获得的资源进行处理例如Java程序可以每隔一定时间读取某结点提供的最新数据,并以图表的形式显示出来在编程处理上,一般先生成一个URL类型的对象,然后用 Java中相应的方法(method)获取该对象所代表的资源
1.5JSP的基础——Servlet技术Java Servlet是JSP技术的基础,JSP本身就是预先被编译成Servlet,然后再运行的,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成,Servlet这个名称大概源于Applet,现在国内的翻译方式很多,本文为了避免误会,本文直接采用Servlet这个名称而不做任何翻译,读者如果愿意,可以称之为“小服务程序”Servlet其实和传统的CGI程序和ISAPI、NSAPI等Web程序开发工具的作用是相同的,在使用Java Servlet以后,用户不必再使用效率低下的CGI方式,也不必使用只能在某个固定Web服务器平台运行的API方式来动态生成Web页面许多Web服务器都支持Servlet,即使不直接支持Servlet的Web服务器也可以通过附加的应用服务器和模块来支持Servlet得益于Java的跨平台的特性,Servlet也是平台无关的,实际上,只要符合Java Servlet规范,Servlet是完全平台无关且是Web服务器无关的由于Java Servlet内部是以线程方式提供服务,不必对于每个请求都启动一个进程,并且利用多线程机制可以同时为多个请求服务,因此Java Servlet效率非常高但Java Servlet也不是没有缺点,和传统的CGI、ISAPI、NSAPI方式相同,Java Servlet是利用输出HTML语句来实现动态网页的,如果用Java Servlet来开发整个网站,动态部分和静态页面的整合过程简直就是一场噩梦这就是为什么SUN还要推出Java Server Pages的原因
1.6Struts概述Struts 框架工具是 Apache 基金会 Jakarta 项目中推出的一个子项目 Struts 在英文中是支架、支撑的意思,这也体现出 Struts 在开发 Web 应用程序过程所起到的重要作用, Struts 为 Web 应用提供了通用的框架,让开发人员可以把主要精力集中在如何解决实际业务问题上,与此同时 Struts 框架也允许开发人员根据实际需要进行扩展和定制,从而可以更好的适应用户的需求采用 Struts 可以简化遵循 MVC 设计模式的 Web 应用的开发工作,很好地实现代码重用,使开发人员从一些繁琐的工作中解脱出来,快速开发能够充分发挥 JSP/Servlet 优点、并具有强可扩展性的 Web 应用总之, Struts 的出现使得 Web 应用的开发过程大大简化,从而能够缩短开发周期、提高开发效率 Struts 架构一经推出,即受到 Java 开发群体的广泛重视,从 2004 年开始逐渐升温,并日渐成为 Java 创建 Web 应用开发的最流行的框架工具
1.7Hibernate简介Hibernate是一个面向java环境的对象/关系数据库的映射工具对象/关系数据库映射(ORM)用于把对象模型的对象映射到基于SQL的关系数据结构中去Hibernate不仅管理java类到数据库表的映射,还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间Hibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%的工作对于以数据为中心的程序来说,它们往往只是在数据库中使用存储过程来实现商业逻辑,Hibernate可能不是最好的解决方法;对于那些基于java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是最有用的2需求分析
2.1国内外现状二十一世纪是一个集数字化,网络化,信息化的,以网络为核心的社会随着计算机科学的发展,网络技术和数据库技术在Internet中的应用越来越广泛,为广大网络用户提供了更加周到和以人为本的服务1996年前后,在美国学术界提出“电子商务”(E-Business或E-Commerce)的概念短短几年的时间里,这一概念已在全球各地被广泛接受简单地讲,电子商务是指利用电信网络进行的商务活动现在,电子商务已经成为国际上各个国家制定经济政策的主要依据之一网上书店就是一种典型的电子商务应用网上书店随着信息时代的来临已经由上个世纪末的萌芽期转向发展高潮期和务实创新期1)国外网上书店的现状国外网上书店主要分布在欧美等经济技术比较发达的国家和地区起步早、规模大、发展快、数量多等,其中在90年代末期国外已有网上书店1000多家亚马逊网上书店由美国人杰夫贝佐斯于1995年7月创立并开始营业,它是目前全球最大的在线图书店,而且将自己的势力扩展到欧洲部分市场目前亚马逊可以提供470万种图书目录及相关信息,拥有620万名网上顾客可见其发展势头之猛Borders网上书店属于美国Borders集团有限公司的一部分主要经营图书、杂志、音像制品、CD-ROM、DVD等商品1000多万件美国有许多图书馆,例如纽约皇后区图书馆的新书就是从Borders网上书店订购2)国内网上书店的现状1起步晚、数量少最早的网上书店是中国书店,建立于1995年,而后至1997年新华书店才建立网上书店2起步低,模式少2000年评选出总体竞争力前5名网上书店是当当网上书店、中国寻书网、上海书城网上书店、博库网上书店、全国购书网3分布极不平衡网上书店基本上集中在以北京为中心的地区,以及上海为中心的地区和广东为中心的地区
2.2可行性分析通过对需求文档的各个方面进行了具体的了解和分析之后,现对开发电子商务网上书店系统的可行性进行分析技术上可行本系统采用Windows系列操作系统,开发工具使用功能强大的eclipse,服务器采用Apache公司的Tomcat,数据库采用MySQL
5.5提供强有力的支持,这些软件在Java开发中已被大量应用,技术上都比较成熟因此在技术上是可行的经济上可行由于使用开发工具大多是开源免费软件,基本上不需要额外支出,开发经费没有问题管理上可行本系统采用java编写,对平台没有依赖性,可以部署在任意平台下管理另外,本系统采用B/S架构,也可以通过实现远程管理因此在管理上可行综上所述,开发电子商务网上书店系统在技术上、经济上、管理上都是可行的
2.3系统功能分析根据电子商务书店的基本需求,本系统需要完成如下具体功能用户登录用户登录主要体现在对权限的控制之上,对于没有注册的用户,不能让其进入系统,例如,绕过登录页面,直接在浏览器地址输入要访问的页面会员注册为了能够实现图书商品的购买,需要管理客户相关的联系方式、送货地点等相关的信息,所以会员注册的时候一定要填写自己的真实资料商品列表只有将商品展示给客户看,用户才能决定是否够发,是否值得购买,所以我们设计了“新品上市”,“特价区”以及商品详细信息展示等功能图书查询网上书店的书会有很多,如何让客户快速找到自己需要的书?针对这个需求,我们做了两方面的工作第一,根据图书的用途,细分了23个大类,当用户进入系统后,可以通过首页对图书分类的链接直接找到自己关心的书籍,或者在页面的右上方可以通过下拉框选择图书类型进行搜索第二,针对图书的一些其它特性,我们设计了关键字搜索,在页面右上方“商品关键字”中输入查找信息,然后点击“查找”,就可以快速找到需要的书籍购物车管理当客户选择购买某图书产品时,应该能够将对应图书信息,如价格、数量记录到对应的购物车中,并允许客户返回书目查询页面,选择其他商品,并添加到购物车中,当对应的购物订单生成后,应该能够自动清除以生成订单的购物车中的信息订单处理对应客户购买图书商品信息的需求,在确定了所购图书商品的价格、数量等信息后,提示用户选择对应的送货方式及付款方式,最终生成对应的订单记录,以便于网站配货人员依据订单信息进行后续的出货、送货的处理
2.4数据流图数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换在数据流图中没有任何具体的物理元素,它只是描绘信息在软件中流动和被处理的情况因为数据流图是系统逻辑功能的图形表示,即使不是专业的计算机人员也容易理解它,所以它是分析员和用户之间极好的通信工具如图
2.1所示,数据流图的四种基本符号和具体描述如下:图
2.1数据流图的基本符号通过对电子商务网上书店的经营模式和业务流程进行认真分析和研究的基础上,经过反复推敲论证,最后确定了该电子商务网上书店系统的逻辑模型我们以数据流图和数据字典的方式来描述新系统的逻辑功能该系统的数据流图如图
2.2所示图
2.2电子商务书店系统数据流图
2.5数据字典数据字典是所有与系统相关的数据元素的有组织的列表,并且包含了对这些数据元素的精确、严格的定义,从而使得用户和系统分析员双方对输入、输出、存储的成分甚至中间计算结果有共同的理解简而言之,数据字典是描述数据的信息的集合,是对系统中使用的所有数据元素的定义的集合下面的表是对各数据元素的详细说明数据项名称管理员信息简述记录和保存管理员的基本信息数据项组成管理员信息=管理员ID+管理员类型+管理员姓名+登录名+密码数据结构名称商品信息简述记录和保存商品的基本信息组成商品信息=商品ID+商品类型+商品名称+价格+特价+商品型号+图片+商品描述+出版社+出版日期+是否特价数据存储名称购物车信息简述记录和保存购物车的基本信息记录组成购物车信息=购物车ID+会员ID+总价+购物车状态数据结构名称购物车选购商品信息简述购物车选购商品的详细信息组成购物车选购信息=选购信息ID+购物车ID+商品ID+数量+单价+合计数据项名称商品类别信息简述记录商品的类别信息数据项组成商品类别信息=商品类别ID+类别名称+类别描述数据项名称留言信息简述记录会员的留言信息数据项组成留言信息=留言ID+会员ID+会员管理员ID+标题+留言内容+留言日期+回复内容+回复日期数据流名称会员信息简述记录会员的基本信息数据流组成会员信息=会员ID+会员级别+用户名+密码+会员名+电话+地址+邮编+注册日期数据项名称会员级别简述记录会员级别的详细信息数据项组成商品类别信息=会员级别ID+级别名称+折扣数据存储名称订单信息简述记录订单的详细信息记录组成订单信息=订单ID+会员ID+购物车编号+下单日期+订单状态3系统设计
3.1系统总体框架设计根据电子商务网上书店的需求结合MVC架构思想的特点,决定采用如下方案进行设计数据库层使用中间件Hibernate+MySQL数据库,业务层使用Struts,视图层使用jsp根据本次毕业设计需求结合Struts和Hibernate的特点,搭建了如下的框架com.base存放一些基础的java类,如AjaxBean.java用于在注册时验证用户是否存在,输入是否合法等;BaseLog.java是一个注册了日志记录器的类,在Service的实现类中被继承,实现在控制台对日志的打印;BaseAction.java和BaseLog.java一样,是一个注册了日志记录器的java类,被Action继承,实现对日志的打印;Constants.java用于存储一些常用的常量com.filter过滤器,只存放了一个过滤器CharacterEncodingFilter.java,实现对编码的过滤因为本系统开发环境是中文,所以过滤器编码规则采用GB2312com.ORMORMObjectRelationMappingjava是一种面向对象的语言,而当今流行的数据库是关系型数据库,为了能以对象的方式操纵数据库中的数据,诞生了HibernateORM中,对象-关系的基本映射可以通过下表体现表
3.1对象-关系映射表面向对象概念面向关系概念类表对象表的行即记录属性表的列即字段com.service业务层,在这一层定义和实现了管理员和用户可以执行的一系列操作,以及管理员对购物车,商品,订单,用户以及留言板的管理等一系列操作com.struts这里主要存放一些struts的资源文件,struts中实现国际化就需要这些文件,由于时间仓促,本系统没有实现国际化com.struts.action从业务层中拿数据,为jsp页面准备数据,可以有一定业务逻辑的处理com.struts.form表单,struts中特有的结构,方便从jsp中拿取提交数据和向JSP页面传递数据
3.2数据库设计
3.
2.1概念结构设计根据以上需求分析进行初步设计可以画出本系统实体间关系的E-R图,如图
3.1所示,系统中包括管理员、购物车、选购信息、商品类别、留言信息、会员、会员级别、商品、订单等9个实体图
3.1会员E-R图图
3.2商品E-R图图
3.3前台E-R图图
3.4后台E-R图
3.
2.2逻辑结构设计通过对已有电子商务网上书店和设计出的E-R图的分析,本系统设计的实体和属性如下1)管理员:管理员ID管理员类型,管理员姓名,用户名,密码2)购物车(购物车ID,会员ID,合计,状态)3)选购信息(ID,购物车ID,商品ID,数量,单价,小计)4)商品类别(类别ID,类别名称,类别描述)5)商品(商品ID,商品类别,商品名称,单价,特价,商品型号,图片,商品描述,出版社,出版日期,是否特价)6)留言(留言ID,会员ID,管理员ID,主题,内容,留言日期,回复内容,回复日期)7)会员(会员ID,会员级别ID,用户名,密码,姓名,电话,地址,邮编,注册日期,最后登录时间,登录次数,邮件)8)会员级别(级别ID,级别名称,折扣)9)订单(订单ID,会员ID,购物车ID,订单号,订单日期,订单状态)
3.
2.3数据库表的设计根据系统的功能分析和E-R图可以设计如下所示的数据库中的表数据库采用MySQL,调试、运行程序前必须先在MySQL服务器上建立一个名为db_eshop的数据库下面集中给出了与该电子商务网上书店相关的各个数据表的详细结构1)管理员信息表如表
3.2所示,管理员信息表(admin)描述了与电子商务网上书店相关的所有管理员的信息,这是电子商务网上书店系统中的重要数据表
3.2管理员信息表序号字段名类型长度精度小数位数默认值允许空主键说明1IDint4√管理员ID2AdminTypeint4√管理员类型3AdminNamechar12√管理员姓名4LoginNamechar12√登录名5LoginPwdchar12√密码2)购物车信息表如表
3.3所示,购物车信息表(cart)保存了购物车的相关信息表
3.3购物车信息表序号字段名类型长度精度小数位数默认值允许空主键说明1IDint4√购物车ID2Memberint4会员ID3Moneydecimal9182总计支付4CartStatusint4√购物车状态3)选购商品表如表
3.4所示,选购商品表(cartselectedmer)保存了购物车中选购商品的详细信息表
3.4选购商品表序号字段名类型长度精度小数位数默认值允许空主键说明1IDint4√选购信息ID2Cartint4购物车编号3Merchandiseint4商品ID4Numberint4购买数量5Pricedecimal8182单价6Moneydecimal9182小计4)商品类别表如表
3.5所示,商品类别表(category)保存了商品类别的基本信息表
3.5商品类别表序号字段名类型长度精度小数位数默认值允许空主键说明1IDint4√商品类别ID2CateNamechar40√商品类别名称3CateDesctext√商品类别描述5)留言信息表如表
3.6所示,留言信息表(leaveword)保存了会员的留言信息表
3.6留言信息表序号字段名类型长度精度小数位数默认值允许空主键说明1IDint4√留言ID2Memberint4会员ID3Adminint4√管理员ID4Titlechar60√留言标题5Contenttext√留言内容6LeaveDatedatetime√留言时间7AnswerContenttext√回复留言6AnswerDatedatetime√回复时间6)会员信息表如表
3.7所示,会员信息表(member)保存了该系统会员的详细信息表
3.7会员信息表序号字段名类型长度精度小数位数默认值允许空主键说明1IDint4√会员ID2Memberlevelint4会员级别3LoginNamechar12√用户名4LoginPwdchar12√密码5MemberNamechar20√会员名6Phonechar15√电话7Addressvarchar100√地址8Zipchar10√邮政编码9RegDatedatetime√注册时间10LastDatedatetime√最后登录时间11LoginTimesint4√登录次数12EMailVarchar100√电子邮件7)会员级别表如表
3.8所示,会员级别表(memberlevel)记录了会员级别的详细信息表
3.8会员级别表序号字段名类型长度精度小数位数默认值允许空主键说明1IDint4√级别ID2LevelNamechar20√级别名称3Favorableint4√折扣8)商品信息表如表
3.9所示,商品信息表(merchandise)记录了商品的详细信息表
3.9商品信息表序号字段名类型长度精度小数位数默认值允许空主键说明1IDint4√商品ID2Categoryint4商品分类ID3MerNamechar40√商品名称4Pricedecimal8182√单价5SPricedecimal8182√特价6MerModelchar40√商品模型7Picturevarchar100√商品图片8MerDesctext√商品描述续表
3.99Manufacturerchar60√出版社10LeaveFactoryDatedatetime√出版时间11Specialint4√是否特价9)订单表如表
3.10所示,订单表(order)记录会员的购买商品信息表
3.10订单表序号字段名类型长度精度小数位数默认值允许空主键说明1IDInt4√订单ID2Memberint4会员ID3Cartint4购物车ID4OrderNOchar20√订单号5OrderDatedatetime√订单日期6OrderStatusint4√订单状态
3.3系统模块设计本电子商务网上书店系统可大致分为两个模块具体描述如下
(1)会员模块包括订单管理、购物车管理、购买商品、查询商品、顾客留言
(2)管理员模块包括订单管理、商品管理、会员管理、系统管理系统的具体功能模块图见图
3.2图
3.2电子商务书店系统功能模块图4系统实现
4.1系统主界面根据现行流行开发模式,该电子商务网上书店系统的界面采用Jsp+JavaScript+css+Ajax等技术实现,网页中的内容数据,如商品类别和商品信息都是通过后台管理从数据库中读取的,这样就大大的增加了电子商务网上书店的灵活性图
4.1描述了JSP页面加载数据库中数据的调用过程图
4.1jsp页面加载数据库中数据过程描述系统主界面如图
4.2所示图
4.2系统主界面另外,每一个页面上,提供了按照关键字和商品类型搜索的功能,实现的部分代码如下所示/**浏览商品分类*/publicListbrowseCategorythrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryfromCategoryasaorderbya.id;tx=session.beginTransaction;list=query.list;tx.commit;if!Hibernate.isInitializedlistHibernate.initializelist;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MerServiceImpl类中的browseCategory方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}
4.2购物车的实现作为一个电子商务网上书店,购物车是必不可少的,该模块实现的部分功能代码如下所示
4.
2.1选购商品的实现选购商品界面如图
4.3所示图
4.3选购界面实现的部分代码如下/**选购商品*/publicbooleanaddCartMembermemberMerchandisemerintnumberthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{Cartselectedmersel=null;intfavourable=member.getMemberlevel.getFavourable.intValue;//判断该会员是否已经有使用中的购物车Stringhql=fromCartasawherea.member=:memberanda.cartStatus=0;Queryquery=session.createQueryhql;query.setEntitymembermember;query.setMaxResults1;tx=session.beginTransaction;Cartcart=Cartquery.uniqueResult;ifcart==null{cart=newCart;cart.setCartStatusnewInteger0;cart.setMembermember;cart.setMoneyDouble.valueOfnumber*mer.getPrice.doubleValue;cart.getMerchandises.addmer;session.savecart;}else{//如果选购的是已经选购过的商品则只增加商品数量即可hql=selectafromCartselectedmerasawherea.cart=:cartidanda.merchandise=:meridorderbya.iddesc;query=session.createQueryhql;query.setIntegercartidcart.getId.intValue;query.setIntegermeridmer.getId.intValue;query.setMaxResults1;sel=Cartselectedmerquery.uniqueResult;inttotal=number;System.out.printlntotal*mer.getPrice.doubleValue*favourable/100;ifsel!=null{total=number+sel.getNumber.intValue;sel.setNumberInteger.valueOftotal;ifmer.getSpecial.intValue==1{//特价商品sel.setPricemer.getSprice;sel.setMoneyDouble.valueOftotal*mer.getSprice.doubleValue;}else{//普通商品sel.setPriceDouble.valueOfmer.getPrice.doubleValue*favourable/100;sel.setMoneyDouble.valueOftotal*mer.getPrice.doubleValue*favourable/100;}session.updatesel;}else{cart.getMerchandises.addmer;}ifmer.getSpecial.intValue==1{//特价商品cart.setMoneyDouble.valueOfcart.getMoney.doubleValue+number*mer.getSprice.doubleValue;}else{//普通商品cart.setMoneyDouble.valueOfcart.getMoney.doubleValue+number*mer.getPrice.doubleValue*favourable/100;}session.updatecart;}tx.commit;//如果是尚未选购过的则要修改选购记录的有关字段ifsel==null{tx=session.beginTransaction;hql=selectafromCartselectedmerasawherea.cart=:cartidanda.merchandise=:meridorderbya.iddesc;query=session.createQueryhql;query.setIntegercartidcart.getId.intValue;query.setIntegermeridmer.getId.intValue;query.setMaxResults1;sel=Cartselectedmerquery.uniqueResult;ifsel!=null{sel.setNumberInteger.valueOfnumber;ifmer.getSpecial.intValue==1{//特价商品sel.setPricemer.getSprice;sel.setMoneyDouble.valueOfnumber*mer.getSprice.doubleValue;}else{//普通商品sel.setPriceDouble.valueOfmer.getPrice.doubleValue*favourable/100;sel.setMoneyDouble.valueOfnumber*mer.getPrice.doubleValue*favourable/100;}session.updatesel;}tx.commit;}status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行CartServiceImpl类中的addCart方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}
4.
2.2查看购物车选购商品对于选购的商品本系统支持购物车查看功能,界面如图
4.4所示,图
4.4查看购物车中选购商品实现的部分代码如下所示/**查看购物车中的选购商品*/publicListbrowseCartMembermemberthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listresult=null;try{//取得该会员的使用中购物车IDIntegercartid=newInteger0;Stringhql=fromCartasawherea.member=:memberanda.cartStatus=0;Queryquery=session.createQueryhql;query.setEntitymembermember;query.setMaxResults1;tx=session.beginTransaction;Cartcart=Cartquery.uniqueResult;ifcart!=null{cartid=cart.getId;}tx.commit;//浏览购物车中的所有选购记录hql=fromCartselectedmerasawherea.cart=:cartid;query=session.createQueryhql;query.setIntegercartidcartid.intValue;tx=session.beginTransaction;result=query.list;if!Hibernate.isInitializedresult{Hibernate.initializeresult;}tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行CartServiceImpl类中的browseCart方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnresult;}
4.3会员模块会员模块描述了会员权限范围的一系列操作,功能实现的部分代码如下所示
4.
3.1验证登录帐号对于登录用户,我们进行了javaScript前台和Java代码后台的双重验证,以确保系统不能被非法登录,当用户没有输入用户名或密码时,那么前台验证会给予相应的提示,如图
4.5所示如果用户输入了用户名和密码,但是用户名或密码不合法,那么同样的,也会给用户提示,如图
4.6所示图
4.5前台javaScript的验证图
4.6后台java代码的验证后台验证部分代码如下/**检测登录帐号是否有效*/publicbooleanchkLoginNameStringloginNamethrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanresult=true;try{Stringhql=selectcount*fromMemberasawherea.loginName=:loginName;Queryquery=session.createQueryhql;query.setSt、-了ringloginNameloginName;query.setMaxResults1;tx=session.beginTransaction;ifIntegerquery.uniqueResult.intValue0result=false;tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MemServiceImpl类中的chkLoginName方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnresult;}
4.
3.2会员登录/**会员登录*/publicMembermemLoginStringloginNameStringloginPwdthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Membermem=null;try{Stringhql=selectafromMemberasawherea.loginName=:loginNameanda.loginPwd=:loginPwd;Queryquery=session.createQueryhql;query.setStringloginNameloginName;query.setStringloginPwdloginPwd;query.setMaxResults1;tx=session.beginTransaction;mem=Memberquery.uniqueResult;mem.setLoginTimesInteger.valueOfmem.getLoginTimes.intValue+1;mem.setLastDatenewDate;session.updatemem;tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MemServiceImpl类中的memLogin方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnmem;}
4.
3.3修改注册信息修改注册会员信息界面如图
4.7所示图
4.7会员注册信息修改/**修改注册会员*/publicbooleanupdateMemberMembermemberthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanresult=false;try{tx=session.beginTransaction;session.updatemember;tx.commit;result=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MemServiceImpl类中的updateMember方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnresult;}
4.4商品模块
4.
4.1新增商品分类/**新增商品分类*/publicbooleanaddCategoryCategorycatethrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{tx=session.beginTransaction;session.savecate;tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MerServiceImpl类中的addCategory方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}
4.
4.2浏览商品分类/**浏览商品分类*/publicListbrowseCategorythrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryfromCategoryasaorderbya.id;tx=session.beginTransaction;list=query.list;tx.commit;if!Hibernate.isInitializedlistHibernate.initializelist;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MerServiceImpl类中的browseCategory方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}
4.
4.3新增商品本系统可以实现后台管理员动态添加商品,操作界面如图
4.8所示图
4.8新增商品界面新增商品部分实现代码如下/**新增商品*/publicbooleanaddMerMerchandisemerthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{tx=session.beginTransaction;session.savemer;tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MerServiceImpl类中的addMer方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}
4.
4.4分页浏览商品在本系统中实现了分页浏览商品,实现部分代码如下所示/**分页浏览商品*/publicListbrowseMerintpageSizeintpageNointcateIdbooleanisSpecialthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Stringhql=fromMerchandiseasa;ifisSpecial{//特价商品hql=hql+wherea.special=1;}else{//普通商品hql=hql+wherea.special=0;}ifcateId!=0{//指定类别hql=hql+anda.category.id=+cateId;}hql=hql+orderbya.iddesc;Queryquery=session.createQueryhql;query.setMaxResultspageSize;query.setFirstResultpageNo-1*pageSize;tx=session.beginTransaction;list=query.list;tx.commit;if!Hibernate.isInitializedlistHibernate.initializelist;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MerServiceImpl类中的browseMer方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}
4.5订单模块
4.
5.1浏览某会员的所有订单对于每一个登录的会员,只允许查看他所有的订单,如图
4.9所示,图
4.9浏览某会员的所有订单实现部分代码如下所示/**浏览某会员的所有订单*/publicListbrowseOrderMembermemberthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryfromOrdersasawherea.member=:member;tx=session.beginTransaction;query.setEntitymembermember;list=query.list;if!Hibernate.isInitializedlistHibernate.initializelist;tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行OrderServiceImpl类中的browseOrder方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}
4.
5.2浏览所有订单对于订单管理员,他可以查看所有的订单,并进行查看,删除以及对订单进行CSV、Excel或XML格式导出等操作,如图
4.10所示图
4.10浏览所有订单实现部分代码如下所示/**浏览所有订单*/publicListbrowseOrderthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryfromOrdersasaorderbya.iddesc;tx=session.beginTransaction;list=query.list;if!Hibernate.isInitializedlistHibernate.initializelist;tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行OrderServiceImpl类中的browseOrder方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}
4.
5.3浏览某订单的商品记录对于已经提交的订单,可以查看已经购买的商品如图
4.11所示图
4.11浏览订单商品记录实现该功能的部分代码如下所示/**浏览某订单的所有商品记录*/publicListbrowseOrderMerCartcartthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listresult=null;try{//浏览购物车中的所有选购记录Stringhql=fromCartselectedmerasawherea.cart=:cartid;Queryquery=session.createQueryhql;query.setIntegercartidcart.getId.intValue;tx=session.beginTransaction;result=query.list;if!Hibernate.isInitializedresult{Hibernate.initializeresult;}tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行OrderServiceImpl类中的browseOrderMer方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnresult;}
4.6留言板模块为了及时得到用户信息的反馈,本系统设计了留言板模块,如果过多的客户留言放在一个页面,客户体验和系统性能将会大打折扣,因此实现了此分页展示的功能,如图
4.12图
4.12留言板分页展示界面部分实现代码如下所示/**分页浏览所有留言*/publicListbrowseWordintpageSizeintpageNothrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryfromLeavewordasaorderbya.iddesc;query.setMaxResultspageSize;query.setFirstResultpageNo-1*pageSize;tx=session.beginTransaction;list=query.list;tx.commit;if!Hibernate.isInitializedlistHibernate.initializelist;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行WordServiceImpl类中的browseWord方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}5系统测试在本次书店系统开发过程中,主要用到了单元测试,白盒测试和黑盒测试几种测试方法
5.1单元测试单元测试集中检测软件设计的最小单元——模块通常,单元测试和编码测试是同步进行的,在本次开发中,我也是通过Junit在开发过程中通过对模块接口,局部数据结构,重要的执行通路,出错处理通路和边界条件等五个方面进行测试的另外,在测试过程中,也用到了白盒测试和黑盒测试的理论知识
5.2白盒和黑盒测试白盒测试把测试对象看作一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息来设计或选择测试用例,对程序所有逻辑路径进行测试黑盒测试黑盒测试着重测试软件功能,并不能取代百合测试,是一种与白盒测试互补的测试方法,它很可能发现白盒测试不易发现的其他类型错误黑盒测试力图发现下述类型的错误1功能不正确或遗漏了功能2界面错误3数据结构错误或外部数据库访问错误4性能错误5初始化和终止错误如表
5.1是对登录模块的一个黑盒测试用例表
5.1登录模块的黑盒测试案例编号测试模块测试操作预期结果功能测试结果回归测试结果Test001登录模块
1.进入系统首页;
2.不输入用户名或密码,点击登录提示用户名或密码是必须的符合预期结果符合预期结果Test002登录模块
1.进入系统主页(不登录);
2.点击订单管理跳转到另一个页面,提示没有登录符合预期结果符合预期结果Test003登录模块
1.以sxd/sxd登录系统;
2.点击订单管理;
3.拷贝浏览器地址;
4.回到首页,点击安全退出;
5.新建选项卡,在地址栏粘贴地址,按回车键跳转到另一个页面,提示没有登录符合预期结果符合预期结果白盒测试在测试过程的早期进行,而黑盒测试主要用于测试过程的后期本系统通过上述测试方法发现了不少问题,并及时给予了解决,通过Junit进行单元测试大大的提高了系统安全性,同时也提高了开发效率通过白盒和黑盒测试排除了不少系统问题,使得该电子商务网上书店系统能够更加健壮的运行总结本次毕业设计,是我第一次做这样的开发,不是很熟练,而时间又很短,所以对于开发出来的成品不可能十全完美,只能体现标题所反映的内容从技术上来说,Java良好的跨平台性,使得开发出来的Java程序可以跨平台的使用(在Windows平台上开发出来的程序不经修改或是很少的修改,便可以移植到Linux或其它的支持JSP技术的平台)但是由于时间比较紧迫,而且加上开发环境的限制(不易找到Linux平台),使得跨平台的特性无法得到展示上述的时间和开发环境的限制,局限了此次的开发在较为常用的Windows平台上开展此次毕业设计的完成,要感谢我的指导老师——杨老师,他在我完成此次项目上给予了很大的帮助,帮我解决了很多困惑的问题开发的过程是痛苦的,因为遇到了大量的问题,不过在老师的帮助下,最终解决了问题,基本上实现了毕业设计的需求在这次毕业设计中,我学到的不只是技术,还有学习技术的能力以及遇到问题解决得办法!再次感谢我的导师!致谢转眼毕业设计到了尾声,我由衷地感谢我们的指导老师杨老师,在这次毕业设计中,在杨刚老师的指导下完成了电子商务网上书店系统的系统调研、需求分析、总体设计、详细设计、界面设计其中主要的可行性分析、需求分析、总体设计,他们是比较重要的组成部分,也是后期软件的基础与必备需求分析文档编辑的好坏直接影响整个软件设计工作本系统基本能够实现客户远程购书的功能,在进一步完善的基础上,将可以投入实际的应用本次所作课题是电子商务书店系统的设计和实现,由于我的编程水平和经验不足,有些功能的实现并不完美、并不理想在已经完成的程序中,也存在许多不尽人意的算法,也没有统一优化,系统有待进一步改善,而这些问题也让我充分意识到软件开发的困难程度通过本次毕业设计,使我对电子商务网站的开发有了一定的了解对软件开发和手段,我都有了一定的认识;丰富了我的软件开发的经验,提高了程序编写得水平加深理解了在课程中、书本上学到的知识和理论,并使其在实际开发中得到运用同时通过编写毕业设计论文,掌握了软件文档的书写方法和书写格式在杨刚老师的关心帮助支持下,经过很长的辛勤探索、不懈努力,终于顺利完成了本次毕业设计任务并为我今后继续学习、深造奠定了基础,我非常感谢各位老师、同学的支持与帮助参考文献
[1]严蔚敏,吴伟民.数据结构(C语言版)[M].清华大学出版社,
1997.
[2]BruceTate.BitterJava[J].ManningPublications
2002.
[3]BruceEckel.ThinkinJava[J].PrenticeHallPTR,
2002.
[4]RogerBateSandyShrum.CMMIntegrationFramework[J]CMU/SEISpotlight,
1998.
[5]孙卫琴.精通Hibernate Java对象持久化技术详解[M].电子工业出版社,
2010.
[7]孙卫琴.Tomcat与Web开发技术详解[M].电子工业出版社,
2009.
[8]孙卫琴.Java面向对象编程[M].电子工业出版社,
2006.
[9]刘新.Java开发技术大全[M],清华大学出版社,
2009.
[10]卜炟da.21天学通JavaWeb开发[M]电子工业出版社,
2009.
[11]苗雪兰,刘瑞新,宋歌.数据库系统原理及应用教程[M]机械工业出版社,
2009.
[12]张海藩.软件工程导论[M],清华大学出版社
2008.科技外文文献JSPandWEBtechnology1JSPIntroductionJSPJavaServerPagesisaJava-basedscriptingtechnology.IsadvocatedbySunMicrosystemsInc.togetherwithanumberofcompaniesinvolvedintheestablishmentofadynamicwebpagetechnologystandards.JSPtechnologyissomewhatsimilartoASPtechnologyItisatraditionalHTMLpagefile*.htm*.htmltoinsertJavaprogramsegmentScriptletandJSPtagtagToformtheJSPfile(*jsp).WebdevelopmentwithJSPisacross-platformapplicationsthatcanrununderLinuxbutalsoinotheroperatingsystems.IntheJSPofthemanyadvantagesoneofwhichisthatitwillbeHTMLencodedWebpagefromthebusinesslogicseparatedeffectively.JSPaccesswithreusablecomponentssuchasServletJavaBeanandJava-basedWebapplications.JSPalsosupportsdirectlyintheWebpageembeddedJavacode.JSPcanbeusedtwowaystoaccessdocuments:JSPdocumentssentbythebrowserrequesttherequestsenttotheServlet.JSPtechnologyusesJavaprogramminglanguageXML-typetagsandscriptletstohaveapackagedealwiththelogicofdynamicpages.Pagetagsandscriptletscanalsoexistintheserveraccesstotheresourcesoftheapplicationlogic.JSPlogicandWebpagedesignanddisplayisolatedandsupportreusablecomponent-baseddesignWeb-basedapplicationsmorequicklyandeasilydeveloped.TheWebserverwhenmeetsvisitstheJSPhomepagetherequestfirstcarriesoutsegmentwillthencarryouttheresultcodetoreturntogetherwithJSPinthedocumentHTMLforthecustomer.TheinsertionJavasegmentmayoperatethedatabaseagainthedirectionalhomepageandsoonrealizesthefunctionwhichtheestablishmentdynamichomepageneeds.JSPandJavaServletarethesameisintheserverendexecutionusuallyreturnstothisclientsideisaHTMLtextthereforeclientsidesolongashasthebrowsertobeabletoglanceover.TheJSPpageiscomposedoftheHTMLcodeandtheinsertingJavacode.TheserverinthepagebytheclientsidewasrequestedthatlaterwillcarryonprocessingtotheseJavacodewillthenproducetheHTMLpagewillreturngivestheclientsidethebrowser.JavaServletistheJSPtechnologybasemoreoverthelarge-scaleWebapplicationproceduresdevelopmentneedsJavaServletandtheJSPcoordinationcancomplete.JSPhadtheJavatechnologysimplyeasytousecompleteobject-orientedhadtheplatformindependencyandsafereliablemainlyfacedInternetsallcharacteristics.2JSPcomputingtechniqueTocarryonthedynamicwebsiteconvenientlyfastthedevelopmentJSPhasmadetheimprovementinthefollowingseveralaspectscausesittobecomebuildsthecrossplatformfastthedynamicwebsitefirstchoiceplan.
2.1carriesonthecontentproductionandthedemonstrationseparatesWiththeJSPtechnologytheWebpagedevelopmentpersonnelmayuseHTMLortheXMLmarkingdesignandtheformattedfinalpageandusestheJSPmarkingorthetootsyproducesonpagesdynamiccontentoriginally.ProductioncontentslogicissealedinmarksandintheJavaBeansmoduleandtiesupinthescriptallscriptsinserverendmovement.BecausecorelogicissealedinmarksandinJavaBeansthereforetheWebadministrativepersonnelsandthepagedesignercaneditandusetheJSPpagebutdoesnotaffectthecontenttheproduction.IntheserverendtheJSPengineexplainedthattheJSPmarkingandthescriptproducethecontentwhichrequestedandorXMLpagesformtransmitstheresultbyHTMLthebrowser.ThisbotharehelpfulintheauthorprotectsowncodeandcanguaranteeanybasedontheHTMLWebbrowserscompleteusability.
2.2mayentrustwithheavyresponsibilitythemoduleTheoverwhelmingmajorityJSPpagereliesonmayentrustwithheavyresponsibilitythecrossplatformmoduleJavaBeansorEnterprisetheJavaBeansmodulecarriesoutcomplexprocessingwhichtheapplicationprocedurerequests.Thedevelopmentpersonnelcanshareandexchangetheexecutionordinaryoperationthemoduleorcausesthesemodulesusesformoreusersandthecustomerassociation.Hasacceleratedtheoveralldevelopmentprocessbasedonmodulesmethodandcauseseachkindoforganizationobtainsbalancedintheirexistingskillandintheoptimizedresultdevelopmentendeavor.
2.3usesmarkingTheWebpagedevelopmentpersonnelwillnotbethefamiliarscriptlanguageprogrammers.TheJSPtechnologyhassealedmanyfunctionsthesefunctionsareeasytousemarkingtocarryonthedynamiccontentproductionwithJSPintherelatedXMLtoneed.ThestandardJSPmarkingcanvisitandtheinstantiationJavaBeansmoduletheestablishmentortheretrievalmoduleattributedownloadsAppletaswellastheexecutiondifficultywithcodesandthetime-consumingfunctionwithothermethods.
2.4adaptstheplatformNearlyallplatformssupportJavaJSP+JavaBeanstobepossibletopassunimpedednearlyunderallplatforms.TransplantsfromaplatformtootherplatformJSPandJavaBeansdoesnotevenneedtotranslatebecausetheJavabytecodeisstandardhasnothingtodowiththeplatform.
2.5databaseconnectionInJavaconnectsthedatabasethetechnologyistheJDBCJavaprocedureisconnectedthroughtheJDBCdriverandthedatabaseoperationsandsoonexecutioninquiryextractiondata.SunCorporationhasalsodevelopedJDBC-ODBCbridgeusesthistechnicalJavaproceduretobepossibletovisithastheODBCdriverdatabaseatpresentthemajoritydatabasesystemshavetheODBCdriverthereforetheJavaprocedurecanvisitsuchasOracleSybaseMSSQLServeranddatabasesandsoonMSAccess.InadditionthroughthedevelopmentmarkingstorehousetheJSPtechnologymayfurtherexpand.Thethirdpartydevelopmentpersonnelandotherpersonnelmayfoundtheirmarkingstorehouseforthecommonlyusedfunction.ThisenablestheWebpagedevelopmentpersonneltobeabletousethefamiliartoolandtobesimilartomarkingsamecarriesoutthespecificfunctioncomponenttocarryonthework.TheJSPtechnologyveryeasyconformitytomanykindsofapplicationarchitecturetousetheextanttoolandtheskillandcanexpandtothesupportenterprisedistributionalapplication.3EclipsefunctionsynopsisMoreandmoreJavadevelopmentpersonnelalreadystartedtheproductivitywhichandthequalityincomeappreciatesEclipseJDTtoprovide.ItwastheJavaeditorprovidesgrammarGaoLiangtodemonstratethattheformattingthefoldthecontentwereauxiliarycodetemplateandsoonmanyfunctions.Itgrowsunceasinglyavailablerestructuringandthecodegenerationfunctionsetpermitsyouinahigherranktheoperationcodeandautomatedusualcodeintensitydutyandeasywrongduty.MoreoverindevelopsthecodeandusesJDTtocompileandtocarryouttheJUnittestbuilt-insupportcarriesontheunittestingafterthecodemayuseEclipsethefirst-classJavadebuggerdebuggingwhenthemovementmeetsanyquestion.BesidesJDTEclipseSDK-themostpopularEclipse.orgdownloading-alsocontainsPlug-inDevelopmentEnvironmentPDE.PDEusedthespecificfunctiontoexpandJDTtoconstructtheEclipseplug-inunit-basedontheEclipseapplicationprocedurebasicconstructionagglomeration.InfactusesthetoolwhichprovidesbyEclipseitselftobeabletosurmounttheJavadevelopmentmayexpandtheexistingEclipseapplicationprocedureorevenfoundsthebrand-newapplicationprocedure.EclipsebyascriptlevelconstitutioncontainsinmanyfunctionalmodulesortheEclipseterminologyso-called“theplug-inunit”.Theplug-inunitisprovidesallfunctionsintheEclipseapplicationprocedurethemodule.TheycooperatethroughitsAPItopaythefinaloutcometogether.InEclipseeventhemostfoundationsfunctionforinstancethesearchandthestartinstallmentsplug-inunitsealsintheplug-inunit.InordertoexpandtheexistingEclipsefunctionorcarryontheconstructioninabovetheplug-inunittheconcreteexpansioncontributionfortheexpansionspotwhichwillexposebyotherplug-inunits.Usuallytheplug-inunitconcentratesthespecificregionresponsibilityandgivesthroughoramanyexpansionwayotherresponsibilitydesignationotherplug-inunits.Forexampleaplug-inunitallowsyouparalleltocomparetwodocumentsvisiblythecontentsbutitwillnotcarehowtoreadthesedocumentsevenhowtoexplainthesedocumentstructure;Thisisotherplug-inunitswork.Whencomparedwithtwodocumentsthisplug-inunitfirstinspectswhethertohaveanotherplug-inunittobepossibletoexplainthesedocumentstructure.Iffoundoneittotheplug-inunitinquiryrelatedfileorganizationinformationwhichfoundandusedthisinformationinthecomparisonprocess.MayseethatthemodularconstructionwasEclipsehasprovidedthehugeflexibilityandprovidedonetobepossibletosupportthemassiveapplicationprocedureplatformwhichtheoriginaldesignhasnotexpected.4StructsfunctionsynopsisStrutsisaMVCframeFrameworkusesindevelopingJavafasttheWebapplication.StrutsrealizesthekeypointinCControllerActionwhichandwehavecustom-madeincludingActionServlet/RequestProcessorwasalsoVViewprovidesaseriesofrowstohavecustom-madethelabelCustomTag.Springisalightvessellight-weightcontaineritscoreistheBeanfactoryBeanFactorywithconstructsMModelwhichweneed.AbovethisfoundationSpringhasprovidedAOPAspect-OrientedProgrammingfacestratificationplaneprogrammingrealizationprovidesunderthenon-managementenvironmentwithittodeclareservicesandsoonwaybusinesssecurity;IsmoreconvenienttoBeanfactoryexpansionApplicationContextwetorealizetheJ2EEapplication;DAO/ORMrealizesfacilitatesustocarryonthedatabasethedevelopment;WebMVCandSpringWebhaveprovidedJavatheWebapplicationframeorcarriesontheintegrationwithotherpopularWebframe.Thatismayabothuseachievebothowncharacteristiccarriesonsupplementary.StructsisthekindwhichservletandtheJSPmarkagroupcooperatesmutuallytheycomposetheMVC2designswhichmayentrustwithheavyresponsibility.ThisdefinitionexpressedthatStrutsisaframebutisnotastorehousebutStrutshasalsocontainedtherichmarkstorehouseandtheindependenceinthisframeworkutilityprogramclass.ClientbrowsercustomerbrowsertherequestfoundsaneventfromcustomerbrowserseachHTTP.TheWebvesselwilluseaHTTPresponsetomaketheresponse.Controllercontrollerthecontrollerreceivefrombrowsersrequestanddecidedthatsendsoutwherethisrequest.SpeakingofStrutsthecontrollerisanorderdesignpatternwhichrealizesbyservlet.struts-config.xmldocumentdispositioncontroller. Servicelogictheservicelogicrenewalmodelsconditionandhelpsthecontrolapplicationproceduretheflow.SpeakingofStrutsthisisthroughtakestheactualservicelogic“thin”thepackingActionkindtocomplete.Modelmodelconditionmodelexpressionapplicationprocedurecondition.Serviceobjectrenewalapplicationprocedurecondition.ActionFormbeaninconversationlevelorrequestlevelexpressionmodelconditionbutisnotinthelastinglevel.TheJSPdocumentusesJSPtomarkthereadfromtheActionFormbeaninformation.ViewviewtheviewisaJSPdocument.Anddoesnothavetheflowlogicdoesnothavetheservicelogicalsodoesnothavethemodelinformation--Onlythenmarks.ThemarkcausesStrutsisdifferentwithotherframesforexampleVelocityoneoffactors.JustliketheStrutscontrolleriseventusuallyisHTTPpostmapstheeventkindofservlet.youtoexpect-theair-operatedcontrolleruseconfigurationfilestocauseyounottoneedtocarryontothesevaluesthehardcode.Thetimehaschangedbutmethodasbefore.TheActionkindActionFormmaintainstheWebapplicationproceduretheconversationcondition.ActionFormisoneabstractclassmustfoundthiskindofsubclassforeachinputformmodel.WhenIsaidwheninputformmodelwhatreferstotheActionFormexpressionisestablishesorintherenewalgeneralsensedatabytheHTMLform.TheActionkindisservicelogicpacking.AActionkindofuseistransformsHttpServletRequestintotheservicelogic.MustuseActionpleasefounditssubclassandcoversprocessthemethod.ActionServletCommandwilluseperformthemethodtheparametrizationkindtotransmitforActionForm.Stilldidnothavetoomanyrepugnantrequest.getParametertotransfer.WhentheeventprogressestothissteptheinputformdataorHTMLformdatahasbeenwithdrawnfromtherequestclassandshiftstotheActionFormkind.ConsideredthataActionkindofanotherwayistheAdapterdesignpattern.TheActionusewillbe“akindofconnectionwilltransformanotherconnectionwhichwillneedfortheclient.AdapterenablesthekindthejointoperationifdoesnothaveAdapterthenthesekindswillbeunablebecauseoftheincompatibleconnectionthejointoperation.”.InthisexamplesclientisActionServletitknowsnothingabouttoourconcreteserviceclassconnection.ThereforeStrutshasprovidedaserviceconnectionwhichitcanunderstandnamelyAction.ThroughexpandsActionwecauseourserviceconnectionandtheStrutsserviceconnectionmaintaincompatible.5CSSsynopsisTheCSSeditionmethodisthesamewithHTMLmayalsobeanytexteditororthehomepageeditionsoftwarebutalsohasusesfortoeditCSSspeciallythesoftware.IfyouwritetheCSSsentenceregardstheexteriorcascadingstylesheetbuttransfersintheHTMLdocumentthenitsextensionsaves.csstobepossible.InitiallythetechnicalpersonnelfoundoutHTMLmainlystressesonthedefinitioncontentforinstanceexpressedthataparagraphindicatesthetitlebutexcessivelyhasnotdesignedHTMLthetypesettingandthecontactsurfaceeffect.AlongwiththeInternetrapiddevelopmentHTMLiswidelyappliedthesurferpeoplehopedcertainlythatthehomepagemakesattractivethereforetheHTMLtypesettingandthecontactsurfaceeffectslimitationexposesdaybyday.InordertosolvethisproblemthepeoplealsotookmanytortuouspathshasusedsomenotgoodmethodforinstanceincreasesmanyattributeresultstoHTMLbecomesthecodeveryextremelyfatturnsthepicturethetextexcessivelymanycomesthetypesettingusingTableexpressesthewhitespacewiththeblankpictureandsoon.AppearsuntilCSS.CSSmaybeahomepagedesignbreakthroughithassolvedthehomepagecontactsurfacetypesettingdifficultproblem.MaysuchsaythatHTMLTagismainlydefinesthehomepagecontentContentbutCSSdecidedhowthesehomepagecontentdoesdemonstrateLayout.TheCSSEnglishisCascadingStyleSheetsChinesemaytranslatethetandemcascadingstylesheet.CSSmaydivideintothreekindsaccordingtoitsposition:IninlaysthestyleInlineStyleinternalcascadingstylesheetInternalStyleSheetexteriorcascadingstylesheetExternalStyleSheet.6HTMLfunctionsynopsisHyperTextMarkuptheLanguagehypertextmarklanguageisonekindusesfortomanufacturethehypertextdocumentsthesimplemarklanguage.ThehypertextdocumentswhichcompileswithHTMLarecalledtheHTMLdocumentsitcantheindependenceineachkindofoperatingsystemplatformforexampleUNIXWINDOWSandsoon.HTMLhasservedassince1990onWorldWideWebtheinformationtoexpressthelanguageusesindescribingtheHomepageformdesignanditandonWWWtheotherHomepagelinkedinformation.TheHTMLdocumentsi.e.theHomepagesourcedocumentwasonehaslaidasidethemarkASCIItextdocumentusuallyithad.htmlorthe.htmdocumentextension.ProducesHTMLdocumentsmainlytohavethefollowingthreeways:
1.themanualdirectcompilatione.g.ASCIItexteditorwhichorotherHTMLeditiontoollikeswithyou.
2.willhaveotherformdocumentsthroughcertainformatconversiontoolforexampletheWORDdocumentstotransformtheHTMLdocuments.
3.bytheWebserverorsaidthattheHTTPserveroneonlythenreal-timedynamicproduces.theHTMLlanguageisthroughuseseachkindofmarktagstomarkthedocumentsthestructureaswellasmarkstheultrachainHyperlinktheinformation.AlthoughtheHTMLlanguagedescribedthedocumentsstructureformbuthowcantdefinethedocumentsinformationtopreciselydemonstrateandarrangebutisonlysuggestedhowtheWebbrowserforexampleMosiacNetscapeandsoonshoulddemonstrateandarrangetheseinformationisdecidedfinallyinfrontofusersdemonstrationresultbytheWebbrowsersdemonstrationstyleandtothemarkexplanatoryability.Whyistheidenticaldocumentstheeffectwhichdemonstratedinthedifferentbrowsermeetsisdissimilar.AtpresenttheHTMLlanguageseditionis
2.0itisbasedonSGMLStandardGeneralizedMarkupLanguagestandardsetsatsignlanguagegenerallyassoonasisappliesmechanicallydescribesdigitizeddocumentsstructureandmanagesitscontentcomplexstandardasubsettoevolvecomes.AlthoughinnexteditionsstandardHTML
3.0isalsocalledHTML+todrawupbutsomethepartialexperimentalnaturedraftstandardwidelyhasbeenusedthemostlyoutstandingWebbrowserforexampleNetscapeandsooncanexplainintheHTML
3.0partnewmarkthereforeintroducedinthischaptersomeHTML
3.0newmarkhasbeenacceptedbythemostbrowsers.7JsscriptlanguagesynopsisJSisjavascripJavascriptisonekindthescriptlanguagewhichcomesbytheNetscapeLiveScriptdevelopmentthemainpurposeistosolvetheserverterminallanguageforinstancePerlcarry-overspeedquestion.Atthattimeservedtheendtoneedtocarryontheconfirmationtothedatabecausethenetworkspeedwasquiteslowonlythen
28.8kbpstheconfirmationstepwastestimeweretoomany.ThereforeNetscapebrowserNavigatorhasjoinedJavascripthasprovidedthedataconfirmationbasicfunction.TheJavaScriptofficialnameis“ECMAScript”.ThisstandardbyECMAorganizationdevelopmentandmaintenance.ECMA-262istheofficialJavaScriptstandard.ThisstandardbasedonJavaScriptNetscapeandJScriptMicrosoft.NetscapeNavigator
2.0BrendanEichhasinventedthislanguagestartedfrom1996alreadyappearedinallNetscapeandintheMicrosoftbrowser.TheECMA-262developmentbeganin1996in1997JulytheECMAgeneralmeetinghasaccepteditsfirstedition.Scriptscriptusesonespecificdescriptivelanguagerestsoncertainformcompilationtobepossibletheexecutiondocumentisalsocalledasgreatorthebatchrundocument.Thescriptusuallymaytransfertemporarilybytheapplicationprocedureandcarryout.Eachkindofscriptpresentwidelyisappliedinthehomepagedesignbecausethescriptnotonlymayreducethehomepagethescaleandraisesthehomepagebrowsingspeedmoreovermayenrichthehomepageperformancelikeanimationsoundandsoon.CitesamostcommonexamplewhenweclickinthehomepagetheE-mailaddresscantransferOutlookExpressortheFoxmailthiskindofmailsoftwareautomaticallyisrealizesthroughthescriptfunction.Alsobecauseofscriptthesecharacteristicsthehumanwhoharborsulteriormotivesbysomeareoftenusing.Forexamplejoinssomedestructioncomputersystemsorderinthescriptlikethisworksastheuserbrowsinghomepageoncetransfersthiskindofscriptwillthencausetheuserthesystemtocomeundertheattack.Thereforetheusershouldactaccordingtovisitshomepagethetrustdegreeselectivesecurityrankspeciallyregardingtheseitselfcontentontheillegalhomepagedonotpermittheusescripteasily.Through“thesafeestablishment”thedialogboxthechoice“thescript”underoptioneachkindofestablishmentmaywitheaserealizetoscriptbeingforbidandbeginsusing.Presentsscriptlanguageisquitemanyscriptlanguageexecutiongenerallyonlywithconcreteexplanationactuatorrelatedsolongasthereforeonthesystemhasthecorrespondinglanguageinterpretertobepossibletoachievethecrossplatform.ScriptScriptisincludesorderandsoonbindandaliassetsyoumaysavethissetareanindependentdocumenttheninthetimewhichneedscarriesoutlikethismayfacilitateyouintheCSuse.Thescriptmaysaveforthesuffixnamed.cfgdocumentplacesunderthecstrikefolderwhenexecutionincontrolbenchinput:execscriptfilename.cfgthen.Forinstancesavesascriptisthebuys.cfgdocumentinputsinthecontrolbench:execbuys.cfgmayrealizethefunctionwhichweneed.Mustrealizeanordersolongasisgoodthisprocessdefinitionaliasandassignsakeypositionforthisordersolongaslateraccordingtowillassignthegoodkeypositionmayrealizethisprocess.Allscriptsarerealizethroughthismethod.中文译文JSP及其WEB技术1JSP简介JSP(JavaServerPages)是一种基于Java的脚本技术是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准JSP技术有点类似ASP技术,它是在传统的网页HTML文件*.htm*.html中插入Java程序段Scriptlet和JSP标记tag,从而形成JSP文件*.jsp用JSP开发的Web应用是跨平台的,即能在Linux下运行,也能在其他操作系统上运行在JSP的众多优点之中,其中之一是它能将HTML编码从Web页面的业务逻辑中有效地分离出来用JSP访问可重用的组件,如Servlet、JavaBean和基于Java的Web应用程序JSP还支持在Web页面中直接嵌入Java代码可用两种方法访问JSP文件浏览器发送JSP文件请求、发送至Servlet的请求JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑JSP将网页逻辑与网页设计和显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序段,然后将执行结果连同JSP文件中的HTML代码一起返回给客户插入的Java程序段可以操作数据库、重新定向网页等,以实现建立动态网页所需要的功能JSP与JavaServlet一样,是在服务器端执行的,通常返回该客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览JSP页面由HTML代码和嵌入其中的Java代码所组成服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器JavaServlet是JSP的技术基础,而且大型的Web应用程序的开发需要JavaServlet和JSP配合才能完成JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点2JSP技术方法为了快速方便地进行动态网站的开发,JSP在以下几个方面做了改进,使其成为快速建立跨平台的动态网站的首选方案
2.1将内容的生成和显示进行分离用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面,并使用JSP标识或者小脚本来生成页面上的动态内容生成内容的逻辑被封装在标识和JavaBeans组件中,并且捆绑在脚本中,所有的脚本在服务器端运行由于核心逻辑被封装在标识和JavaBeans中,所以Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的生成在服务器端,JSP引擎解释JSP标识和脚本,生成所请求的内容,并且将结果以HTML(或者XML)页面的形式发送回浏览器这既有助于作者保护自己的代码,又能保证任何基于HTML的Web浏览器的完全可用性
2.2可重用组件绝大多数JSP页面依赖于可重用的、跨平台的组件(JavaBeans或者EnterpriseJavaBeans组件)来执行应用程序所要求的复杂的处理开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者和客户团体所使用基于组件的方法加速了总体开发过程,并且使得各种组织在他们现有的技能和优化结果的开发努力中得到平衡
2.3采用标识Web页面开发人员不会都是熟悉脚本语言的编程人员JSP技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容生成所需要的标准的JSP标识能够访问和实例化JavaBeans组件,设置或者检索组件属性,下载Applet,以及执行用其他方法更难于编码和耗时的功能
3.4适应平台几乎所有平台都支持Java,JSP+JavaBeans几乎可以在所有平台下通行无阻从一个平台移植到另外一个平台,JSP和JavaBeans甚至不用重新编译,因为Java字节码都是标准的与平台无关的
3.5数据库连接Java中连接数据库的技术是JDBC,Java程序通过JDBC驱动程序与数据库相连,执行查询、提取数据等操作Sun公司还开发了JDBC-ODBCbridge,利用此技术Java程序可以访问带有ODBC驱动程序的数据库,目前大多数数据库系统都带有ODBC驱动程序,所以Java程序能访问诸如Oracle、Sybase、MSSQLServer和MSAccess等数据库此外,通过开发标识库,JSP技术可以进一步扩展第三方开发人员和其他人员可以为常用功能创建自己的标识库这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来进行工作JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且能扩展到支持企业级的分布式应用中3Eclipse功能简介越来越多的Java开发人员已经开始欣赏Eclipse的JDT提供的生产率和质量收益它为Java编辑器提供了语法高亮显示、格式化、折叠、内容辅助、代码模板等许多功能它不断增长的可用重构和代码生成功能集合允许您在更高的级别上操作代码,并自动化通常的代码密集型任务和易错任务而且,在开发完代码并使用JDT对编写和执行JUnit测试的内置支持对代码进行单元测试之后,可以使用Eclipse的一流Java调试器调试在运行时遇到的任何问题除了JDT之外,EclipseSDK—最流行的Eclipse.org下载—还包含Plug-inDevelopmentEnvironmentPDEPDE使用特定功能扩展了JDT以构建Eclipse插件—基于Eclipse的应用程序的基本构造块事实上,使用由Eclipse本身提供的工具能够超越Java开发,可扩展现有Eclipse应用程序,或者甚至创建全新的应用程序Eclipse由一个小程序层构成,其中包含许多功能模块或Eclipse术语中所谓的“插件”插件是在Eclipse应用程序中提供所有功能的组件它们通过其API一起协作来交付最终结果在Eclipse中,甚至最基础的功能,比如查找和启动安装的插件,都封装在插件中为了扩展现有Eclipse功能或在其上进行构建,插件将具体的扩展贡献给由其他插件暴露的扩展点通常,插件专注于特定区域的责任,并通过一个或多个扩展点的方式将其他责任指派给其他插件例如,一个插件允许您可视地并行比较两个文件的内容,但它不会关心如何读取这些文件甚至如何解释这些文件的结构;这是其他插件的工作比较两个文件时,该插件首先检查是否有另一个插件可以解释这些文件的结构如果找到一个,它就会向找到的插件询问有关文件结构的信息,并在比较过程中使用该信息可以看到,模块化架构为Eclipse提供了巨大的灵活性,并提供了一个可以支持原设计者没有预料到的大量应用程序的平台4Structs功能简介Struts是一个MVC框架(Framework)用于快速开发JavaWeb应用Struts实现的重点在CController,包括ActionServlet/RequestProcessor和我们定制的Action也为VView提供了一系列定制标签(CustomTag)Spring是一个轻型容器light-weightcontainer,其核心是Bean工厂BeanFactory,用以构造我们所需要的MModel在此基础之上,Spring提供了AOP(Aspect-OrientedProgramming面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;WebMVC和SpringWeb提供了JavaWeb应用的框架或与其他流行的Web框架进行集成就是说可将两者一起使用,达到将两者自身的特点进行互补Structs是一组相互协作的类、servlet和JSP标记,它们组成一个可重用的MVC2设计这个定义表示Struts是一个框架,而不是一个库,但Struts也包含了丰富的标记库和独立于该框架工作的实用程序类Clientbrowser(客户浏览器)来自客户浏览器的每个HTTP请求创建一个事件Web容器将用一个HTTP响应作出响应 Controller(控制器)控制器接收来自浏览器的请求,并决定将这个请求发往何处就Struts而言,控制器是以servlet实现的一个命令设计模式struts-config.xml文件配置控制器 业务逻辑业务逻辑更新模型的状态,并帮助控制应用程序的流程就Struts而言,这是通过作为实际业务逻辑“瘦”包装的Action类完成的Model(模型)的状态模型表示应用程序的状态业务对象更新应用程序的状态ActionFormbean在会话级或请求级表示模型的状态,而不是在持久级JSP文件使用JSP标记读取来自ActionFormbean的信息View(视图)视图就是一个JSP文件其中没有流程逻辑,没有业务逻辑,也没有模型信息--只有标记标记是使Struts有别于其他框架(如Velocity)的因素之一Struts的控制器是将事件(事件通常是HTTPpost)映射到类的一个servlet.正如您所料——控制器使用配置文件以使您不必对这些值进行硬编码时代变了,但方法依旧Action类ActionForm维护Web应用程序的会话状态ActionForm是一个抽象类,必须为每个输入表单模型创建该类的子类当我说输入表单模型时,是指ActionForm表示的是由HTML表单设置或更新的一般意义上的数据 Action类是业务逻辑的一个包装Action类的用途是将HttpServletRequest转换为业务逻辑要使用Action,请创建它的子类并覆盖process()方法ActionServlet(Command)使用perform()方法将参数化的类传递给ActionForm.仍然没有太多讨厌的request.getParameter()调用当事件进展到这一步时,输入表单数据(或HTML表单数据)已被从请求流中提取出来并转移到ActionForm类中考虑Action类的另一种方式是Adapter设计模式Action的用途是“将类的接口转换为客户机所需的另一个接口Adapter使类能够协同工作,如果没有Adapter,则这些类会因为不兼容的接口而无法协同工作”本例中的客户机是ActionServlet,它对我们的具体业务类接口一无所知因此,Struts提供了它能够理解的一个业务接口,即Action.通过扩展Action,我们使得我们的业务接口与Struts业务接口保持兼容5CSS简介CSS的编辑方法同HTML一样,也可以是任何文本编辑器或网页编辑软件,还有专门用来编辑CSS的软件如果你写的CSS语句是当成外部样式表而在HTML文件中调用,那它的扩展名存成.css就可当初技术人员想出HTML,主要侧重于定义内容,比如p表示一个段落h1表示标题,而并没有过多设计HTML的排版和界面效果随着Internet的迅猛发展,HTML被广泛应用,上网的人们当然希望网页做得漂亮些,因此HTML排版和界面效果的局限性日益暴露出来为了解决这个问题,人们也走了不少弯路,用了一些不好的方法,比如给HTML增加很多的属性结果将代码变得很臃肿,将文本变成图片,过多利用Table来排版,用空白的图片表示白色的空间等直到CSS出现CSS可算是网页设计的一个突破,它解决了网页界面排版的难题可以这么说,HTML的Tag主要是定义网页的内容Content,而CSS决定这些网页内容如何显示LayoutCSS的英文是CascadingStyleSheets,中文可以翻译成串联式样式表CSS按其位置可以分成三种内嵌样式InlineStyle,内部样式表InternalStyleSheet,外部样式表ExternalStyleSheet6HTML功能简介HyperTextMarkupLanguage超文本标记语言是一种用来制作超文本文档的简单标记语言用HTML编写的超文本文档称为HTML文档,它能独立于各种操作系统平台(如UNIX,WINDOWS等)自1990年以来HTML就一直被用作WorldWideWeb上的信息表示语言,用于描述Homepage的格式设计和它与WWW上其它Homepage的连结信息HTML文档(即Homepage的源文件)是一个放置了标记的ASCII文本文件,通常它带有.html或.htm的文件扩展名生成一个HTML文档主要有以下三种途径
1.手工直接编写(例如用你所喜爱的ASCII文本编辑器或其它HTML的编辑工具)
2.通过某些格式转换工具将现有的其它格式文档(如WORD文档)转换成HTML文档
3.由Web服务器(或称HTTP服务器)一方实时动态地生成HTML语言是通过利用各种标记(tags)来标识文档的结构以及标识超链(Hyperlink)的信息虽然HTML语言描述了文档的结构格式,但并不能精确地定义文档信息必须如何显示和排列,而只是建议Web浏览器(如Mosiac,Netscape等)应该如何显示和排列这些信息,最终在用户面前的显示结果取决于Web浏览器本身的显示风格及其对标记的解释能力这就是为什么同一文档在不同的浏览器中展示的效果会不一样目前HTML语言的版本是
2.0,它是基于SGML(StandardGeneralizedMarkupLanguage,标准广义置标语言,是一套用来描述数字化文档的结构并管理其内容的复杂的规范)中的一个子集演变而来的虽然下一版本的标准HTML
3.0(也称为HTML+)正在制订之中,但其中某些部分的实验性标准草案已被广泛采用,大多优秀的Web浏览器(如Netscape等)都能解释HTML
3.0中的部分新标记,因此在本章中介绍的一些HTML
3.0新标记均已被多数浏览器所接受7Js脚本语言简介JS即javascrip,Javascript是一种由Netscape的LiveScript发展而来的脚本语言,主要目的是为了解决服务器终端语言,比如Perl,遗留的速度问题当时服务端需要对数据进行验证,由于网络速度相当缓慢只有
28.8kbps,验证步骤浪费的时间太多于是Netscape的浏览器Navigator加入了Javascript,提供了数据验证的基本功能JavaScript的正式名称是ECMAScript这个标准由ECMA组织发展和维护ECMA-262是正式的JavaScript标准这个标准基于JavaScriptNetscape和JScriptMicrosoftNetscapeNavigator
2.0的BrendanEich发明了这门语言,从1996年开始,已经出现在所有的Netscape和Microsoft浏览器中ECMA-262的开发始于1996年,在1997年7月,ECMA会员大会采纳了它的首个版本脚本script是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件脚本通常可以由应用程序临时调用并执行各类脚本目前被广泛地应用于网页设计中,因为脚本不仅可以减小网页的规模和提高网页浏览速度,而且可以丰富网页的表现,如动画、声音等举个最常见的例子,当我们点击网页上的E-mail地址时能自动调用OutlookExpress或Foxmail这类邮件软件,就是通过脚本功能来实现的也正因为脚本的这些特点,往往被一些别有用心的人所利用例如在脚本中加入一些破坏计算机系统的命令,这样当用户浏览网页时,一旦调用这类脚本,便会使用户的系统受到攻击所以用户应根据对所访问网页的信任程度选择安全等级,特别是对于那些本身内容就非法的网页,更不要轻易允许使用脚本通过“安全设置”对话框,选择“脚本”选项下的各种设置就可以轻松实现对脚本的禁用和启用现在的脚本语言是比较多的,一般的脚本语言的执行只同具体的解释执行器有关,所以只要系统上有相应语言的解释程序就可以做到跨平台脚本Script,就是含有bind和alias等命令的集合,你可以把这个集合存为一个独立的文件然后在需要的时候执行,这样就可以方便你在CS中的使用脚本可以存为后缀名为.cfg的文件放在cstrike文件夹下,执行时在控制台输入exec(脚本文件名).cfg即可比如将一个脚本存为buys.cfg文件,则在控制台中输入execbuys.cfg则可以实现我们所需要的功能要实现一个命令只要把这一过程定义alias好,并且分配一个键位给这个命令,以后只要按分配好的键位,就可以实现这一过程所有的脚本都是通过这一方法实现的附录A:源程序代码系统管理员相关操作实现代码如下publicclassAdminServiceImplextendsBaseLogimplementsAdminService{publicAdminadminLoginStringloginNameStringloginPwdthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Adminadmin=null;try{Stringhql=selectafromAdminasawherea.loginName=:loginNameanda.loginPwd=:loginPwd;Queryquery=session.createQueryhql;query.setStringloginNameloginName;query.setStringloginPwdloginPwd;query.setMaxResults1;tx=session.beginTransaction;admin=Adminquery.uniqueResult;tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行AdminServiceImpl类中的adminLogin方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnadmin;}publicbooleanaddAdminAdminadminthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{tx=session.beginTransaction;session.saveadmin;tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行AdminServiceImpl类中的addAdmin方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}publicbooleandelAdminIntegeridthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{tx=session.beginTransaction;Adminadmin=Adminsession.loadAdmin.classid;session.deleteadmin;tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行AdminServiceImpl类中的delAdmin方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}publicbooleanupdateAdminAdminadminthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{tx=session.beginTransaction;session.updateadmin;tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行AdminServiceImpl类中的updateAdmin方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}}购物车相关操作实现代码如下publicclassCartServiceImplextendsBaseLogimplementsCartService{publicbooleanaddCartMembermemberMerchandisemerintnumberthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{Cartselectedmersel=null;intfavourable=member.getMemberlevel.getFavourable.intValue;Stringhql=fromCartasawherea.member=:memberanda.cartStatus=0;Queryquery=session.createQueryhql;query.setEntitymembermember;query.setMaxResults1;tx=session.beginTransaction;Cartcart=Cartquery.uniqueResult;ifcart==null{cart=newCart;cart.setCartStatusnewInteger0;cart.setMembermember;cart.setMoneyDouble.valueOfnumber*mer.getPrice.doubleValue;cart.getMerchandises.addmer;session.savecart;}else{hql=selectafromCartselectedmerasawherea.cart=:cartidanda.merchandise=:meridorderbya.iddesc;query=session.createQueryhql;query.setIntegercartidcart.getId.intValue;query.setIntegermeridmer.getId.intValue;query.setMaxResults1;sel=Cartselectedmerquery.uniqueResult;inttotal=number;System.out.printlntotal*mer.getPrice.doubleValue*favourable/100;ifsel!=null{total=number+sel.getNumber.intValue;sel.setNumberInteger.valueOftotal;ifmer.getSpecial.intValue==1{sel.setPricemer.getSprice;sel.setMoneyDouble.valueOftotal*mer.getSprice.doubleValue;}else{sel.setPriceDouble.valueOfmer.getPrice.doubleValue*favourable/100;sel.setMoneyDouble.valueOftotal*mer.getPrice.doubleValue*favourable/100;}session.updatesel;}else{cart.getMerchandises.addmer;}ifmer.getSpecial.intValue==1{cart.setMoneyDouble.valueOfcart.getMoney.doubleValue+number*mer.getSprice.doubleValue;}else{cart.setMoneyDouble.valueOfcart.getMoney.doubleValue+number*mer.getPrice.doubleValue*favourable/100;}session.updatecart;}tx.commit;ifsel==null{tx=session.beginTransaction;hql=selectafromCartselectedmerasawherea.cart=:cartidanda.merchandise=:meridorderbya.iddesc;query=session.createQueryhql;query.setIntegercartidcart.getId.intValue;query.setIntegermeridmer.getId.intValue;query.setMaxResults1;sel=Cartselectedmerquery.uniqueResult;ifsel!=null{sel.setNumberInteger.valueOfnumber;ifmer.getSpecial.intValue==1{sel.setPricemer.getSprice;sel.setMoneyDouble.valueOfnumber*mer.getSprice.doubleValue;}else{sel.setPriceDouble.valueOfmer.getPrice.doubleValue*favourable/100;sel.setMoneyDouble.valueOfnumber*mer.getPrice.doubleValue*favourable/100;}session.updatesel;}tx.commit;}status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行CartServiceImpl类中的addCart方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}publicListbrowseCartMembermemberthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listresult=null;try{Integercartid=newInteger0;Stringhql=fromCartasawherea.member=:memberanda.cartStatus=0;Queryquery=session.createQueryhql;query.setEntitymembermember;query.setMaxResults1;tx=session.beginTransaction;Cartcart=Cartquery.uniqueResult;ifcart!=null{cartid=cart.getId;}tx.commit;hql=fromCartselectedmerasawherea.cart=:cartid;query=session.createQueryhql;query.setIntegercartidcartid.intValue;tx=session.beginTransaction;result=query.list;if!Hibernate.isInitializedresult{Hibernate.initializeresult;}tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行CartServiceImpl类中的browseCart方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnresult;}publicbooleanclearCartMembermemberthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{Integercartid=newInteger0;Stringhql=fromCartasawherea.member=:memberanda.cartStatus=0;Queryquery=session.createQueryhql;query.setEntitymembermember;query.setMaxResults1;tx=session.beginTransaction;Cartcart=Cartquery.uniqueResult;ifcart!=null{cartid=cart.getId;cart.setMoneyDouble.valueOf0;session.updatecart;}tx.commit;Connectioncon=session.connection;Statementstat=con.createStatement;Stringsql=deletefromCartselectedmerwherecart=+cartid;tx=session.beginTransaction;stat.executeUpdatesql;tx.commit;ifstat!=nullstat.close;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行CartServiceImpl类中的clearCart方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}publicbooleandelCartIntegeridthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{doublemoney=0;Integercartid=newInteger0;tx=session.beginTransaction;Cartselectedmersel=Cartselectedmersession.getCartselectedmer.classid;ifsel!=null{money=sel.getMoney.doubleValue;cartid=sel.getCart;session.deletesel;}tx.commit;tx=session.beginTransaction;Cartcart=Cartsession.getCart.classcartid;ifcart!=null{cart.setMoneyDouble.valueOfcart.getMoney.doubleValue-money;session.updatecart;}tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行CartServiceImpl类中的delCart方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}}会员相关操作实现代码如下publicclassMemServiceImplextendsBaseLogimplementsMemService{publicListbrowseMemberLevelthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryfromMemberlevelasaorderbya.id;tx=session.beginTransaction;list=query.list;tx.commit;if!Hibernate.isInitializedlistHibernate.initializelist;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MemServiceImpl类中的browseMemberLevel方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}publicbooleanchkLoginNameStringloginNamethrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanresult=true;try{Stringhql=selectcount*fromMemberasawherea.loginName=:loginName;Queryquery=session.createQueryhql;query.setStringloginNameloginName;query.setMaxResults1;tx=session.beginTransaction;ifIntegerquery.uniqueResult.intValue0result=false;tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MemServiceImpl类中的chkLoginName方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnresult;}publicMemberlevelloadMemberLevelIntegeridthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Memberlevellevel=null;try{tx=session.beginTransaction;level=Memberlevelsession.getMemberlevel.classid;tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MemServiceImpl类中的loadMemberLevel方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlevel;}publicbooleanupdateMemberMembermemberthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanresult=false;try{tx=session.beginTransaction;session.updatemember;tx.commit;result=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MemServiceImpl类中的updateMember方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnresult;}publicListbrowseMemberthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryfromMemberasaorderbya.id;tx=session.beginTransaction;list=query.list;tx.commit;if!Hibernate.isInitializedlistHibernate.initializelist;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MemServiceImpl类中的browseMember方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}publicbooleandelMemberIntegeridthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{tx=session.beginTransaction;Membermember=Membersession.loadMember.classid;session.deletemember;tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MemServiceImpl类中的delMember方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}publicMemberloadMemberIntegeridthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Membermember=null;try{tx=session.beginTransaction;member=Membersession.getMember.classid;tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MemServiceImpl类中的loadMember方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnmember;}}对商品的相关操作实现代码如下publicclassMerServiceImplextendsBaseLogimplementsMerService{publicbooleanaddCategoryCategorycatethrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{tx=session.beginTransaction;session.savecate;tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MerServiceImpl类中的addCategory方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}publicListbrowseCategorythrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryfromCategoryasaorderbya.id;tx=session.beginTransaction;list=query.list;tx.commit;if!Hibernate.isInitializedlistHibernate.initializelist;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MerServiceImpl类中的browseCategory方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}publicListbrowseMerStringhqlthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryhql;tx=session.beginTransaction;list=query.list;tx.commit;if!Hibernate.isInitializedlistHibernate.initializelist;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MerServiceImpl类中的browseMer方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}publicbooleandelMerIntegeridthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{tx=session.beginTransaction;Merchandisemer=Merchandisesession.loadMerchandise.classid;session.deletemer;tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MerServiceImpl类中的delMer方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}publicListbrowseMerintpageSizeintpageNointcateIdbooleanisSpecialthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Stringhql=fromMerchandiseasa;ifisSpecial{//特价商品hql=hql+wherea.special=1;}else{//普通商品hql=hql+wherea.special=0;}ifcateId!=0{//指定类别hql=hql+anda.category.id=+cateId;}hql=hql+orderbya.iddesc;Queryquery=session.createQueryhql;query.setMaxResultspageSize;query.setFirstResultpageNo-1*pageSize;tx=session.beginTransaction;list=query.list;tx.commit;if!Hibernate.isInitializedlistHibernate.initializelist;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MerServiceImpl类中的browseMer方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}publicListbrowseMerintpageSizeintpageNoStringhqlthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryhql;query.setMaxResultspageSize;query.setFirstResultpageNo-1*pageSize;tx=session.beginTransaction;list=query.list;tx.commit;if!Hibernate.isInitializedlistHibernate.initializelist;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行MerServiceImpl类中的browseMer方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}}对订单的相关操作实现代码如下publicclassOrderServiceImplextendsBaseLogimplementsOrderService{publicbooleanaddOrderOrdersorderthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{tx=session.beginTransaction;session.saveorder;tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行OrderServiceImpl类中的addOrder方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}publicListbrowseOrderMembermemberthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryfromOrdersasawherea.member=:member;tx=session.beginTransaction;query.setEntitymembermember;list=query.list;if!Hibernate.isInitializedlistHibernate.initializelist;tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行OrderServiceImpl类中的browseOrder方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}publicListbrowseOrderthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryfromOrdersasaorderbya.iddesc;tx=session.beginTransaction;list=query.list;if!Hibernate.isInitializedlistHibernate.initializelist;tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行OrderServiceImpl类中的browseOrder方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}publicListbrowseOrderMerCartcartthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listresult=null;try{Stringhql=fromCartselectedmerasawherea.cart=:cartid;Queryquery=session.createQueryhql;query.setIntegercartidcart.getId.intValue;tx=session.beginTransaction;result=query.list;if!Hibernate.isInitializedresult{Hibernate.initializeresult;}tx.commit;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行OrderServiceImpl类中的browseOrderMer方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnresult;}publicbooleanupdateOrderOrdersorderthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{tx=session.beginTransaction;session.updateorder;tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行OrderServiceImpl类中的updateOrder方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}}对留言信息的相关操作实现代码如下publicclassWordServiceImplextendsBaseLogimplementsWordService{publicbooleanaddWordLeavewordwordthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{tx=session.beginTransaction;session.saveword;tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行WordServiceImpl类中的addWord方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}publicListbrowseWordintpageSizeintpageNothrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;Listlist=null;try{Queryquery=session.createQueryfromLeavewordasaorderbya.iddesc;query.setMaxResultspageSize;query.setFirstResultpageNo-1*pageSize;tx=session.beginTransaction;list=query.list;tx.commit;if!Hibernate.isInitializedlistHibernate.initializelist;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行WordServiceImpl类中的browseWord方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnlist;}publicbooleanupdateWordLeavewordwordthrowsException{Sessionsession=MySessionFactory.getSession;Transactiontx=null;booleanstatus=false;try{tx=session.beginTransaction;session.updateword;tx.commit;status=true;}catchExceptionex{iftx!=nulltx.rollback;logger.info在执行WordServiceImpl类中的updateWord方法时出错\n;ex.printStackTrace;}finally{MySessionFactory.closeSession;}returnstatus;}}、附录B:系统使用说明书1)软件简介该电子商务网上书店系统实现了会员注册、登录、浏览图书信息、购买图书、购物车管理、订单管理、图书搜索等操作,也实现了管理员通过后台管理界面对商品、订单、会员等的管理工作通过本系统可以让用户方便快速购买到种类繁多,价廉质优的图书,同时也可以为用户节省大量的时间和金钱,让用户获得大量的书籍信息另外,该系统也可以让卖家在网上能以全新的模式销售图书,在有效控制成本的同时,大幅提升销售量,并且不受地域与时间的限制2)软件的运行环境和安装软件运行环境本软件通过java语言开发,对系统平台没有依赖性,可以适用于Windows,Linux等各种平台软件安装步骤第一步启动计算机第二步将给定War包拷贝到Tomcatwebapps文件夹下第三步在Tomcatbin文件夹下,双击startup.bat命令启动Tomcat服务器第四步在浏览器中输入http://localhost:8080/EShop_04/即可访问会员页面输入http://localhost:8080/EShop_04/Admin/adminLogin.jsp即可访问管理员页面3)MySQL
5.5中数据库环境的建立使用前,要先将数据库在SQLyogEnterprise中还原具体步骤如下第一步打开SQLyogEnterprise,将给定SQL文件——db_eshop.sql文件拷贝到Query窗口;第二步点击“ExecuteAllQueries”按钮,系统将自动创建本系统所需的数据库及数据表等;4)用户登录普通用户登录http://localhost:8080/EShop_04/或者http://localhost:8080/EShop_04/mer.domethod=browseIndexMer普通会员—————————UserName1Password:1黄金会员—————————UserName2Password:2白金会员—————————UserName3Password:3钻石会员—————————UserName4Password:4钻石会员—————————UserName sxdPassword:sxd管理员登录http://localhost:8080/EShop_04/Admin/adminLogin.jsp商品管理员------------------UserName Admin1Password:Admin1订单管理员------------------UserName Admin2Password:Admin2会员管理员------------------UserName Admin3Password:Admin3系统管理员------------------UserName Admin4Password:Admin4学位论文原创性声明本人郑重声明所呈交的学位论文,是本人在导师的指导下进行的研究工作所取得的成果尽我所知,除文中已经特别注明引用的内容和致谢的地方外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式注明并表示感谢本人完全意识到本声明的法律结果由本人承担学位论文作者(本人签名)年月日学位论文出版授权书本人及导师完全同意《中国博士学位论文全文数据库出版章程》、《中国优秀硕士学位论文全文数据库出版章程》以下简称“章程”,愿意将本人的学位论文提交“中国学术期刊(光盘版)电子杂志社”在《中国博士学位论文全文数据库》、《中国优秀硕士学位论文全文数据库》中全文发表和以电子、网络形式公开出版,并同意编入CNKI《中国知识资源总库》,在《中国博硕士学位论文评价数据库》中使用和在互联网上传播,同意按“章程”规定享受相关权益论文密级□公开□保密(___年__月至__年__月)保密的学位论文在解密后应遵守此协议作者签名_______导师签名______________年_____月_____日_______年_____月_____日独创声明本人郑重声明所呈交的毕业设计论文,是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议尽我所知,除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品成果对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明本声明的法律后果由本人承担 作者签名:二〇一〇年九月二十日 毕业设计(论文)使用授权声明本人完全了解滨州学院关于收集、保存、使用毕业设计(论文)的规定本人愿意按照学校要求提交学位论文的印刷本和电子版,同意学校保存学位论文的印刷本和电子版,或采用影印、数字化或其它复制手段保存设计(论文);同意学校在不以营利为目的的前提下,建立目录检索与阅览服务系统,公布设计(论文)的部分或全部内容,允许他人依法合理使用(保密论文在解密后遵守此规定) 作者签名:二〇一〇年九月二十日致谢时间飞逝,大学的学习生活很快就要过去,在这四年的学习生活中,收获了很多,而这些成绩的取得是和一直关心帮助我的人分不开的首先非常感谢学校开设这个课题,为本人日后从事计算机方面的工作提供了经验,奠定了基础本次毕业设计大概持续了半年,现在终于到结尾了本次毕业设计是对我大学四年学习下来最好的检验经过这次毕业设计,我的能力有了很大的提高,比如操作能力、分析问题的能力、合作精神、严谨的工作作风等方方面面都有很大的进步这期间凝聚了很多人的心血,在此我表示由衷的感谢没有他们的帮助,我将无法顺利完成这次设计首先,我要特别感谢我的知道郭谦功老师对我的悉心指导,在我的论文书写及设计过程中给了我大量的帮助和指导,为我理清了设计思路和操作方法,并对我所做的课题提出了有效的改进方案郭谦功老师渊博的知识、严谨的作风和诲人不倦的态度给我留下了深刻的印象从他身上,我学到了许多能受益终生的东西再次对周巍老师表示衷心的感谢其次,我要感谢大学四年中所有的任课老师和辅导员在学习期间对我的严格要求,感谢他们对我学习上和生活上的帮助,使我了解了许多专业知识和为人的道理,能够在今后的生活道路上有继续奋斗的力量另外,我还要感谢大学四年和我一起走过的同学朋友对我的关心与支持,与他们一起学习、生活,让我在大学期间生活的很充实,给我留下了很多难忘的回忆最后,我要感谢我的父母对我的关系和理解,如果没有他们在我的学习生涯中的无私奉献和默默支持,我将无法顺利完成今天的学业四年的大学生活就快走入尾声,我们的校园生活就要划上句号,心中是无尽的难舍与眷恋从这里走出,对我的人生来说,将是踏上一个新的征程,要把所学的知识应用到实际工作中去回首四年,取得了些许成绩,生活中有快乐也有艰辛感谢老师四年来对我孜孜不倦的教诲,对我成长的关心和爱护学友情深,情同兄妹四年的风风雨雨,我们一同走过,充满着关爱,给我留下了值得珍藏的最美好的记忆在我的十几年求学历程里,离不开父母的鼓励和支持,是他们辛勤的劳作,无私的付出,为我创造良好的学习条件,我才能顺利完成完成学业,感激他们一直以来对我的抚养与培育最后,我要特别感谢我的导师赵达睿老师、和研究生助教熊伟丽老师是他们在我毕业的最后关头给了我们巨大的帮助与鼓励,给了我很多解决问题的思路,在此表示衷心的感激老师们认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我以后的工作和学习都有一种巨大的帮助,感谢他耐心的辅导在论文的撰写过程中老师们给予我很大的帮助,帮助解决了不少的难点,使得论文能够及时完成,这里一并表示真诚的感谢数据的源点/终点变换数据的处理数据存储数据流。