




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
黄山学院2014届本科毕业生论文2/70本科生毕业论文(2014届)题目:电子产品交易系统网站设计学院:数学与统计学院专业:数学与应用数学学生姓名:何志鹏学号:21005012017指导教师:方辉平职称(学位):副教授合作导师:职称(学位):完成时间:2014年5月3日成绩:黄山学院教务处制摘要互联网伴随着社会经济的飞速发展,网络在中国的发展同样十分迅速,人们日常生活中越来越多地使用这项新的技术来为自己的工作和学习服务,其中电子交易就是我们十分熟知的一种网络应用。二十一世纪是一个集网络化,信息化,数字化的,以网络为核心的社会。越来越多的人已经开始想到建立完善的网上购物系统,网上购物和传统购物相比优点十分明显。什么是电子交易?电子交易是指利用简单、快捷、低成本的电子通讯方式,买卖双方通过网络进行各种商贸活动的一种商业交易模式本次毕业设计的题目就是设计并且实现一个基于web技术的在线电子产品交易系统网站。在本次设计开发中主要以j2EE作为开发基础,使用了Struts2+Hibernate+Oracle等多种协议或技术,用HTML+CSS作为开发工具和界面美化工具,在功能方面也基本实现了电子商务网站应有的几个基本功能模块包括:用户的登录、用户注册、登录、注销、购物车管理、订单管理,而且页面设计简单、容易操作,便于维护。关键词:JSP,J2EE,Struts2,Hibernate,Oracle,Tomcat.
ABSTRACTWiththedevelopmentofInternetandthedevelopmentofsocialeconomy,asChina'srapideconomicdevelopmentofnetworktechnologyinChina'srapiddevelopmentequally,people'sdailylivesareincreasinglyusingthisnewtechnologytoworkforyourselfandlearningservices,whichisanelectronictradingnetworkweareveryfamiliarwiththeapplication.The21stcenturyisasetofnetworking,informationtechnology,digital,network-centricsociety.Moreandmorepeoplehavebeguntothinkofonlineshoppingsystemtoestablishasound,onlineshoppingandobviousadvantagescomparedtotraditionalshopping.Whatiselectronictrading?Electronictradingistheuseofsimple,fast,low-costmeansofelectroniccommunication,bothbuyersandsellerstoconductvariousbusinessactivitiesthroughanetworkofacommercialtransactionmodelthisgraduationprojecttopicistodesignandimplementaweb-basedonlineelectronictradingtechnologysystemwebsite.Inthisdesigndevelopmentj2EEmainlyasadevelopmentfoundation,usingStruts2+Hibernate+Oracle,andotheragreementsortechnology,usingHTML+CSSasadevelopmenttoolandinterfacelandscapingtools,intermsoffunctionalitybutalsothebasicrealizationofe-commercesitesshouldsomefewbasicfunctionmodulesinclude:userlogin,userregistration,login,logout,shoppingcartmanagement,ordermanagement,andpagedesignissimple,easytooperate,easytomaintain.Keywords:JSP,J2EE,Struts2,Hibernate,Oracle,Tomcat.
目录摘要 1Abstract 2目录 31绪论 52开发环境及开发工具的介绍 62.1系统运行环境 62.2关于Java语言及相关技术描述 62.2.1Java语言特点概述 62.2.2JavaBeans组件技术特点概述 62.2.3CSS样式及HEML标签 62.2.4Session监听和Servlet技术概述 62.3关于JDK和Tomcat的安装及配置 122.4Oracle数据库 102.4.1oracle的特点 112.4.1oracle数据库的安装及配置 112.5JSP简介 72.5.1JSP的基本语法 112.5.1JSP的内置对象及状态管理 112.6JavaScript概述 72.7J2EE概述 83Struts2简介 133.1Struts2的简介 133.2Struts2的工作机制 134Hibernate数据库编程 134.1hibernate编程简介 134.2hibernate的优点和工作原理 134.3hibernate的工具配置 134.4hibernate的缓存机制 135电子产品交易系统网站需求分析 155.1设计思想概述 175.2网站总体设计概述 155.3系统设计及其功能需求分析 156电子产品交易系统网站的详细设计 306.1模块设计 176.2页面的具体设计 17结束语 44致谢 45参考文献 46
1绪论由于网上交易的自由,快捷,使得它成为网络用户最常使用的、最热门的网络服务之一。本系统的目的就是为用户提供一个简易的网上交易系统。利用本系统,用户可以自由地浏览商品,注册成为网站会员,选择商品生成订单,实现网上购物,本系统遵循软件j2EE标准,运用Java语言,并按照软件规定地流程进行项目地开发。1.1运用Java语言的优点运用JSP+JavaBeans+struts2+tomcat技术开发,通过hibernate数据库访问技术与后台Oraclel数据库相连,实现信息的动态录入、动态查询以及动态统计,在页面开发方面使用HTML语言,CSS级联样式表,客户端开发语言JavaScript实现在客户端的页面解析,可以提高页面的解析速度可数据的传输速度。1.2Java语言的现状Java是Sun公司推出的面向对象的一门语言,Java语言相对于C,C++,来说是相对年轻的一门语言,因为年轻所以Java的发展潜力是非常大的。Java因其特别适合Internet应用程序开发所以Java是全世界使用人数最多的语言,普及度为20%左右,一直遥遥领先于其他语言。Java语言发展迅猛,因为Java结合了多种其他的客户端技术如Javascript,由于Java在数据处理方面的程序设计以及逻辑方面的程序控制方面的关键技术所以Java被用于企业,移动电话,各种信息化家用电器等方面。综合各方面Java是顺应时代发展的一门计算机语言,加上其简明严谨的结构及简洁语法编写为其将来的发展及维护提供了保障使得Java成为当代计算机行业的主流语言,所以说在预计不久的将来Java应更具实用化,规模化。
2开发环境及开发工具的介绍2.1系统运行环境1.硬件环境操作系统:Windows2000以上版本处理器:IntelPentium166MX或更高内存:128兆或更高硬盘空间:1GB显卡:SVGA显示适配器2.软件环境操作系统:Windows2000及以上操作系统(推荐),也可以使用SunSolaris等Linux操作系统Web服务器:Tomcat4.1.2或以上版本数据库:Oracle数据库(推荐),也可以使Oracle8i/Oracle9i数据库客户端:IE6.0或以上版本显示器分辨率:1024*768开发语言:JSP、Java2.2Java语言及JavaBeans组件技术概述2.2.1Java语言概述Java是由JamesGosling的团队于1991年在Sun公司设计出来的。因Java和C++有着紧密的联系,而C++则是从C语言派生而来的,所以Java语言继承了这两种语言的大部分特性。Java的面向对象的特性是其最大的优点,Java的基于对象的设计更符合人的逻辑思维。Java是目前Internet上大型WEB使用最广泛的计算机语言是网络上最流行,最热门的编程语言。2.2.2JavaBeans组件技术概述首先先了解什么是组件:组件顾名思义可以组装,也可以拆解,因为组件是模块化的产物所以在Java中运用的十分广泛,JavaBeans描述了Java的软件组件模型,这个模型被设计成使第三方厂家可以生成和销售能够集成到其他开发厂家或者其他开发人员开发的软件产品的Java组件。应用程序开发者可以使用现成的JavaBeans组件,拖放到自己的集成开发环境的工具箱中,再将其应用于应用软件的开发,这样可以大大节省开发的成本和时间,对于JavaBeans组件的内容、行为可以进行必要的修改这样就而不必重新编写和编译程序。在JavaBeans组件模型中,JavaBeans组件可以与其他的组件合并成新的组件或Java应用程序。或者我们可以吧组件理解成为我们熟知的搭积木,一个个的积木就是一个个的组件,个体之间相互独立但又相互协作,可以任意的拆解组合。Java应用程序在运行时,最终用户也可以通过JavaBeans组件设计者或应用程序开发者所建立的属性存取方法(setXXX方法和getXXX方法)修改JavaBeans组件的属性。JavaBeans组件模型的设计使得软件可以便于修改,升级和维护,每个JavaBeans组件都包含了一组属性、操作和事件处理器,因此如果要对程序的某个特性进行修改只需要对相应的组件模块进行修改就行了,而不需要动整体。因此我们就可以解释为什么用组价搭建的程序运行会更快捷,更稳定。JavaBeans是一个可以拆解复用的软件模型。JavaBeans已经在很多程序上运行过了很多次,保证了组件具体的操作性能,因此运用组件可以保证程序的安全和高效的性能。JavaBeans是建立应用程序的建筑模块。大多数常用的JavaBeans通常是中小型控制程序,但我们也可以编写包装整个应用程序运行逻辑的JavaBeans组件,并将其嵌入到复合文档中,以便实现更为复杂的功能。JavaBeans的跨平台性使得JavaBeans广泛的运用于程序的开发,简单的GUI组件可以直白的告诉我们什么是组件,例如按钮、游标、菜单组件等等,这些是简单明了的,所以我们也可以编写一些复杂、不可见的JavaBeans组件,用于接受事件和在幕后工作,例如连接数据库,执行查询、修改、更新、存储操作的JavaBeans,它们在运行时刻不需要任何可视的界面。由此可见JavaBeans组件对Java程序编写的重要性。2.2.3CSS样式及HEML标签<style>标签声明标签内为CSSHTML是一种专门用于网页设计的网络语言,CSS是指层叠样式表,通常两者是结合在一起搭建web页面。HTML不是一种编程语言而是一种标记语言,HTML使用大量的标签来设计网页。CSS样式表规定如何显示HTML标签,HTML标签放置在.HTML文档中,CSS样式表放置在.CSS文档中。HTML+CSS可以大大缩减页面代码,提高页面浏览速度,缩减带宽成本;结构清晰,容易被搜索引擎搜索到;<style>标签声明标签内为CSS模仿网站页面制作模仿网站页面制作CSS+HTML应用事例1<head><styletype="text/css">多条样式规则1.多个属性间用分号分隔2.用冒号声明对应属性值多条样式规则1.多个属性间用分号分隔2.用冒号声明对应属性值对象的属性1:属性值1;对象的属性2:属性值2;}</style></head>ID选择器CSS+HTML应用事例2ID选择器<head>类选择器<style>类选择器#nav_id{width:300px; background:#ccc;}.nav{height:100px;background:red;}div{border:5pxsolidgreen;background:blue;}标签选择器</style>标签选择器同时应用ID同时应用ID、class、标签三类选择器<body><divclass="nav"id="nav_id"><ul> <li><ahref="#">购物车</a></li></ul></div></body>2.2.4Session监听和Servlet技术概述发送请求一个session就是一系列某用户和服务器间的通讯。服务器有能力分辨出不同的用户。一个session的建立是从一个用户向服务器发第一个请求开始,而以用户显式结束或session超时为结束。用户和服务器之间的会话通常是session和cookie技术的相加使用,当一个用户向服务器发送第一个请求时,服务器为其建立一个session,并为此session创建一个标识号JSESSIONID,响应结束后并以cookie的形式保存在客户端;Cookie会话流程图如下。发送请求Server(服务器)产生session,通过Cookie保存sessionid,并响应给clientServer(服务器)产生session,通过Cookie保存sessionid,并响应给clientClient(浏览器)第一次访问时响应请求响应请求Server(服务器)可以通过session=request.getSession()得到sessionid,判断是否是同一个clientServer(服务器)可以通过session=request.getSession()得到sessionid,判断是否是同一个client再次发送请求Cookie携带有sessionid同一个Client第二次访问时Cookie会话流程图在javax.servlet.http包里一共定义了四个session监听器接口和与之关联的两个session事件。分别是:HttpSessionAttributeListenerandHttpSessionBindingEvent;HttpSessionBindingListenerandHttpSessionBindingEvent;HttpSessionListenerandHttpSessionEvent;HttpSessionActivationListenerandHttpSessionEvent.他们的继承关系是:所有四个接口的父类是java.util.EventListener;HttpSessionEvent扩展java.util.EventObject;而HttpSessionBindingEvent又扩展了HttpSessionEvent。2.3关于JDK和Tomcat的安装及配置JDK是Java开发工具包(JavaDevelopmentKit),是整个Java的核心部分,包括了Java的运行环境,Java开发工具和Java基础的类库。JDK的配置比较简单执行EXE文件完成后配置环境变量,在我的电脑属性→高级→环境变量→系统变量中添加。变量名:JAVA_HOME,变量值:D:\Java\jdk1.6.0_10,(这里的路径是jdk的安装路径)变量名:PATH,变量值:%JAVA_HOME%\bin,在CMD下运行Javac查看是否安装成功。Tomcat是在网络编程运用比较广泛的一种WEB容器,其安装和配置都比较简单,直接运行下载的apache-tomcat-6.0.30.exe文件,选择一个文件夹作为Tomcat的安装目录,按照一般的应用程序安装步骤安装好Tomcat,在安装过程中它会自动寻找JDK的位置。安装完成以后,设置Tomcat的环境变量,设置方法和JDK的环境变量的设置方法相同,设置变量名:TOMCAT_HOME,变量值:(这里是Tomcat的安装路径)。现在就可以检查Tomcat容器是否安装成功先Tomcat启动,在浏览器中输入:8080/或(http://localhost:8080/),其中(localhost)是指本机8080是Tomcat的端口号当出现Tomcat的欢迎界面如下图。2.4Oracle数据库2.4.1oracle的特点Oracle数据库是应用最广泛的一种数据库,其次还有MySql,SqlServer,DB2,等等。Oracle数据库是甲骨文公司开发的一款关系型数据库管理系统,Oracle数据库从发展至今已经有8i,9i,10g,11g和最新的12g多个版本。Oracle数据库的优点:数据的可靠性数据的共享性数据的大量性数据的保存的持久性可扩展性强相比较MySql,SqlServer等其他的数据库来说Oracle数据库采用的是并行服务器模式,这有利于提高单体服务器的性能。Oracle服务器由Oracle数据库和Oracle实例组成,在考虑到大数据量,实时性要求高,并发操作比较多,而Oracle数据库在这方面相较于其他数据库有独特的优势所以我们后台基本采取的是Oracle数据库。Oracle的结构体系如下图:用户进程SGA内存结构用户进程SGA内存结构实例后台进程日志缓冲区数据缓冲区共享池日志缓冲区数据缓冲区共享池服务器进程服务器进程PMONPMONSMONDBWRLGWRCKPT其他PGA参数文件归档日志文件日志文件控制文件参数文件归档日志文件日志文件控制文件数据文件口令文件日志文件控制口令文件日志文件控制文件数据文件数据文件数据文件Oracle结构体系图Oracle数据库由操作系统文件组成,这些文件为数据库信息提供实际物理存储区,Oracle数据库包括逻辑结构和物理结构,逻辑结构指数据库创建之后形成的逻辑概念之间的关系,物理组件就是Oracle数据库所使用的操作系统物理文件。物理文件可分为三类:数据文件,控制文件,日志文件。数据库的逻辑结构是从逻辑的角度分析数据库的组成。Oracle的逻辑组件包括:数据库→表空间→段→区→块总称为模式。2.4.2Oracle数据库的安装及配置因为我的电脑里安装的是Oracle11g,所以在这里说明Oracle11g的安装及配置。可以从网上直接下载Oracle11g,通过运行OracleUniversalInstaller来安装和卸载Oracle数据库,直接运行.exe可执行文件。Oracle11g是傻瓜式安装,但有几步需要注意:1、在“典型安装配置”窗口中,选择安装Oracle的基目录,数据库版本选择“企业版”,字符集选择“默认值”并输入统一的密码(密码处Oracle有自己的建议),单击“下一步”。2、Oracle数据库的安装和安装完成后进行数据库的创建需要的时间比较长,可能要持续1—2个小时,所以要耐心等待。3、数据库创建完成后,会出现如下“DatabaseConfigurationAssistant”界面,点击”口令管理“可以锁定和解锁用户及设置用户密码,修改完成后,单击“确定”。此时安装全部完成,点击”关闭“退出安装程序。4、检查Oracle11g数据库是否安装成功,在开始菜单中如下图找到NetConfigurationAssistant并单击5、单击选择“本地网络服务名配置”下一步→单击选择“测试”下一步→单击选择服务器名为“ORCL”下一步,如果不能连接成功的话则选择“更改登录”修改用户名和密码重试。
2.5JSP简介JSP是在HTML中嵌入Java脚本代码,由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码,然后将生成的整个页面信息返回给客户端。JSP的运作模式可以用下图表示客户端客户端返回页面信息返回页面信息数据库服务器应用服务器编译、执行JSP页面Java脚本嵌入数据库服务器应用服务器编译、执行JSP页面Java脚本嵌入JSP运作模式图JSP由许多公司参与一起建立的一种动态网页技术标准,其在动态网页的建设中有其强大而特别的功能。目前在国外的众多网站特别是涉及电子商务的网站中,已经大量使用了JSP技术。WEB容器处理JSP请求要经过三个阶段即翻译阶段、编译阶段、执行阶段具体流程如下图JSP执行文件JSP执行文件客户端请求响应应用服务器执行编译翻译Web容器执行JSP请求流程图2.5.1JSP的基本语法JSP例子Templatedata(标题)<html>
<head>
<title>Hi-JSP实验</title>
</head>Templatedata(标题)JSP元素<body>
<%
StringMsg="ThisisJSPtest.";
out.print("HelloWorld!");
%>
<h2><%=Msg%></h2>
</body>
</html>JSP元素从这段代码中我们可以看到JSP是可以嵌套在HTML文档中的,可以嵌套多个JSP代码。JSP的构成元素有Declaration、Scriptlet、Expression、Comment、DirectivesAction动作指令、内置对象。基本语法:<%!%>:在此声明的变量、方法都会被保留成唯一的一份,直到JSP程序停止执行结束;<%程序代码区%>:可以放入任何的Java程序代码;<%=……%>:=后面必须是字符串变量或者可以被转换成字符串的表达式,表达式不需要以;结束,只有一行。2.5.2JSP的内置对象及状态管理JSP在设计时,充分考虑到应用的跨平台性,因此JSP完全与平台无关,不管使用者使用的是哪一种版本的浏览器,都能欣赏由JSP产生的网页内容。JSP不是放置在服务器端进行解析的而是放置在Web服务器上,WEB服务器在进行解析时使用由Form表单传送过来一系列数据后,接着通过适当的逻辑生成标准HTML文件,然后传给客户端,客户端呈现的是一般符合HTML格式的文件内容。JSP对页面与页面之间的数据传输制定了严格的标准,就是JSP的九大内置对象JSP的九大内置对象引用名类名作用域outJavax.Servlet.jspWriterPagerequestHttpServletRequestRequestresponseHttpServletResponePagepageContextJavax.servlet.jsp.PageContextPagesessionHttpSessipnSessipnapplicationServletContextApplicationconfigServletConfigPageexcepconfigtionJava.Lang.HhrowablePagepageJava.Lang.ObjectPageJSP与ASP、PHP相比有采用标识简化页面开发、将内容的生成和显示进行分离、强调可重用的组件的优点。JSP是采用Java技术的一部分,吸收了Java技术的优点,JSP技术能够支持高度复杂的基于Web的应用。JSP技术可以作为组件模块以整合到多种应用体系结构中,可以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。因为JSP技术具有良好的移植性、健壮性和安全性,而且对于不同的浏览器版本具有很好的兼容性和可移植性即JSP技术的跨平台性,所以JSP技术在WEB网页开发领域应用的非常广泛。2.6JavaScript概述JavaScript前身叫作Livescript,JavaScript与Java名字看起来很相近但却是两个公司开发的两个不同的产品,虽然两者语法结构上有很多相似之处,但是两者的作用与用途还是有很多的区别和不同的。JavaScript并不是Java的子集,是一种基于对象(Object)和事件驱动(EventDriven)并具有安全性能的脚本语言。JavaScript的出现弥补了HTML语言的不足,一个HTML文档中可以嵌套多个JavaScript脚本代码。JavaScript是具有简单、安全、无需编译,直接解析执行、基于对象的动态语言。使用JavaScript的目的是与HTML超文本标记语言、Java脚本语言一起实现在一个与Web客户交互作用,页面中链接多个对象,从而可以开发客户端的应用程序等。JavaScript的运算符有:算数运算符、赋值运算符、比较运算符、逻辑运算符、位运算符。2.7J2EE概述J2EE是为企业应用开发者设计的庞大工具,可将复杂的问题分散到不同的平台上,模块化复杂的程序。J2EE是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构,J2EE体系提供中间集成框架层来满足无需太多费用而又需提高可重用性、可靠性以及可扩展性的应用。J2EE是规范化的,标准的使用Java语言编写的计算机技术,J2EE的分布式结构模型。J2EE为满足开发多层体系的企业级应用需求,提出“组件—容器”的编程思想,J2EE应用的基本软件单元是J2EE应用组件,运行于特定环境,组件的运行环境称为“容器”。J2EE组件分为:Web组件和EJB组件,J2EE容器分为:web容器和EJB容器。组件由容器为其提供必须的底层基础服务,容器提供命名、消息、安全、数据库、事务等服务,因此分布式组件开发中可以不考虑复杂多变的计算机而值考虑业务逻辑开发,不仅可以降低难度还可以提高效率。J2EE的功能:支持结构化的方法开发、部署、管理多层结构的分布式企业(web)应用,且提供一种统一的、开放标准的多层平台,组件依赖于容器的运行时支持。每个J2EE组件都运行在某个特定的容器内,不同的容器提供不同的服务。J2EE的开发和部署是不相关的,不互相限制的,这样做的好处是开发与部署的分离是代码的可重用性和可维护性大大提高。下图为J2EE的结构化三层分布式图EIS层中间层EIS系统遗留系统WEIS层中间层EIS系统遗留系统Web层客户层客户层数据库数据库业务层数据库数据库业务层EIS/数据库J2EE服务器EIS/数据库J2EE服务器客户端(client)J2EE结构化三层分布式图传统的应用程序模型是单层的主机/客户端,数据访问、表示和业务逻辑在一个应用中这使得代码的复用、可维护性和代码的修改变的十分困难,而J2EE多层结构的优势可以可以创建重用代码和可变的应用,提高了应用的可伸缩性。表示层+功能层+数据层三层结构它将C/S体系中原本运行于服务端的应用程序移到了中间层,客户端只负责显示与用户交互界面的少量数据处理工作。J2EE的具有以下优点:稳定的可用性、高效的开发、可伸缩性、持续性服务、支持异构环境。企业必须要选择一种服务器端平台,这种平台应能提供极佳的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。J2EE能消除系统中的瓶颈,允许多台服务器集成部署。J2EE能够开发部署在异构环境中的可移植程序,并基于J2EE的应用程序不依赖任何特定操作系统、中间件、硬件,程序只需开发一次就可部署到各种平台。J2EE能够允许公司把一些共用的、复杂的服务器端的程序交给中间件去完成这样对开发人员可以集中精力在如何创建商业逻辑上,大大地缩短了开发时间提高了开发的效率。这样使得开发人员不用对数据访问逻辑进行编码就能编写应用程序,能开发出更简洁,与数据库无关的应用服务程序,这种应用服务程序提高了可开发性和可维护性。分布式的开发方式可以共享数据对象和级联服务,这使得开发人员提高整体部署的伸缩性和开发高性能的系统得以实现。3Struts2简介3.1Struts2简介Struts2和Struts是两个不同的框架,同样作为MVC模式的框架Struts2相比较Struts更具有优势。Struts2是较新的WebMVC框架,它结合了Struts和webwork两个框架的优点。更准确的说是在webwork的基础上发展而来的全新的MVC框架因此Struts2具有更强的稳定性和更好的维护性。从某种程度上看,Struts2是从WebWork2上升级得到的。Struts2的体系与Struts1体系的差别非常大,因为Struts2使用了WebWork的设计核心,而不是Struts1的设计核心。Struts2中大量使用拦截器来处理用户的请求,从而允许用户的业务逻辑控制器与ServletAPI分离。Struts2的系统架构:接受请求、FilterDispatcher定位Action,Action方法的调用、Result的输出。Struts2是MVC框架,主要提供控制器与流程跳转功能、监听特定的URL地址,调用、Action,提供表示层标签库、提供了国际化的支持。Struts2框架控制下的登录程序流程图如下:核心控制器核心控制器Manager.jspResultActionLogin.jspManager.jspResultActionLogin.jspStruts2框架的登录流程图3.2Struts2的工作机制核心控制器要在web.xml中进行配置(Struts2.0版本的核心控制器为org.apache.struts2.dispatcher.FilterDispatcher)对框架进行初始化,以及处理所有的请求。开发Action需要实现Action接口,继承ActionSupport类,配置Action。Result的作用调度视图以哪种形式体现给客户端(Action处理结束后,系统下一步将要做什么)。struts2提供了许多标签,name属性表示result逻辑名,result元素的值指定对应的实际资源位置。struts.xml核心配置文件,主要负责管理Action通常放在WEB-INF/classes目录下,在该目录下的struts.xml文件可以被自动加载。<constantname="struts.i18n.encoding"value="UTF-8">这段代码决定了这个JSP页面的编码方式,更改编码的方式可以帮助程序员解决中文乱码的问题。拦截器是struts2的一项重要功能早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足、可扩展性降低。Struts2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于系统的解耦。MVC(Model-View-Controller)模式是一种常用的设计模式,即模型、视图、控制层。MVC减弱了业务逻辑接口和数据接口之间的耦合,MVC可以让个逻辑很清晰,这种思想和思维和人的思维很接近,很容易被理解。MVC的工作原理如下图:模型封装了用户数据和处理数据的业务逻辑模型封装了用户数据和处理数据的业务逻辑业务请求状态查询业务请求状态查询状态改变状态改变视图提供了用户界面,将用户输入的数据传递给控制器或激昂模型数据显示在用户的界面上视图提供了用户界面,将用户输入的数据传递给控制器或激昂模型数据显示在用户的界面上控制器连接了模型和视图,判断请求交给那个模型,调用视图显示模型处理用户请求结果选择视图选择视图用户请求用户请求MVC模式工作原理图4Hibernate数据库编程4.1hibernate简介数据库技术是现代计算机技术中的一个重要的组成部分,大部分的应用程序或软件系统都不可避免的要与数据库进行交互,因此在J2EE的规范中提供了JDBC的接口来操作数据库,开发人员可以获取数据库连接,然后向数据库发送SQL语句,并返回数据库操作的结果集,然后封装成对象返回给上层的应用程序。Hibernate是一个对象关系映射ORM(ObjectRelationalMapping),ORM映射是一个对象映射到关系模型的实体/类映射到表的编程方法,就是把面向对象的模型映射到关系模型,实例映射到实例映射到表列行和属性。Hibernate是一个持久性框架,通常在MVC框架中做持久层,这是用来持久从Java环境数据库中读出的数据,持久的是一些永久性的介质和存储数据,在任何时间点检索,甚至结束后。同样Hibernate框架式一个开放源代码的关系映射型框架。Hibernate一共有5个核心的接口:SessionFactory、Session、Configuration、Transaction、Query。它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库,它可以应用在任何使用JDBC的场合,也可以在Java的客户端程序使用。4.2Hibernate的优点和工作原理1、由于Hibernate是对JDBC的轻易级封装,所以内存消耗少,运行效率快。它和JDBC框架有着密切的关联,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,这使得运用Hibernate开放效率高。2、Hibernate对JDBC进行了轻易级的封装,所以大部分JDBC中的SQL语句不用写了,只要操纵相应的对象就可以进行读取、修改、存储、删除,提高了程序员的开发效率。3、Hibernate具有很好的可移植性,只需要操作对象,这样可以使开发者的开发更对象化。用Hibernate进行持久化的操作,而不继承Hibernate任何的类和实现Hibernate的任何接口,而我们称这个类为POJO。4、Hibernate是关系型框架它支持各种关系数据库,从一对一到多对多的各种复杂关系,这使得Hibernate的映射具有很强的灵活性。5、Hibernate的工作原理,使用Hibernate操作数据库需要七个步骤:读取并解析配置文件;读取并解析映射信息,创建SessionFactory;打开Session;开始一个事务;数据库操作;提交事务;关闭session。其工作流程如下面的图所示。ConfigurationSessionFactoryConfigurationSessionFactoryHibernate.cfg.xml创建和销毁都相当耗费资源,通常一个数据库只创建一个Hibernate.cfg.xml创建和销毁都相当耗费资源,通常一个数据库只创建一个创建User.hbm.xml类似于JDBC中的ConnectionSessionUser.hbm.xml类似于JDBC中的ConnectionSession创建Transaction 执行 开始Transactionsaveupdatedeletegetsaveupdatedeletegetmit()进行增、删、改、查等对数据库的操作session.close()进行增、删、改、查等对数据库的操作结束结束Hibernate操作数据库流程图
4.3hibernate的工具配置由于在开发中会涉及到很多的表,一个一个的写java实体类对开发者来说是很费事费时的,也很容易出错,Myeclipse提供了一个简单的方法:Hibernate逆向工程。1、在Myeclipse里边找到MyEclipseDataBaseExplorerperspective此标志,如下图。2、在打开的窗口中的DBBrowser操作台上点击右键创建新的连接,设置链接数据库配置信息,如下图。说明创建链接成功保存密码方便操作点击测试是否连接成功数据库的驱动地址点击添加连接数据库的驱动说明创建链接成功保存密码方便操作点击测试是否连接成功数据库的驱动地址点击添加连接数据库的驱动连接数据库用户的密码需要连接数据库的用户名数据库的URL地址(1521是Oracle数据库的端口号)链接的名字(可随意起)3、选择用户对应的schemas如下图。新创建的链接4、点击完成,并在DBBrowser操作台上连接(双击即可)你创建的新的链接如下图则说明连接成功。新创建的链接此用户下面所有的表对应的数据库用户此用户下面所有的表对应的数据库用户5、在web项目下,创建webProject,并导入hibernate下的jar包和数据库的驱动包如下图。6、鼠标指针放在web项目上右键选择myeclipse下的addhibernatecaptan…点击下一步如图配置。Hibernate的核心配置文件文件存放的目录如果文件不存在则创建,否则导入Hibernate的核心配置文件文件存放的目录如果文件不存在则创建,否则导入7、配置数据库链接的详细信息,如下图。新创建的数据库链接使用JDBC新创建的数据库链接使用JDBC
8、进行hibernate的逆向工程,切换到MyEclipseDataBaseExplorerperspective工作域的DBBrowser操作台,找到对应的数据库链接。双击打开链接,找到对应的表进行操作。选择对应的项目选择两个选框选择对应的项目选择两个选框9、在选择主键的窗口中选择assigned主键并下一步,点击完成如图。逆向工程中相对应的表逆向工程中相对应的表完成了创建映射文件*.Hbm.xml配置文件和java类,要注意的是逆向工程中的表必须要有主键。
4.3hibernate的缓存机制缓存主要由于查询,是数据库数据在内存中的临时容器,它包含了库表数据在内存中的临时拷贝数据,位于数据库与应用程序之间,缓存的作用是为了降低应用程序对数据库访问的次数,从而提高应用的运行性能。hibernate是一个线程对应一个session,一个线程可以看成一个用户,也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和线程绑定了。Hibernate一级缓存生命周期很短,因为它依赖于session,所以当session关闭时一级缓存的生命周期也就结束了。值得Java开发者注意的是,清理缓存前,要手动调用flush方法同步到数据库,否则save的对象就没有保存到数据库里。当有大批量数据的添加时最好还是不要使用hibernate,这是hibernate的弱项。可以使用jdbc(速度也不会太快,只是比hibernate好一点),或者使用工具产品来实现,比如oracle的Oracle
SQL
Loader,导入数据特别快。//同一个session中,发出两次load方法查询Student
student
=
(Student)session.load(Student.class,
1);System.out.println("="
+
student.getName());//不会发出查询语句,load使用缓存student
=
(Student)session.load(Student.class,
1);System.out.println("="
+
student.getName());Hibernate的二级缓存需要sessionFactory来管理,二级缓存是共享的,所有人都可以使用。对于长时间不改变的数据,使用缓存是非常有必要的,但对于经常变化的数据就还是需要经常到数据库里查询,那就没必要使用缓存了。在这里我使用的是EHCache缓存产品。使用EHCache在hibernate的lib里的jar文件中的ehcache.xml配置文件,设置我们需要的一系列的缓存使用策略。<defaultCache//缓存里可以放10000个对象maxElementsInMemory="10000"//过不过期,如果是true就是永远不过期eternal="false"//一个对象被访问后多长时间还没有访问就失效(120秒还没有再次访问就失效)timeToIdleSeconds="120"//对象存活时间(120秒),如果设置永不过期,这个就没有必要设了timeToLiveSeconds="120"//溢出的问题,如果设成true,缓存里超过10000个对象就保存到磁盘里overflowToDisk="true"/>如果在第一个session调用load或get方法查询数据后,把二级缓存清除了,那么第二个session调用load或get方法查询相同的数据时,还是会发出sql语句查询数据库的,因为缓存里没有数据只能到数据库里查询。大批量的数据添加时可能会出现溢出,解决办法是每当天就20个对象后就清理一次一级缓存。如果我们使用了二级缓存,光清理一级缓存是不够的,还要禁止一二级缓存交互,在save方法前调用。如果在第一个session调用load或get方法查询数据后,把二级缓存清除了,那么第二个session调用load或get方法查询相同的数据时,还是会发出sql语句查询数据库的,因为缓存里没有数据只能到数据库里查询。二级缓存也不会存放普通属性的查询数据,这和一级缓存是一样的,只存放实体对象。session级的缓存对性能的提高没有太大的意义,因为生命周期太短了。一级缓存和二级缓存都只是存放实体对象的,如果查询实体对象的普通属性的数据,只能放到查询缓存里,查询缓存还存放查询实体对象的id。查询缓存的生命周期不确定,当它关联的表发生修改,查询缓存的生命周期就结束。这里表的修改指的是通过hibernate修改,并不是通过数据库客户端软件登陆到数据库上修改。hibernate的查询缓存默认是关闭的,如果要使用就要hibernate.cfg.xml文件里配置:<propertyname="hibernate.cache.use_query_cache">true</property>,如下图是hibernate的缓存机制。hibernate的缓存机制流程图
5电子产品交易系统网站需求分析5.1设计思想概述本系统采用了web应用开发中常见的MVC分层结构模式,基于B/S架构下的多层结构的应用系统。在数据库层方面,该系统使用开源的Oracle数据库,持久层用到Hibernate技术,业务逻辑层用普通Javabean实现,表述层运用基于struts2的MVC设计模式。总的来说,采用了分层结构的设计思想,可以让每个层由一组相关的类或组件构成,共同完成特定的功能。层与层之间存在自上而下的依赖关系,上层组件会依赖下层组件的API,而下层组件则不依赖于上层组件。5.2网站总体设计概述系统页面采用了JSP和UI(HTML+CSS)技术JSP是动态的,HTML是静态的两者结合可以使的页面显示效果更完美,代码的可移植性和便于维护性更高。使用MVC分层模式,在数据库层,该系统使用开源的Oracle数据库,持久层用到Hibernate技术,业务逻辑层用普通JavaBean实现,表述层运用基于struts2的MVC设计模式。基本实现了一个电子门户网站所具有的基本功能,包括:用户注册、用户登录、查找商品、购买商品、提交订单、查询商品、商品分页。浏览者需要注册只要为网站的用户后,获得自己的帐号,设置自己的密码才能购买网站上的是商品。首先给出电子门户网站的结构框架。商品页面,根据用户的查询条件显示查询到的商品网站登录页面商品页面,根据用户的查询条件显示查询到的商品网站登录页面<forward><from>Good.jspLogin.do<forward><from>Good.jspLogin.doLogin.jsp电子门户网站的基本结构框架图
JSP页面实现表述层JSP页面实现表述层Struts2控制页面的跳转Struts2控制页面的跳转业务逻辑层业务逻辑层HHibernate做持久化层持久化层持久化层Oracle11g做数据库层Oracle11g做数据库层数据库层数据库层本系统MVC分层示意图本网站面向用户的功能有:注册功能;顾客首先要注册为网上商城的用户,否则是不可以购买商品的。需要用户填写的信息有用户名和密码,确认密码是为了保证用户两次输入密码的一致性,它是客户端行为是在客户端进行的而不是在服务端。登录功能;用户正确注册后,输入正确的用户名和密码就可以进入网上电子商城浏览或购买商品。购物车管理;用户在浏览完商品后,将自己想要购买的商品加入到购物车。商品页面会提示成功添加到购物车,用户可以到购物车里查看想要购买的商品。订单管理;用户在购物车里,将确定要购买的商品提交到我的订单进行结算,用户可以到订单页面购买或是继续浏览商品。
5.3系统设计及其功能需求分析本系统一共设计了四个Java类分别是Che.java、Goods.java、Orders.java、Users.java四个类依次对应了数据库中的Che、Goods、Orders、Users四张表,四个.hbm.xml文件配置了每个Java类和数据库表之间的映射关系如图:每个Java类相对应的.hbm.xml配置文件四个Java类,相对应数据库中的四张表每个Java类相对应的.hbm.xml配置文件四个Java类,相对应数据库中的四张表例Che.java的代码实现:packagecom.ld.bean;importjava.math.BigDecimal;实现了实现了Serializable接口/***Cheentity.@authorMyEclipsePersistenceTools*/publicclassCheimplementsjava.io.Serializable{ //FieldsUsers表中的每个属性,以及每个属性相对应的类型Users表中的每个属性,以及每个属性相对应的类型 privateStringusersname; privateStringgoodsname; privateStringgoodsprovider; privateStringgoodsgategroy; privateIntegergoodsunitprice; privateIntegergoodsid; privateStringpassword; //Constructors publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } /**defaultconstructor*/ publicChe(){ } publicIntegergetGoodsid(){ returngoodsid; } publicvoidsetGoodsid(Integergoodsid){ this.goodsid=goodsid; } /**fullconstructor*/ publicChe(Stringusersname,Stringgoodsname,Stringgoodsprovider, Stringgoodsgategroy,Integergoodsunitprice,Integergoodsid, Stringpassword){ this.usersname=usersname; this.goodsname=goodsname; this.goodsprovider=goodsprovider; this.goodsgategroy=goodsgategroy; this.goodsunitprice=goodsunitprice; this.goodsid=goodsid; } //Propertyaccessors publicIntegergetCheid(){ returnthis.cheid; } publicvoidsetCheid(Integercheid){ this.cheid=cheid; } publicStringgetUsersname(){ returnthis.usersname; } publicvoidsetUsersname(Stringusersname){ this.usersname=usersname; } publicStringgetGoodsname(){ returnthis.goodsname; } publicvoidsetGoodsname(Stringgoodsname){ this.goodsname=goodsname; } publicStringgetGoodsprovider(){ returnthis.goodsprovider; } publicvoidsetGoodsprovider(Stringgoodsprovider){ this.goodsprovider=goodsprovider; } publicStringgetGoodsgategroy(){ returnthis.goodsgategroy; } publicvoidsetGoodsgategroy(Stringgoodsgategroy){ this.goodsgategroy=goodsgategroy; } publicIntegergetGoodsunitprice(){ returnthis.goodsunitprice; } publicvoidsetGoodsunitprice(Integergoodsunitprice){ this.goodsunitprice=goodsunitprice; }}例Che.hbm.xml的配置文件:<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""/hibernate-mapping-3.0.dtd"><!--MappingfileautogeneratedbyMyEclipsePersistenceTools--><hibernate-mapping><classname="com.ld.bean.Che"table="CHE"schema="HR"><idname="cheid"type="java.lang.Integer"><columnname="CHEID"precision="22"scale="0"/><generatorclass="increment"/></id><propertyname="usersname"type="java.lang.String"><columnname="USERSNAME"length="20"/></property><propertyname="goodsname"type="java.lang.String"><columnname="GOODSNAME"length="20"/></property><propertyname="goodsprovider"type="java.lang.String"><columnname="GOODSPROVIDER"length="20"/></property><propertyname="goodsgategroy"type="java.lang.String"><columnname="GOODSGATEGROY"length="20"/></property><propertyname="goodsunitprice"type="java.lang.Integer"><columnname="GOODSUNITPRICE"/></property><propertyname="goodsid"type="java.lang.Integer"><columnname="GOODSID"precision="22"scale="0"/></property><propertyname="password"type="java.lang.String"><columnname="PASSWORD"length="20"/></property></class></hibernate-mapping>在业务处理层中Struts2对于Java的Web开发而言就是一个不错的选择,Struts框架实质就是JSPModel2模型的实现,它通常用于实现业务逻辑方法以及以及与底层数据库的交互等。Struts2的大致工作流程可描述为:1、浏览器发送请求。2、Control中的核心控制器FilterDispatcher根据请求调用相应的业务逻辑控制器(Action)。3、WebWork的拦截器链自动对请求应用通用功能,如数据校验和文件上传等功能。回调Action中的execute()方法,并在方法体内调用业务逻辑组件来处理请求(Model)。4、execute()方法将调用业务逻辑组件(Model)得到的数据返还并更新视图层(View)。Intercept类Struts2中拦截器的使用是Struts2Intercept类代码如下:packagecom.ld.Intercept;importjava.util.Map;importcom.opensymphony.xwork2.Action;importcom.opensymphony.xwork2.ActionInvocation;importerceptor.AbstractInterceptor;publicclassinterceptextendsAbstractInterceptor{ @Override publicStringintercept(ActionInvocationinvocation)throwsException{ //获取用户会话信息 Mapsession= invocation.getInvocationContext().getSession(); Stringname=(String)session.get("name"); if(name==null){ //终止执行,返回登录页面 returnAction.LOGIN; }else{ //继续执行剩余的拦截器和Action returninvocation.invoke(); }}}在XML配置文件中hibernate.cfg.xml文件配置了实体类与表之间的映射关系,和连接数库的配置信息具体代码如下:<?xmlversion='1.0'encoding='UTF-8'?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""/hibernate-configuration-3.0.dtd"><!--GeneratedbyMyEclipseHibernateTools.--><hibernate-configuration><session-factory> <propertyname="dialect"> org.hibernate.dialect.Oracle9Dialect </property> <propertyname="connection.url"> jdbc:oracle:thin:@:1521:orcl </property> <propertyname="connection.username">hr</property> <propertyname="connection.password">hr</property> <propertyname="connection.driver_class"> oracle.jdbc.driver.OracleDriver </property> <propertyname="file"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 终止用工协议书
- 谈判合作协议书
- 部门沟通协议书
- 南京市公司员工协议书
- 退出直播协议书
- 退还出资协议书
- 酒吧融资协议书
- 草原征占协议书
- 标准化病人保密协议书
- 环卫所厨余合同协议书
- 2025购销茶叶合同范本
- 山东济南历年中考作文题与审题指导(2005-2021)
- 职业技术学院2024级工业互联网技术专业人才培养方案
- 锝99mTc替曲膦注射液-药品临床应用解读
- 武汉各区2023-2024学年九下化学四调压轴题分类汇编-第8题选择题
- 脑血管造影术的术前及术后护理
- 外墙涂料施工劳务合同范本(8篇)
- 成人重症患者颅内压增高防控护理专家共识2024
- 网络灾难与信息安全应急
- 音乐人类学视角-洞察分析
- 中职语文职业模块期末综合测试题(三)
评论
0/150
提交评论