




已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计网上鲜花订购系统(鲜花管理、用户留言版)摘要随着INTERNET和应用软件的发展,使的电子商务越来越多普及,人们在网上所购买的产品种类也越来越多。鲜花作为一种新型的产品也实现了网上订购,我们所做的网上鲜花订购系统就是基于上述原因实现的,它不是没有价值,有人会说,订个鲜花还到网上订,自己去花店买不就行了,那我就告诉你,现在是网络时代,在网上订购你所需要的物品,能给你带来巨大的方便,您只需要在网上选择您所需要的鲜花,就能够轻松得到,而且鲜花产业也日趋成为人类精神生活的一部分,比如荷兰每年的鲜花产值已经达到了12亿之多。现在鲜花产业也日趋成为一种时尚,能够给人们的生活添加不一样的色彩。网上鲜花订购系统是用来实现在网上订购鲜花的功能,我所做的模块是鲜花管理模块和用户留言版模块,我用的是JAVA语言,采用了MVC模式,STRUTS框架,现在这种模型在软件开发中使用的非常普遍。只要用户的电脑连接上INTERNET,并装有一种WEB浏览器便可使用此系统。关键字鲜花查询,留言提交;ABSTRACTWITHTHEDEVELOPMENTOFINTERNETANDSOFTWAREAPPLYING,SOTHATMOREANDMOREPOPULARECOMMERCE,PEOPLEINTHEONLINEPURCHASEOFPRODUCTSMOREANDMOREFLOWERSASANEWPRODUCTHASALSOREALIZEDABOOKONLINE,WHATWEHAVEDONEFLOWERSONLINEORDERINGSYSTEMISBASEDONTHEREALIZATIONOFTHEABOVEREASONS,ITISNOTWITHOUTVALUE,SOMEPEOPLEWILLSAY,FLOWERSWEREALSOSETTOORDERONLINEWHYTOBUYTHEIROWNFLOWERSHOPONTHELINE,IWILLTELLYOUTHAT,ITISTHEINTERNETAGE,TOBOOKONLINEYOUNEEDTHEITEMS,YOUCANBRINGGREATCONVENIENCE,YOUONLYNEEDTOCHOOSETHEINTERNETYOUNEEDFLOWERS,EASILYGETENOUGH,ANDFLOWERSINDUSTRIESAREBECOMINGINCREASINGLYBECOMEAPARTOFHUMANSPIRITUALLIFE,DUTCHFLOWERSSUCHASTHEANNUALOUTPUTVALUEHASREACHEDASMUCHAS120MILLION,FLOWERINDUSTRYISNOWALSOINCREASINGLYBECOMEAFASHION,TOADDTOPEOPLESLIVESISNOTTHESAMECOLORISUSEDTOACHIEVETHEORDEROFTHEFUNCTIONSOFFLOWERS,IDIDMODULEISFLOWERSMANAGEMENTMODULEANDUSERMESSAGEBOARDSMODULE,USETHEJAVALANGUAGE,ADOPTEDTHEMVCPATTERN,STRUTSFRAMEWORK,THECURRENTMODELOFSOFTWAREDEVELOPMENTINTHEUSEOFVERYCOMMONASLONGASTHEUSERSCOMPUTERCONNECTEDTOTHEINTERNET,ANDEQUIPPEDWITHAWEBBROWSERCANUSETHISSYSTEMKEYWORFSELECTFLOWER,SUBMITMESSAGE绪论51毕业设计所用到的开发工具611JDK50612ECLIPSE(MYECLIPSE)913MYSQLORACLE1014TOMCAT112毕业设计所用到的开发技术122221JAVA基础知识1222HIBERNATE的应用2322JSP的基本应用2523STRUTS的基本应用263网上鲜花订购系统的基本设计264网上鲜花订购系统的需求分析28系统功能模块设计2941图295网上鲜花订购系统3151整个系统模块的划分及简述3152鲜花管理模块31511鲜花实体类的定义32512查询功能33513添加到购物车功能37514添加一种鲜花的功能38515删除一种鲜花的功能39516更新一种鲜花的功能4053客户留言版模块41521留言版实体类的定义41522客户留言信息的提交42523客户留言信息的显示44524管理员对用户留言信息的删除456测试467总结于体会488参考文献48附录1英文参考文献的翻译一49英文49译文61安徽工业大学计算机学院ANHUIUNIVERSITYOFTECHNOLOGY绪论毫无疑问,2008年是社会化网络年。WEB技术的强势发展,基与JAVA语言的开发技术的日趋壮大,在网络平台上的商业活动越来越频繁,同时MVC模型的开发框架也将渗入到网络的各个领域,2008年是WEB开始过热的一年。而WEB这个词被大众认为是一个市场营销的用语。但不管你叫它什么,我更愿意把它称为“社会网(SOCIALWEB)”,当今的网络正在对人们的生活产生巨大影响。目前全世界互联网的使用人口比例达到20,而且还在增长。亚洲增幅最快。电子商务的发展也是相当的迅速,随着网上银行的发展,各个网上购物系统的不段出现,包括中介网的信用不断增加,再加上现在物流业技术的强大,这些都使的网上购物系统成为21世纪不可阻挡的潮流,互联网已日益成为收集提供信息的最佳渠道并逐步进入传统的流通领域。于是电子商务开始流行起来,越来越多的商家在网上建起在线商店,向消费者展示出一种新颖的购物理念。网上订购系统作为B2B,B2CBUSINESSTOCUSTOMER,即企业对消费者,C2CCUSTOMERTOCUSTOMER,即消费者对消费者电子商务的前端商务平台,在其商务活动全过程中起着举足轻重的作用。网上购物是一种具有交互功能的商业信息系统。它向用户提供静态和动态两类信息资源。所谓静态信息是指那些比经常变动或更新的资源,如公司简介、管理规范和公司制度等等;动态信息是指随时变化的信息,如商品报价,会议安排和培训信息等。网上购物系统具有强大的交互功能,可使商家和用户方便的传递信息,完成电子贸易或EDI交易。这种全新的交易方式实现了公司间文档与资金的无纸化交换。网上购物的现状在美、日等信息化程度较高的国家和地区,网络商店发展速度迅猛,美国的世界级超一流的零售商,如沃尔玛凯玛特,家庭仓储、科罗格、JC培尼等纷纷挤身于网络经商的行列。调查表明美国的家庭已越来越习惯于在家中从网上购物。在我国,网上购物从无到有也不过短短几年时间。我国第一家网上购物发生在1996年,燕莎友谊商场首次通过网上商城售出一个景泰蓝,虽然货款的支付不是在网上进行的,但这毕竟为我国零售业奏出了网上购物的先声。根据CNNIC的统计结果,在2004年时中国就有互联网用户7950万人,而又有407以上的网民在过去的一年里有过网上购物经历,这就说明中国有网上购物的用户达是32357万人,并且这一数字还在以17左右的速度增长,到2006年中国网上购物用户达到1亿人之多,这说明在中国发展网上购物具有良好的群众基础,网上购物方式日趋被大家所接受。网上购物系统的构建现在流行的网上购物系统不仅要有漂亮的网页,更要有严谨的规划。每一个细小的环节都和重要。这样才能使得在电子交易时避免不必要错误发生。我将使用HTML、JSP等技术来编辑网页,并运用JSP技术把数据库和动态网页相关联。传统的管理信息系统信息获取方法是由专业文字录入人员将信息输入到管理系统的数据库中,这种方法在数据量不大时有很多的应用场合。当数据量比较大,并且有较强的专业性时,录入的费用和出错的可能性都相应上升。本文在实际应用开发中解决方案是建立网站,以及自己的数据库,使得所需商品信息可以及时的保存、更新。可以更好的及时了解商品买卖的情况。安徽工业大学计算机学院1毕业设计所用到的开发工具在这次毕业设计中,由于我是基于JAVA语言做的,所以用到的开发工具有JDK50,ECLIPSE,MYSQL,TOMCAT。通过这些工具再加上一台电脑,基本上就在JAVA软件开发用到的就是这些,下面我来具体介绍一下这些工具11JDK50这是JAVA软件开发的基本工具,JAVA语言的特点有它是纯面向对象、跨平台的,而且要比C要简单JAVA语法去掉了指针,运算符重载,多重继承等;有垃圾回收器程序员只负责对象的创建,垃圾回收器负责对象销毁和资源释放,一般只会在内存空间不够的情况下进行资源回收,JAVA程序的开发过程是这样执行的JAVA源代码(JAVA)JAVA编译器JAVA字节码(CLASS)JAVA解释器CPU(虚拟机屏蔽底层操作系统的差异)执行JAVA字节码。计算机编译一个JAVA程序的过程是这样的,他先启动JVM,再通过JAVA_HOMEJRELIB目录下找到对应的类,如果找不到则在环境变量中配置的CLASSPATH配置的路径中找类。环境变量的设置JAVA_HOME指定JDK的位置。CLASSPATH指定到哪里去找运行时需要用到的类代码(字节码)PATH指定可执行程序的位置。EXPORT将指定的环境变量声明为全局的。LINUX系统(在BASH_PROFILE下的环境变量设置)JAVA_HOME/OPT/JDK150_06CLASSPATHPATHPATHJAVA_HOME/BINEXPORTJAVA_HOMECLASSPATH现在我们常用的JAVA开发软件有J2EE(企业版),J2ME(微型版),J2SE(标准版),一般在JDK种包含一个JRE它只能运行字节码文件,也就是CLASS文件,在JRE中包含了JVM也就是JAVA虚拟机,它负责来执行你所编写的代码。下面介绍一下JDK50的新特性,这种新特性分为5小点和四大点,这5小点有1AOTOBOXING,因为在JAVA语言中封装了STRING类型和8种基本类型,这9种类都存在自己的对象池,在JDK5种它可以把这包装后的8种基本类型转化为基本类型,如ITERGERI20;I这个对象就自动转化成了INT型,第二个小点是AOTOUNBOXING它的功能正好和AOTOBOXING的功能相反,第三点是实现了INTERABLE接口,可以用FOREACH如FOR(OBJECTOBJHS)SYSTEMOUTPRINTLNOBJ这段代码就等于OBJECTOBJNULLFORITERATORITHSITERATORITHASNEXTOBJITNEXTSYSTEMOUTPRINTLNOBJ第三个小点是JDK5支持静态导入,IMPORT作为静态引入引入一个类里面的静态成员,则访问的时候可以不写类名直接调用静态成员。例如IMPORTSTATICJAVALANGSYSTEMIMPORTSTATICJAVALANGMATHOUTPRINTLNROUNDPI等价于SYSTEMOUTPRINTLNMATHROUNDMATHPI第四点是可变长参数PUBLICSTATICVOIDMSTRINGS先绝对匹配参数,如果没有匹配的再去调用变长参数,变参和数组不能同时存在,变参即数组,不能同时存在多个,一个方法最多只能有一个变参,且该变参只能是方法参数表中的最后一个参数,一个方法中只能有一个STRINGS,其前面可以跟别的类型参数,如果有两个以上的参数,STRINGS必须放在最后。第五点是格式化输出例如SYSTEMOUTPRINTF“D”,4;完全符合C的习惯风格。JAVAUTILFORMATTER类格式化输出。JAVAUTILSCANNER类格式化输入。融合了BUFFEREDREADER和STRINGTOKINIZER的功能。下面一个例子把5小点内容全都用到了IMPORTSTATICJAVALANGSYSTEM/静态导入PUBLICCLASSTESTPRINTFPUBLICSTATICVOIDMAINSTRINGARGS/可变长参数INTEGERI1/自动封箱FORSTRINGSARGSOUTPRINTF”ARGDSN”,I,S/格式化输出,自动解箱下面介绍JDK50新特性的四大点第一点枚举ENUM它是一种数据类型,是一个类,是一个FINAL类,其对象是现成的固定的,其父类是JAVALANGENUM。在JDK50之前,用此方式实现枚举CLASSSEASON1PUBLICSTATICFINALSEASON1SPRINGNEWSEASON1“春天”PUBLICSTATICFINALSEASON1SUMMERNEWSEASON1“夏天”PUBLICSTATICFINALSEASON1AUTUMNNEWSEASON1“秋天”PUBLICSTATICFINALSEASON1WINTERNEWSEASON1“冬天”STRINGNAMEPRIVATESEASON1THISNAMENAME/构造方法私有PUBLICSTRINGGETNAMERETURNNAMEJDK50支持枚举ENUMSEASON2SPRING“春天”,SUMMER“夏天”,AUTUMN“秋天”,WINTER“冬天”STRINGNAMESEASON2STRINGNAMETHISNAMENAMEPUBLICSTRINGGETNAMERETURNNAME类不能继承枚举,枚举也不能继承类,但可以实现接口,枚举是一个FINAL类,但是ENUM中却可以有抽象方法,抽象方法是由枚举值实现的。即这些抽象方法只能通过定义好的几个对象来实现,而且只能通过匿名的内部类的方法来实现。第二点泛型编译时信息方便集合对其存储对象类型的管理,减少类型转换的次数。如LISTLNEWARRAYLIST/错误,因为对象变量的泛型和对象的泛型必须是一致的,不存在多态,否则STRING泛型就没用了。LISTLNEWARRAYLIST/正确LADD“ABC“/LADD123/此处会报错,泛型要求不能放入非字符串LGET0/取得时候也不需要类型转换MAPMAPNEWHASHMAPMAPPUT1,”HUXZ”MAPPUT2,”LIUCY”MAPPUT15,”HILOO”/此处会报错,泛型要求不能放入非INTEGERSETKEYSMAPKEYSETFORINTEGERIKEYSSTRINGVALUEMAPGETISYSTEMOUTPRINTLNVALUE泛型的通配符一般用在方法参数上泛型的通配符表示什么类型都可以LIST带范围的泛型通配符表示可以是NUMBER类和其子类LIST带范围的泛型通配符表示可以是NUMBER类和其父类LIST表示都实现了COMPARABLE接口的类,注意是EXTENDS而不是IMPLEMENTS泛型方法,在修饰符和返回值之间定义泛型PUBLICVOIDMTOS,LISTLST代表用户自己指定的类型,是什么类型就看调这个方法的时候怎么传参数。定义泛型的时候也可以限制范围,只能向下不能向上,即只能是EXTENDS,不能用SUPER。PUBLICVOIDCOPYARRAYTOLISTEOS,LISTLS类名PUBLIECLASSSTUDENTPRIVATESTRINGNAMEPUBLICVOIDSETNAMESTRINGNAMETHISNAMENAME/THISNAME为当前对象的成员变量2如果某个构造方法的第一个语句具有形式THIS,那么这个构造方法将调用同一类中的其他构造方法。注意在构造方法中THIS必须放在方法的第一行。封装1定义封装最简单的理解就是包装,指隐藏对象的属性和实现细节,仅仅对外公开接口,即对象的内部状态对外界是透明的。2原则“该隐藏的一定要隐藏,该公开的一定要公开。”对象的属性尽可能的私有,根据需要配上相应的GET/SET方法。对象的方法根据需要决定是否公开,公开的是声明,隐藏的是实现。意义使方法实现的改变对架构的影响最小化。继承1定义2父类到子类是从一般到特殊的关系。泛化将不同子类中的共性抽象成父类的过程。特化在原有父类的基础上加入一些个性的过程。原则父类放共性,子类放个性。3继承的关键字EXTENDS4JAVA只支持单继承一个类最多只有一个直接的父类。注父子类之间的关系是树状关系,而多继承是网状关系。5父类中的私有属性可以继承但是不能访问,也可以说父类中的私有属性子类不能继承。6访问权限宽|PUBLIC全部类可见|PROTECTED本类可见,同包类可见,子类可见|DEFAULT本类可见,同包类可见/PRIVATE本类可见严PRIVATE本类内部可以访问,不能继承到子类。DEFAULT本类内部可以访问,同包其他类也可以访问。能否继承到子类不一定PROTECTED本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问。能否继承到子类能继承到子类PUBLIC任何地方都可以访问能否继承到子类能继承到子类7方法覆盖方法名相同参数表相同访问限制符相同或者更宽返回值类型相同或者子类返回的类型是父类返回的类型的子类(在JDK50以后)抛出的异常以后再说。8属性遮盖9SUPER关键字SUPER()表示调用父类的构造方法。SUPER()也和THIS一样必须放在方法的第一句。SUPER可以屏蔽子类属性和父类属性重名时带来的属性遮盖,SUPER表示调用父类的方法或属性。在子类的构造函数中如果没有指定调用父类的哪一个构造方法,那么就会调用父类的无参构造方法,即SUPER()。10带继承关系的子类对象创建的过程1)递归地构造父类对象2)分配空间3)初始化属性4)调用本类的某一个构造方法多态1定义2多态分为两种编译时多态和运行时多态。编译时类型主观概念,把它看作什么。运行时类型客观概念,实际它是什么。例ANIMALANEWDOG指着狗问,这个动物是什么动物3运行时多态的三原则对象类型不变。只能对对象调用编译时类型中定义的方法。在程序的运行时,根据对象的运行时类型,找覆盖后的方法来调用。(运行时动态类型绑定)4强制类型转换一定没有新对象生成。5关键字INSTANCEOF用法引用INSTANCEOF类名判断这个引用所指向的对象是否属于这个类。用在强制转换之前,避免类型转换异常。IFAINSTANCEOFDOGDOGDDOGA3多态的作用多态可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。4耦合一个软件结构内不同模块之间互连程度的度量,是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块之间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。内聚一个模块内各个元素彼此结合的紧密程度,标志一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。,简单地说,理想内聚的模块只作一件事情。要求低耦合一个模块应该尽可能少的与其他模块有功能上的交互,这样既利于系统的维护也利于测试在一个模块内,让每个元素之间都尽可能的紧密相连,也就是充分利用每一个元素的功能,各施所能,以最终实现某个功能。高内聚一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分,这样有利于修改集合定义用于管理存储其他若干对象的对象。数组最基本的一个集合,缺陷是长度不可变。若干类若干接口集合框架集合接口层次结构COLLECTION|SETLISTMAPSORTEDSETSORTEDMAP1)LIST有顺序的,元素可以重复2)SET无顺序的,元素不可重复3)SORTEDSET和SET接口相同,元素按升序排列4)MAPKEYVALUE对存储了唯一关键字标识和对应的值。KEY不允许重复,VALUE可以重复。5)SORTEDMAP和MAP接口相同,元素按关键字的升序排列。集合类层次结构HASHSETLINKEDLISTHASHMAP,HASHTABLESETVECTOR,ARRAYLISTLISTMAPTREESETTREEMAPSORTEDSETSORTEDMAP2我们通过查阅API来更好的学习COLLECTION、SET、LIST、MAP、SORTEDSET、SORTEDMAP。3LIST接口的实现类1)ARRAYLIST底层用数组实现的LIST遍历FOR循环或者ITERATOR迭代排序JAVAUTILCOLLECTIONSSORT默认是升序。写自定义类时,一般IMPLEMENTSJAVALANGCOMPARABLE,实现COMPARETO方法,自定义排序规则。实现接口回调。特点查询速度快,增删速度慢。2)VECTOR底层用数组实现的LIST特点与ARRAYLIST相比,ARRAYLIST是轻量级的类,占用系统资源少,线程不安全;VECTOR是重量级的类,占用系统资源多,线程安全。在考虑并发的情况下用VECTOR(保证线程的安全),在不考虑并发的情况下用ARRAYLIST(不能保证线程的安全)。3)LINKEDLIST底层用双向循环链表实现的LIST特点查询速度慢,增删速度快。4)STACK类VECTOR的直接子类(不良的设计)。继承了VECTOR中很多不适合自己的方法,不要轻易使用STACK4SET接口的实现类HASHSET遍历只能ITERATOR迭代,遍历结果是无顺序的,元素不是重复的。(指元素内容不重复,而不是对象不可重复)HASHSET存储元素的过程为保证元素内容不重复,写自定义类时,要覆盖OBJECT类中的EQUELS方法,HASHCODE方法。要保证元素内容不相同的元素哈希码值一定不相同,元素内容相同的元素哈希码值一定相同,而且EQUALS()方法的返回值为TRUE。HASHSET存储元素的过程首先会调用HASHCODE方法来得到对象哈希码值,并用此值对数组长度求模,得到数组的下标,再把此对象放到此下标位置,存储对象时,如果对象哈希码相同,就会自动调用EQUALS方法。排序方法1HASHSET中的所有元素放到TREESET中,调用ADDALL方法,然后将TREESET中的元素打印出来。方法2HASHSET中的所有元素放到ARRAYLIST中,调用ADDALL方法,然后将ARRAYLIST中的元素打印出来。5SORTEDSET接口SET的子接口,在元素添加的同时,进行排序。实现类TREESET类。排序默认是升序。写自定义类时,一般IMPLEMENTSJAVALANGCOMPARABLE,实现COMPARETO方法,自定义排序规则。利用COMPARETO方法的返回值来判断元素是否重复。COMPARETO的返回值为0,则说明元素是重复的。6MAP接口的实现类注KEY一般是8种基本类型的封装类或者是STRING类,拿自己自定义的类作为KEY没有意义。1)HASHMAP遍历方法1先调用VALUES得到VALUES的COLLECTION集合,再迭代遍历VALUES的COLLECTION集合。方法2先调用KEYSET得到KEY的SET集合,再迭代遍历KEY的SET集合,根据KEY得到VALUE。2)HASHTABLE一般不使用。3)HASHMAP与HASHTABLE的区别HASHMAP非线程安全,轻量级的,允许空的键值对。HASHTABLE是线程安全,重量级的,不允许有空的键值对。7SORTEDMAP接口MAP的子接口,按某一特定排序规则来存放所加入的键值对实现类TREEMAP类。KEY值的排序规则,同SORTEDSET接口实现类TREESET线程THREAD1概念进程一个运行的程序,可同时并发多个进程。线程在进程的内部,划分出多个顺序执行流程。2特点宏观上并行,微观上串行。(CPU将一段时间分为多个时间片,每个时间片CPU只能运行一个任务。)3区别进程是数据独占的,线程是数据共享的(所以需要处理数据并发)4注线程是操作系统的一个资源,其创建、销毁和管理都是由操作系统控制。线程对象是在操作系统的一个进程JVM中,在堆中NEW了一个线程。类似一个代理,代表了操作系统中的一个线程。THREADT1NEWMYTHREAD不会在操作系统中多出一个线程,当调用START方法时,JVM会到操作系统中产生一个线程。5线程实现的两种形式继承JAVALANGTHREADCLASSMYTHREADEXTENDSTHREADPUBLICVOIDRUN启动线程PUBLICCLASSTESTTHREADPUBLICSTATICVOIDMAINTHREADT1NEWMYTHREADT1START实现JAVALANGRUNNABLE接口CLASSMYTHREADIMPLEMENTSRUNNABLEPUBLICVOIDRUN启动线程PUBLICCLASSTESTTHREADPUBLICSTATICVOIDMAINRUNNABLEMYTHREADNEWMYTHREADTHREADTNEWTHREADMYTHREADTSTART6线程的不同状态(请同学们参照胡老师的状态图理解。)1)初始状态此时线程只是处于JVM进程中,只是创建了一个线程对象,并没有真正开始运行。2)可动行状态调用线程对象的START方法,此时线程才真正的被创建,进入可运行状态,等待CPU的调度。“万事俱备,只欠CPU”。3)运行状态正在运行的线程,此时它拥有CPU的执行权。4)阻塞状态运行状态中的线程,如果正在等待用户输入或调用了SLEEP和JOIN等方法都会导致线程,进入阻塞状态,注意从阻塞状态出来的线程不一定马上回到运行状态,而是重新回到可运行状态,等待CPU的再次调度。5)等待队列状态一个线程调用一个对象的WAIT会自动放弃该对象的锁标记,进入等待队列状态,只有当有另外一线程调用临界资源的NOTIFY或NOTIFYALL方法,建议多使用NOTIFYALL,才会将等待队列中的线程释放,此线程进入锁池状态。6)锁池状态每个对象都有互拆锁标记,以防止对临界资源的访问造成数据的不一致,和数据的不完整性。一个线程拥有一个对象的锁标记后,另一线程想访问该对象,必须在锁池中等待。由系统决定哪个线程拿到锁标记并运行。注意从锁池状态出来的线程不是马上回到运行状态,而是重新回到可运行状态,等待CPU的再次调度。7)终止状态一个线程运行结束后称为终止状态,一个进程中只有所有的线程退出后才会终止。注只有运行状态的线程才有机会执行代码。线程THREAD类的几个方法介绍SETPRIORITYINTNEWPRIORITY)方法设置线程不同的优先级别,通常不建议使用。YIELD方法暂停当前正在执行的线程对象,并执行其他线程。注意调用此方法线程一定是正在运程状态下的线程,调用此方法后该线程主动放弃CPU的执行权,进行可运行状态。SLEEPLONGMILLIS方法在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。这时线程会进入阻塞状态。JOIN方法一个线程T1对另一个线程T2调用了此方法T2JOIN,会导致T1线程进入阻塞,等待线程T2运行完毕后,再开始运行,因此JOIN方法也可以称为把两个线程从并发运行转为串行。7多线程的同步1)多线程并发访问同一个对象(临界资源),如果不对线程进行同步控制,破坏了原子操作,则会造成临界资源的数据不一致。2)任何一个对象都有一个互斥的锁标记和一个锁池。当线程拥有这个对象的锁标记时才能访问这个资源,没有锁标记便进入锁池,保证在同步代码块中只有一个线程,解决了多线程同步控制的问题。3)关键字SYNCHRONIZEDSYNCHRONIZED修饰代码块对括号内的对象O加锁,只有拿到对象锁标记的线程才能进入该代码块。PUBLICVOIDPUSHCHARCSYNCHRONIZEDO原子操作代码SYNCHRONIZED修饰方法在整个方法范围内对当前对象的加锁,只有拿到对象锁标记的线程才能执行该方法。PUBLICSYNCHRONIZEDVOIDPUSHCHARC原子操作代码4)一个线程可以同时拥有多个对象的锁标记,锁标记如果过多,就会出现线程等待其他线程释放锁标记,而又都不释放自己的锁标记供其他线程运行的状况。造成死锁。5)ARRAYLIST是线程不安全的,VECTOR是线程安全的,用ARRAYLIST取代VECTOR类,是因为ARRAYLIST类常用于查询和只读操作,所以不用加同步,如果非要进行读写改变数据操作时,可由使用者通过外同步的方法来限制,以确保安全性。6)静态方法可以是同步方法因为它所锁的并不是当前对象,是类对象。抽象方法不能是SYNCHRONIZED同步的方法。构造方法不能是SYNCHRONIZED同步的方法因为在构造方法还没有生成当前对象。8线程间通信1)任何一个对象除了有一个互斥的锁标记和一个锁池,还有一个等待队列。2)在运行状态中,线程调用WAIT,此时表示线程将释放自己所有的锁标记和CPU的占用,同时进入这个对象的等待队列。等待队列的状态也是阻塞状态,但是线程释放自己的锁标记。3)NOTIFY将从对象的等待池中移走一个任意的线程,并放到锁池中,那里的线程一直在等待,直到可以获得对象的锁标记。NOTIFYALL将从等待池中移走所有等待那个对象的线程并放到锁池中,只有锁池中的线程能获取对象的锁标记。线程从上次因调用WAIT而中断的地方开始继续运行。注只能对加锁的资源进行WAIT和NOTIFY。I/O流1FILE类JAVAIOFILE,在JAVA中文件和目录都属于这个类,而且区分不是非常的明显。注创建一个文件对象和创建一个文件是两个不同的概念。前者是在虚拟机中创建了一个文件,但却并没有将它真正地创建到文件系统中,随着虚拟机的关闭而消失了。而创建一个文件才是在文件系统中真正地建立一个文件。FILEFNEWFILE“1TXT”/在虚拟机中创建一个名为1TXT的文件对象FCREATENEWFILE/在文件系统中真正地创建文件。FILE类的方法请同学们到JAVAIOFILE中查阅。2流的分类1从数据方向分输入流和输出流2从数据类型分字节流和字符流3从流的功能分节点流和过滤流(装饰模式)节点流用来传输数据。过滤流用来封装节点流或者其他过滤流,从而给节点流或其他的过滤流增加一个功能。3常用的I/O流(成对出现)注所有的流用完了一定要调用CLOSE。1)FILEINPUTSTREAM和FILEOUTPUTSTREAM要构造一个FILEINPUTSTREAM,所关联的文件必须存在而且是可读的。FILEINPUTSTREAMINFILENEWFILEINPUTSTREAM“1TXT“要构造一个FILEOUTPUTSTREAM而输出文件已经存在,则它将被覆盖。FILEOUTPUTSTREAMOUTFILENEWFILEOUTPUTSTREAM“1TXT“FILEOUTPUTSTREAMOUTFILENEWFILEOUTPUTSTREAM“1TXT“,TRUE参数为TRUE时输出为添加,为FALSE时为覆盖。INTREADINTREADBYTEINTREADBYTE,INT,INTVOIDWRITEVOIDWRITEBYTEVOIDWRITEBYTE,INT,INT注流的标准写法OUTPUTSTREAMOSNULLTRYSTRINGA“HELLO,WORLD“BYTEBAGETBYTESOSNEWFILEOUTPUTSTREAM“D1TXT“OSWRITEBCATCHIOEXCEPTIONIOEIOEPRINTSTACKTRACEFINALLYIFOSNULLTRYOSCLOSECATCHIOEXCEPTIONEEPRINTSTACKTRACE异常1、异常的定义JAVA将所有的错误封装成为一个类,其根本父类为THROWABLE。异常处理可以提高系统的容错性。THROWABLE有两个子类ERROR和EXCEPTION。ERROR错误,不可避免,不能处理。EXCEPTION分类RUNTIMEEXCEPTION(未检查异常)和非RUNTIMEEXCEPTION(已检查异常)。1)未检查异常是因为程序员没有进行必要的检查,由于程序员的疏忽而引起的异常。对于未检查异常可以不处理,编译可以通过。例JAVALANGARITHMETICEXCEPTION;JAVALANGNULLPOINTEREXCEPTIONJAVALANGARRAYINDEXOUTOFBOUNDSEXCEPTION;JAVALANGNUMBERFORMATEXCEPTION2已检查异常是不可避免的,对于已检查异常必须处理,否则编译不通过。OBJECTTHROWABLE|ERROREXCEPTION|RUNTIMEEXCEPTION非RUNTIMEEXCEPTION2、异常对象的创建关键字THROW格式THROWNEWNULLPOINTEREXCEPTION3、异常的传递当一个方法中出现异常而又没做任何处理,那么这个方法会抛出该异常对象。依次向上层调用者抛出,如果没有处理,一直到传到JVM,虚拟机终止运行。即延着方法调用链反向传递。4、异常的处理(主要是针对已检查异常)消极处理异常的方式方法对指定的异常不作任何处理,直接抛往上一层。1)关键字THROWS,声明异常。2)可以声明多个异常,用逗号隔开。3)格式修饰符返回值方法名(参数表)THROWS要往上层抛的异常。积极处理异常方式1)关键字TRY、CATCH2)格式TRY可能出现异常的代码块CATCHEXCEPTIONE进行处理的代码3)“严格匹配,且只一次”4)CATCH中要求必须先捕获子类异常再捕获父类异常。5)有CATCH块处理异常,所以在程序中出现异常时直接进入CATCH块中处理异常,在TRY块中,抛出异常后的代码不被执行。FINALLY(紧接在CATCH代码块后面)1)FINALLY后的代码块是无论如何都会被执行的代码。一般FINALLY()代码块在写释放资源的代码。2)格式PUBLICSTATICINTMETHODINTITRYRETURNICATCHEXCEPTIONERETURN0FINALLYRETURNI25、自定义异常与一般异常的用法没有区别CLASSMYEXCEPTIONEXTENDSEXCEPTIONPUBLICMYEXCEPTIONSTRINGMESSAGESUPERMESSAGE22HIBERNATE的应用在内存中的数据是短暂的数据,不能够长期储存,而HIBERNATE就是用来解决这个问题的,它是用来把数据进行持久化,然后存储到数据库中去持久化对象,即就是在数据库中存有其相对应数据的对象,并且在内存中也有这个对象,这个对象在SESSION的管理范围内,也就是调用过SAVE方法同步到数据库的对象。临时对象,即在内存中刚刚创建的对象,还没有同步到数据库,或者是数据库中信息被删除了的对象也是临时状态。游离对象,也就是在数据库中有和该对象向对应的纪录,并且在内存中的也存在该对象,但是不在SESSION的管理范围之内,也就是在SESSION关闭之后,就成了游离对象,就不会在将其改变同步到数据库中,如果要使还想令其成为持久化对象就要在把它纳入SESSION管理中,也就是掉用SESSION中的UPDATE方法就可以了。及物的持久化,也就是说针对这个对象的属性进行持久化操作,也就是通过级联进行设置。以下是一对多中一端SET标签的设置INVERSE“TRUE“就是在设置如果在内存中的修改或添加了这个集合中的某一个或某几个对象他不会将全部集合的信息同步到数据库,而是只将集合中被修改的对象重新同步到数据库。CASCADE属性是设置级联操作的也就是在操作一端的数据如果影响到多端数据时会进行级联操作,CASCADE“NONE“,CASCADE“SAVEUPDATE“,CASCADE“DELETE“,CASCADE“ALL“CASCADE“PERSIST“CASCADE“DELETEORPHAN“,CASCADE属性的值常用的设置为以上五项NONE就是不使用级联操作,默认级联是NONE。SAVEUPDATE也就是只有对象保存操作(持久化操作)或者是持久化对象的更新操作,才会级联操作关联对象(子对象)。PERSIST就只是将级联对象也持久化到数据库。DELETE对持久化对象的删除操作时会进行级联操作关联对象(子对象)。ALL对持久化对象的所有操作都会级联操作关联对象(子对象)。ALLDELETEORPHAN,在多端进行删除操作时,会再多端表中留下NULL空纪录,设置了级联操作为DELETE之会将表中表示关联的外键ID置成NULL,不会将这条纪录也删除掉,而把级联设置成DELETEORPHAN就不会留有空纪录,而是级联的把相关纪录删除掉。BATCHSIZE这个属性只能够写在SET标签中,这个属性带表批量加载,也就是在加载一端的集合属性时会一次加载指定的数量的对象,而不是默认的一个一个的加载,会提高效率,批量加载只能用于延迟加载和立即加载策略,也就是(LAZY“TRUE“或者LAZY“FALSE“)。LAZY“TRUE“延迟加载,所谓的延迟加载,就是对一端的集合属性的加载策略,就是在不使用到集合中的对象的数据就不会真正的加载集合中的对象数据,而是家在一个代理对象就相当于的一个空的容器。这也就是会出现LAZYINITIALIZATIONEXCEPTION22JSP的基本应用JSP是HTML和SERVLET的结合升级版,它可以在界面中镶嵌一些JAVA程序代码,从而实现一些功能,在实际的软件开发中,我们一般都不在JSP中镶嵌太多的代码,只用它作为MVC模型框架的VIEW层一JSP简介1JSP的特点(1)JSP里面可以嵌入JAVA代码(2)在运行的时候,JSP被容器翻译成为一个SERVLET,放在APACHETOMCAT5520WORKCATALINALOCALHOST目录下面(3)不需要再在配置文件里面配置(4)文件被修改之后,自动进行重新编译2跟SERVLET的比较1JSP以文本为主,主要用于画界面2JSP可以人工扩充,而SERVLET是固定的3JSP内核是SERVLET,所以也是基于HTTP协议的请求响应循环4由HTML(CSS、XML)、JAVACODE、JSP标签组成5JSP有自定义标签(ASP没有)6CGI和SERVLET以代码为主,代码中嵌文本;JSP中文本中嵌代码7JSP擅长于表现,而短于逻辑;而SERVLET一般用作CONTORLER和DIAPATCH控制和流转;所以在JSP中写界面元素,而逻辑方面由SERVLET完成。8JSP不需要写JAVA文件、不需要编译和配置,它被封装到了容器内部9JSP代码不可重用3JSP的运行过程(1)翻译(转换)阶段JSPJAVA(2)编译阶段JAVACLASS(3)运行阶段运行编译后生成的CLASS文件。以上三个阶段均由JSP引擎来执行;JSP引擎由WEB服务器所提供,它实际上就是一个SERVLET(该SERVLET在CONF/WEBXML中配置)二JSP的脚本元素静态HTML、JAVASCRIPT/声明(DECLARATION)或JSP/代码段SCRIPTLETS或代码/注释COMMENTS或或动态表达式EXPRESSIONS或/指令DIRECTIVES或/非代码动作ACTION自定义标签会调用动作和表达式1声明注意声明的可以是成员变量,方法或内部类。不要用成员变量去做统计,因为如果SERVLET实例是否被销毁是由服务器控制的,如果需要统计,则应该把统计的信息存储到数据库或是文件当中。2代码块()本质上是一个JAVA代码块,里面的注释方式跟JAVA代码一样()该代码块会原封不动的放在SERVLET的_JSPSERVICE()方法中,放置的位置会影响结果,必须保证变量先声明后使用。3表达式()该表达式将被添加到_JSPSERVICE()方法体内,并被转换为OUTPRINTEXPRESSION()“TRUETRUECOMMYSQLJDBCDRIVERJDBCMYSQL/1270013306/GEGEROOTORGHIBERNATEDIALECTMYSQLDIALECTCREATETHREAD在这其中我已经把自动建表的语句注释掉,如果数据库中没有数据库表,可以把自动建表语句打开,这样HIBERNATE就能通过解析映射文件把所有的表都建起来,然后在把自动建表语句关掉即可。这个是映射文件HIBERNATEMAPPINGPACKAGE“COMSKYFLOWERENTITY“里面的主键ID是通过MAPPING文件自动生成的,PROPERTY里面的内容即是类中的属性也是数据库中表的字段名;512查询功能在这个系统面对客户的时候,最终要的一个功能就是进行搜索查询,而且还要能够非常方便的查询到自己想要的鲜花,因此我在系统中做了5中查询的方法当用户登陆到我们的主页面是,就可以看到我们数据库中所有的鲜花以及它们的信息,这里我是在JSP中嵌入了一段JAVA代码如下/HTML/ADDCARTDOMETHODADDCARTQSETSTRING“FLOWERNAME“,NAMELISTLQLISTRETURNL在主界面上设置了一个提交的按钮,当点击按钮时,会提交一个请求,然后调用一个MAPPINGDISPATCHACTION中的FINDBYNAME()方法,系统会字都检查方框格子内的信息,然后把框内的信息拿到数据库中查询,然后把找到的结果显示到界面上来,代码如下PUBLICACTIONFORWARDBYNAMEACTIONMAPPINGMAPPING,ACTIONFORMFORM,HTTPSERVLETREQUESTREQUEST,HTTPSERVLETRESPONSERESPONSETHROWSEXCEPTIONSEARCHFORMSEARCHFORMSEARCHFORMFORMSERVICESERVICENEWSERVICEIMPLTRYLISTLSERVICESEARCHBYFLOWERNAMESEARCHFORMGETFLOWERNAMEIFLNULLHTTPSESSIONSESSIONREQUESTGETSESSIONSESSIONSETATTRIBUTE“L“,LRETURNMAPPINGFINDFORWARD“SEARCH“CATCHRUNTIMEEXCEPTIONEEPRINTSTACKTRACERETURNMAPPINGFINDFORWARD“ERROR“RETURNMAPPINGFINDFORWARD“FIRST“执行完这个程序之后,就可以跳转到下一个界面,同时把查到的花的集合保存下来,以便在下一个页面显示出来面如图这个界面同样也镶嵌了一断JAVA代码添加到购物车这里面的LIST列表不是通过调用DAO里面的方法来实现了而是通过LISTLLISTSESSIONGETATTRIBUTE“L“从上个ACTION中或得了得LIST。按照类型查找,按照颜色查找,按照价格范围来查找,按照是否打折来查找这几种查找方法基本和按照花名得查找方法一样只是传的参数不同方法如下PUBLICLISTFINDBYCOLORS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甜品店后厨承包与品牌形象设计合同
- 财务人员个人敏感信息保护与处理合同
- 车辆检测与维修技术支持合同
- 《项目场地估值与合同约定差异处理合同》
- 高原草场生态保护与可持续发展协议
- 集团企业内部审计与绩效评价合同
- 乐园开业活动方案
- 公司公派工衣管理制度
- 路桥研发中心创白玉兰工程规划方案
- 勘察设计考核管理制度
- 精神科一科一品-多形式健康教育在精神科的运用
- 闪蒸罐计算完整版本
- 物理八年级下册《第3节 摩擦力》课件
- (高清版)DZT 0073-2016 电阻率剖面法技术规程
- 管材、管件供货方案
- 全国伤害监测培训课件
- 中医养生祛湿
- 金属废料加工的废料分类与分拣技术
- 贷款贷款信用证授信协议书
- 人工智能伦理导论- 课件 3-人工智能伦理
- 幼儿园公开课:大班语言《相反国》课件(优化版)
评论
0/150
提交评论