电子教案-轻量级Java-Web整合开发入门_第1页
电子教案-轻量级Java-Web整合开发入门_第2页
电子教案-轻量级Java-Web整合开发入门_第3页
电子教案-轻量级Java-Web整合开发入门_第4页
电子教案-轻量级Java-Web整合开发入门_第5页
已阅读5页,还剩397页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SSH框架概述课程介绍------课程概述本门课程的实践操作性较强,主要锻炼学生的综合实践能力;在实际的JavaEE平台中,使用Struts2+Spring+Hibernate进行整合开发是最为流行的开发平台,这种开发平台也被称为轻量级JavaEE企业应用平台。课程介绍------课程作用综合以前所学知识,运用到实际中在毕业时有一个高起点,找个好工作JOB招聘信息截图招聘信息截图招聘信息截图招聘信息截图课程介绍------课程定位前导课程后续课程java程序设计数据库原理html课程JSP课程数据结构XMLSSH框架本课程J2EE程序设计课程介绍------课程目标、简介能够熟练运用当前流行的java开源框架:Struts、Hibernate以及Spring来构建灵活、易于扩展的多层Web应用程序。课程介绍------课程目标、简介Struts简介Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目struts流程,并在2004年3月成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于JavaEEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。分为Struts1和Struts2,本课程主要讲解Struts2。Struts简介Struts只是一个MVC框架(Framework),用于快速开发JavaWeb应用。Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和定制的Action;也为V(View)提供了一系列定制标签(CustomTag)。Struts几乎没有涉及M(Model),所以Struts可以采用JAVA实现的任何形式的商业逻辑。Spring简介Spring是一个轻型容器(light-weightcontainer),其核心是Bean工厂(BeanFactory),用以构造我们所需要的M(Model)。Spring框架是一个分层架构,由7个定义良好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理bean的方式。Spring简介在此基础之上,Spring提供了AOP(Aspect-OrientedProgramming,面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;WebMVC和SpringWeb提供了JavaWeb应用的框架或与其他流行的Web框架进行集成。Spring简介Hibernate简介Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Hibernate简介Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五个核心接口分别加以介绍。Hibernate简介课程介绍---SSH整合项目演示参考资料Struts官网Hibernate官网Spring官网各种相关论坛、网上资料教材内容介绍基础知识(前提)整合开发(SSH)应用实践(实践)学习方法理解框架的原理;课后多实践练习;充分利用网络资源;有问题多和老师、同学讨论;在实际项目中掌握SSH框架。实践总结再实践轻量级JavaWeb开发概述第1讲轻量级JavaWeb开发概述了解JavaWeb开发基础知识掌握常用JavaWeb服务器用法了解开发相关技术掌握JavaWeb项目的部署课程目标目录1.1Java概述1.2JavaWeb开发概述1.3常用的JavaWeb服务器1.4轻量级JavaWeb开发环境1.5轻量级JavaWeb开发相关技术1.6JavaWeb项目的部署Java概述SunMicrosystems公司于1995年5月推出的一种完全面向对象的程序设计语言。运行Java程序必须先安装JDKJava分为三个开发体系:J2SE:Java2PlatformStandardEdition,主要开发桌面Application应用程序。J2EE:Java2Platform,EnterpriseEdition,主要开发企业级的Web应用程序。J2ME:Java2PlatformMicroEdition,主要开发嵌入式设备的应用程序。目录1.1Java概述1.2JavaWeb开发概述1.3常用的JavaWeb服务器1.4轻量级JavaWeb开发环境1.5轻量级JavaWeb开发相关技术1.6JavaWeb项目的部署JavaWeb项目的基本结构1.手动建立一个JavaWeb项目2.手动部署该JavaWeb项目3.测试该JavaWeb项目的运行4.查看该JavaWeb项目的运行原理轻量级JavaWeb开发概述轻量级,是指该组件或框架启动时依赖的资源较少,系统消耗较小,是一种相对的说法。一般说的轻量级JavaWeb开发,主要是指使用Struts2、Hibernate和Spring这三个框架整合开发的Web项目开发模式,也就是本书所讲的SSH框架开发。经典JavaWeb开发概述重量级,是指该组件或框架启动时依赖的资源较多,系统消耗较大,也是一种相对的说法。通常说的经典JavaWeb开发,是指使用JSF+JPA+EJB这三个框架进行的开发。目录1.1Java概述1.2JavaWeb开发概述1.3常用的JavaWeb服务器1.4轻量级JavaWeb开发环境1.5轻量级JavaWeb开发相关技术1.6JavaWeb项目的部署常用JavaEE服务器Tomcat:和java结合最好,Sun推荐Jetty:可作为嵌入式服务器Resin:目前最快的JSP、Serverlet运行平台Jboss:支持EJB3.0,常与Tomcat和Jetty绑定WebLogic和WebSphere:专业JavaEE服务器安装Tomcat服务器下载Tomcat合适的版本;解压缩下载的zip文件;将解压缩后文件夹放在任意路径下;设置Tomcat所需的环境变量;启动Tomcat(双击安装路径下bin目录中的startup.bat文件)。配置Tomcat服务器的端口Tomcat的默认端口:8080演示修改端口。进入Tomcat的控制台Status控制器Manager控制器部署Web应用有不同的部署方法;WAR(WebArchivefile)是网络应用程序文件是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。直接将相应文件拷贝到webapps目下。Jetty的下载和安装Jetty是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。Jetty的启动目录1.1Java概述1.2JavaWeb开发概述1.3常用的JavaWeb服务器1.4轻量级JavaWeb开发环境1.5轻量级JavaWeb开发相关技术1.6JavaWeb项目的部署环境变量的配置JAVA_HOMECLASSPATH常用的集成开发环境MyEclipseNetBeans目录1.1Java概述1.2JavaWeb开发概述1.3常用的JavaWeb服务器1.4轻量级JavaWeb开发环境1.5轻量级JavaWeb开发相关技术1.6JavaWeb项目的部署JSP技术简介JSP原理JSP内置对象(9个)JSP编译指令(3个)JSP动作指令(7个)数据库技术简介MysqlSQLServerOracleDB2配置文件格式XML格式Annotation格式其他AntMavenSvn目录1.1Java概述1.2JavaWeb开发概述1.3常用的JavaWeb服务器1.4轻量级JavaWeb开发环境1.5轻量级JavaWeb开发相关技术1.6JavaWeb项目的部署JavaWeb项目的部署拷贝部署法war包部署法IDE部署法End设计模式概述第2讲设计模式概述掌握MVC模型了解常用设计模式课程目标目录1单例模式2工厂模式3代理模式4命令模式5策略模式6

MVC单例模式单例模式又叫做单态模式或者单件模式,是设计模式中使用很频繁的一种模式,在各种开源框架、应用系统中多有应用。单例模式中的“单例”通常用来代表那些本质上具有唯一性的系统组件(或者叫做资源)。目录1单例模式2工厂模式3代理模式4命令模式5策略模式6

MVC工厂模式工厂模式在《Java与模式》中分为三类:1.简单工厂模式2.工厂方法模式3.抽象工厂模式简单工厂模式简单工厂模式又称为静态工厂方法模式,它属于创建型模式。在简单工厂模式中,可以根据自变量的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。工厂方法模式工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分类。抽象工厂模式抽象工厂模式的用意是为客户端提供一个接口,可以创建多个产品族(指位于不同产品等级结构中功能相关联的产品组成的家族)中的产品对象。目录1单例模式2工厂模式3代理模式4命令模式5策略模式6

MVC代理模式为其他对象提供一种代理以控制这个对象的访问。简单来说就是在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。目录1单例模式2工厂模式3代理模式4命令模式5策略模式6

MVC命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。目录1单例模式2工厂模式3代理模式4命令模式5策略模式6

MVC策略模式策略模式属于对象行为型设计模式,主要是定义一系列的算法,把这些算法一个个封装成拥有共同接口的单独类,并且使他们之间可以互换。策略模式让算法独立于使用它的客户而变化,也称为政策模式。策略模式是一种对象行为型模式。目录1单例模式2工厂模式3代理模式4命令模式5策略模式6

MVCModel1和Model2Model1Model2MVC模式MVC思想及其优势MVC思想是Web项目的普遍模式更符合软件工程思想更利于后期的维护EndStruts2框架第3讲Struts2框架会下载和安装Struts2掌握Struts2的基础支持掌握Struts2的标签库了解Struts2的高级应用课程目标目录1Struts2框架概述2Struts2框架的基本用法3Struts2框架的标签库4Struts2框架的高级应用5本讲小结Struts项目简介Apache基金会Jakarta项目组的一个开源项目,采用MVC模式;主要技术:Servlet+JSP技术优点:标签库+页面导航Struts2的由来Struts+WebWork=Struts2Struts2中WebWork占的比重更多些Struts2的优势集中了MVC领域最强大的两个社区的力量,其技术水平可谓绝无仅有;国内Java领域庞大的用户数量支撑,影响力巨大;发展已久,较为成熟。下载与安装Struts2/release/2.3.x/index.html部署Struts2自带的例子发布Struts2自带的例子Struts2执行的流程图目录1Struts2框架概述2Struts2框架的基本用法3Struts2框架的标签库4Struts2框架的高级应用5本讲小结Struts2应用的开发步骤添加Struts的8个jar包(2.3.16)在web.xml文件中定义filter编写视图资源,jsp文件定义处理用户请求的Action类在struts.xml文件中配置Action类配置处理结果和物理视图资源之间的关系Struts2的处理流程浏览器发送一个请求。核心控制器FilterDispatcher根据请求决定调用合适的Action。WebWork的拦截器链自动对请求应用通用功能,如验证等。回调Action的execute方法,该execute方法根据请求的参数来执行一定的操作。Action的execute方法处理结果信息将被输出到浏览器中,支持多种形式的视图。Struts2框架的Action接口对于Struts2应用的开发者而言,Action才是应用的核心,开发者需要提供大量的Action类,并在struts.xml文件中配置Action映射关系。Action类里包含了对用户请求的逻辑处理,所以Action类也被称为业务控制器。对于开发者来说,可以在自定义的Action类里面对上述Action接口进行实现,或者直接继承系统已经封装好的一个类----ActionSupport。Struts2框架的配置文件web.xmlstruts.xmlStruts2的常量配置通常使用struts.properties文件管理常量该文件定义系列的key-value对如:name=张三注意struts.properties文件的路径通常放在web应用的WEB-INF/classes下常用的常量介绍Struts.i18n.encodingStruts.ui.theme其他常量93Struts2的常量配置Struts2配置常量共有三种方式:通过struts.properties文件通过struts.xml文件通过Web应用的web.xml文件Struts2框架按照如下搜索顺序加载常量struts-default.xmlstruts-plugin.xmlstruts.xmlstruts.propertiesweb.xmlStruts2的配置文件介绍perties:定义框架自身的全局变量。struts-default.xml:定义框架自身使用的action映射及result定义。struts-plugin.xml:struts插件使用的配置文件,比如当使用struts和spring结合时就需要在web.xml中引用该配置文件。struts.xml:定义应用自身使用的action映射及result定义;当然我们一般将应用的各个模块分配到不同的配置文件中。目录1Struts2框架概述2Struts2框架的基本用法3Struts2框架的标签库4Struts2框架的高级应用5本讲小结Struts2的标签简介Struts2提供的标签库功能非常强大,而且非常好用。使用标签来开发可以使得页面更加整洁容易维护,同样可以减少代码量以及开发时间。Struts2提供的标签非常之多,其大致分为两类:一类是非用户界面标签,也称为非UI标签(通用标签)。控制标签:条件、循环等流程控制数据标签:数据存储和处理一类是用户界面标签,也称为UI标签。表单标签:主要用于生成HTML的表单非表单标签:如显示日期、树形菜单通用标签之控制标签逻辑控制标签主要用来完成流程控制,如分支和循环操作。也可以用来对集合进行合并、排序等操作。通用标签之控制标签Struts2提供了三个标签用于进行分支流程控制,分别是if标签、elseif标签、else标签。其中if标签、elseif标签提供了一个test属性用来进行判断。if/elseif/else标签的使用和Java语言中的if-elseif-else流程控制语言使用上是基本类似的。实例演示通用标签之逻辑控制标签Struts2提供iterator标签用来对集合进行遍历,这里所说的集合包括List、Set和数组以及Map。实例演示(判断成绩分类)通用标签之逻辑控制标签Struts2中提供append标签用于将多个集合拼接组合成一个集合。merge标签同append标签类似,也是用来组合集合成一个新集合。generator可以将指定的字符串分隔成多个子字符串,并将这些子字符串放置到一个集合中。通用标签之逻辑控制标签subset标签用来取得集合的子集sort标签用来通过指定的Comparator对集合中的元素进行排序通用标签之数据访问标签数据访问标签用来访问ValueStack中的数据,从而完成数据访问相关功能。例如通过action标签可以用来显示Action中的属性,通过bean标签允许直接在JSP页面中创建JavaBean实例等。每个Action类的对象实例会拥有一个ValueStack对象。当Struts2接收到一个.action的请求后,会先建立Action类的对象实例,并且将Action类的对象实例压入ValueStack对象中。setValue和findValue方法可以设置和获得Action对象的属性值。通用标签之数据访问标签action标签用来在JSP页面中调用Action,通过指定设置其executeResult属性为true,能将处理结果对应的视图资源包含到JSP页面中。Struts2提供bean标签允许直接在JSP页面中创建JavaBean实例,可以使用param标签在该JavaBean实例传入属性值,也可以通过property标签输出该JavaBean实例的属性值。通用标签之数据访问标签property标签set标签push标签通用标签之数据访问标签Struts2提供include标签用于将JSP页面,或者Servlet包含到该页面中。Struts2提供url标签用来生成一个URL地址。其他标签UI标签简介Struts2提供了丰富的UI标签,使用这些标签可以实现非常好的显示效果。同时Struts2的UI标签都是基于主题和模板的,通过使用不同的主题或模板就能显示不同的显示效果。模板:一个文件,能被特定标签输出主题:一系列的模板打包。UI标签之通用属性所有的表单标签可以分为两种:form标签本身和单个表单元素的标签。所有表单标签处理类都继承了UIBean类,UIBean包含了一些通用属性,这些通用属性分成3种:模板相关属性;javascript相关属性;

通用属性。UI标签之表单标签form标签textfield标签textarea标签checkbox标签select标签......UI标签之非表单标签输出一些表单以外的HTML元素包括:1,a:生成一个超链接2,actionerror:如果Action实例的getActionErrors()方法返回不为null,则该标签负责输出该方法返回的系列错误。3,actionmessage:如果Action实例的getActionMessages()方法返回不为null,则该标签负责输出该方法返回的系列消息。4,component:使用此标签可以生成一个自定义组件。5,div:此标签负责生成一个div片段6,fielderror:如果Action实例存在表单域的类型转换错误,校验错误,该标签则负责输出这些错误提示。7,tabbedPanel:生成HTML页面的Tab页。8,tree:生成一个树形结构。9,treenode:生成树形结构的节点。.......目录1Struts2框架概述2Struts2框架的基本用法3Struts2框架的标签库4Struts2框架的高级应用5本讲小结Struts2的类型转换自动类型转换自定义类型转换为什么需要类型转换?在Web世界中输入输出是没有类型概念的,任何数据类型都被作为字符串处理;但是在后台进行数据处理时,需要对前台的数据进行类型转换。Struts2中的类型转换Struts2的类型转换是基于xwork的;对基本类型的转换可以自动完成;对用户自定义类型的转换需要在后台进行相应处理。Struts2的自动类型转换Struts2内建的类型转换(双向)StringtoStringinttoStringdatetoStringetc实际操作演示Struts2的自动类型转换基于OGNL的类型转换Action里面定义复合类型的对象前台Jsp中使用OGNL访问如:user.username…实际操作演示制作局部类型转换器的步骤1.自定义转换类继承DefaultTypeConverter

重写convertValue(Mapcontext,Objectvalue,ClasstoType)方法

或继承StrutsTypeConverter类重写ObjectconvertFromString(Mapcontext,String[]values,ClasstoClass)和StringconvertToString(Mapcontext,Objecto)方法2.配置文件:

文件名:Action类名-perties

需要和对应Action在同一目录下

文件内容:

属性名=转换类名

(多个属性就写多行)制作全局类型转换器的步骤1.

同局部类型转换器的步骤相同2.配置文件:

文件名:perties文件内容:需要类型转换的自定义类名=转换类名自定义类型转换器演示用户自定义类型转换MyPointtoStringStringtoMyPoint实际操作演示表单输入界面(简单)自定义类MyPoint定义转换类1后台Action设置局部转换设置全局转换定义转换类2表单输入界面(复杂)Action类的定义使用泛型的类型转换(推荐)定义转换类3(泛型)输出成功界面(泛型)类型转换中的错误处理全局处理在应用的国际化资源文件中重写该变量值xwork.default.invalid.fieldvalue={0}类型转化错误局部处理在ActionNperties中重写该变量值invalid.fieldvalue.属性名=提示的错误信息实际操作演示Struts2的输入校验语法校验语义校验校验的概念校验的定义:对异常输入的过滤校验的分类客户端校验过滤用户的误操作主要通过JavaScript代码完成速度快,不和服务器交互服务器端校验校验逻辑错误通过在服务器端编码实现需要和服务器交互Struts2的输入校验之服务器端校验手动校验validate()方法属于硬编码方式框架校验以xml文件的形式分为字段校验和非字段校验框架校验-xml头文件<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN""/xwork/xwork-validator-1.0.2.dtd">......框架验证-dtd文件框架验证-字段校验示例框架验证-字段校验示例框架验证-非字段校验框架验证-验证器的短路框架验证-内建校验器Struts2提供了大量的内建校验器,可以满足大部分应用的校验需求。开发者只需要使用这些校验器即可。开发者也可以自定义校验器。框架验证-内建校验器必填校验器:required必填字符串校验器:requiredstring整数校验器:int,long,short日期校验器:date表达式校验器:expression邮件地址校验器:email其他内建校验器不同方法的校验(validate方法)不同方法的校验(框架校验)执行Action中的方法名称校验XML文件名称默认:execute()Action名称-validation.xml其他方法:如abc()Action名称-abc-validation.xml注意:该种验证方式,会先执行Action名称-validation.xml文件struts2提供的客户端校验1.form主题(theme)不能为simple2.将form的validate设为true3.最好不要使用struts2提供的客户端校验Struts2所支持的其他类型客户端校验纯JavaScript客户端校验更灵活,速度更快推荐使用Ajax客户端校验可以不刷新页面显示错误信息需要使用ajax主题客户端校验-JavaScriptStruts2的文件上传下载文件上传文件下载使用Struts2控制文件上传为了能上传文件,必须将表单的method设置为POST,将enctype设置为multipart/form-data步骤实现文件上传的Action配置文件上传的Action实现文件过滤手动实现拦截器实现修改错误提示实际操作演示使用Struts2控制文件上传如果表单中包含一个name为xxx的文件域,则对应Action需要三个属性来封装该文件域的信息类型为File的xxx属性:文件内容类型为String的xxxFileName属性:文件名类型为String的xxxContentType属性:文件类型使用Struts2控制文件上传<center><h1>Struts2完成上传</h1><formaction="upload.action"method="post"enctype="multipart/form-data"><table><tr><td>用户名:</td><td><inputtype="text"name="username"></td></tr><tr><td>上传文件:</td><td><inputtype="file"name="myFile"></td></tr><tr><td><inputtype="submit"value="上传"></td><td><inputtype="reset"></td></tr></table></form></center>使用Struts2控制文件上传使用Struts2控制文件上传注意上传文件是放在Web服务器的相应路径下面设置上传文件的大小限制<constantname=“struts.multipart.maxSize”value=“设置值”></constant>设置值的单位为字节byte默认值为2MB使用Struts2控制文件下载Struts2提供了stream结果类型,该结果类型就是专门用于支持文件下载功能的。步骤实现文件下载的Action配置文件下载的Action下载前的授权控制实际操作演示使用Struts2控制文件下载使用Struts2控制文件下载contentType内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片inputName下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取值为inputStream的属性需要编写getInputStream()方法contentDisposition文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。取值为:attachment;filename="struts2.txt",表示文件下载的时候保存的名字应为struts2.txt。如果直接写filename="struts2.txt",那么默认情况是代表inline,浏览器会尝试自动打开它,等价于这样的写法:inline;filename="struts2.txt"bufferSize下载缓冲区的大小教材例子直接使用Html文件不能实现文件名中带有汉字的文件下载使用struts2的action则可以一个综合性的文件上传下载例子操作演示Struts2的拦截器拦截器体系是Struts2框架的重要组成部分大量的内置拦截器完成了框架大约70%的工作params拦截器:负责解析参数和赋值工作I18n拦截器:负责把所选locale放入用户sessiontimer拦截器:输出action的执行时间token拦截器:防止重复提交其他内置拦截器Struts2已经默认启用了大量通用功能的拦截器(通过继承struts-default包实现)Struts2的拦截器机制拦截器是AOP中的概念,它本身是一段代码,可以通过定义“织入点”,来指定拦截器的代码在“织入点”的前后执行,从而起到拦截的作用。正如Struts2的Reference中讲述的,Struts2的Interceptor,其拦截的对象是Action代码,可以定义在Action代码之前或者之后执行拦截器的代码。Struts2的拦截器机制Struts2的拦截器机制1.整个结构就如同一个堆栈,除了Action以外,堆栈中的其他元素是Interceptor。2.Action位于堆栈的底部。由于堆栈"先进后出"的特性,如果我们试图把Action拿出来执行,我们必须首先把位于Action上端的Interceptor拿出来执行。这样,整个执行就形成了一个递归调用3.每个位于堆栈中的Interceptor,除了需要完成它自身的逻辑,还需要完成一个特殊的执行职责。这个执行职责有3种选择:1)中止整个执行,直接返回一个字符串作为resultCode2)通过递归调用负责调用堆栈中下一个Interceptor的执行3)如果在堆栈内已经不存在任何的Interceptor,调用ActionStruts2的拦截器机制配置拦截器定义拦截器的格式<interceptorname=“拦截器名”class=“拦截器实现类”/>可以把多个拦截器配置为一个拦截器栈使用拦截器的格式<action……><interceptor-refname=“拦截器(栈)名1”/><interceptor-refname=“拦截器(栈)名2”/>……</action>拦截器栈介绍作用:把多个拦截器或拦截器栈配置在一个拦截器栈内,方便用户调用;拦截器栈可以由多个拦截器组成;也可以由别的拦截器栈和拦截器等组成

<interceptor-stackname="myStack">

<interceptor-refname="myInterceptor1"></interceptor-ref>

<interceptor-refname="myInterceptor2"></interceptor-ref>

<interceptor-refname="defaultStack"></interceptor-ref>

</interceptor-stack>

用户自定义拦截器的步骤自定义拦截器类需要实现erceptor.Interceptor接口或者是继承AbstractInterceptor类实现或是重载interceptor(ActionInvocation)方法在struts.xml文件中定义拦截器在struts.xml文件中使用拦截器实际操作演示用户权限验证拦截器当浏览者需要请求执行某个操作时,应用需要先检查浏览者是否已登录,以及是否有足够的权限来执行该操作实际操作演示权限拦截器部分代码 Objectobj=ActionContext.getContext() .getSession().get("username"); StringstrName=obj!=null?obj.toString():""; if(strName.equals("abc")) { System.out.println("action执行前"); Stringstr=invocation.invoke(); System.out.println("action执行后"); returnstr; } else {return"input";}目录1Struts2框架概述2Struts2框架的基本用法3Struts2框架的标签库4Struts2框架的高级应用5本讲小结本讲小结Struts2概述Struts2的下载和安装Struts2的基础知识Struts2的高级应用EndHibernate框架第4讲Hibernate框架掌握Hibernate基础应用了解Hibernate高级应用课程目标目录1Hibernate框架概述2Hibernate框架的基本用法3Hibernate框架的高级应用4本讲小结Hibernate概述Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。JDBC简介JDBC(JavaDataBaseConnectivity)是一种用于执行SQL语句的JavaAPI。JDBC提供的主要接口:DriverManager类Connection类Statement类PreparedStatement类ResultSet类使用JDBC访问数据库的步骤(1)加载JDBC驱动(2)实例化数据库连接驱动类(3)建立数据库连接,取得Connection对象(4)建立Statement对象或PreparedStatement对象.(5)执行SQL语句(6)访问结果记录集ResultSet对象(7)依次将ResultSet,Statement,PreparedStatement,Connection对象关闭,释放所占用的资源。对直接使用JDBC的反思直接使用JDBC操作数据库的步骤很繁琐。JDBC操作的是关系型数据库。用JAVA开发程序,则使用面向对象的思想。Hibernate正是在这两种不同的模型之间建立关联,Hibernate给我们提供了利用面向对象的思想来操作关系型数据的接口。持久化和持久化层在Java中将对象自动持久化到数据库中,我们需要了解两个概念。持久化:就是对数据和程序状态的保持。大多数情况下特别是企业级开发应用时,数据持久化往往也就意味着将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系型数据库来完成的。持久化层:把数据库实现当作一个独立逻辑拿出来,即数据库程序是在内存中的,为了使程序运行结束后状态得以保存,就要保存到数据库。持久化层是在系统逻辑层面上,专注于实现数据持久化的一个相对独立的领域。关系型数据库和面向对象的冲突面向对象是从软件工程基本原则(如耦合、聚合和封装)的基础上发展起来的。关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。Java是完全面向对象的语言,这个冲突就表现的越发明显。ORM介绍ORM的全称是Object/RelationMapping,即对象/关系映射。ORM是一种规范、模型、思想。具体的ORM框架可作为应用程序和数据库的桥梁。目前ORM的产品非常多,比如Apache组织下的OJB,Oracle的TopLink、JDO和JPA等,当然还包括本章介绍的Hibernate。ORM带来了什么ORM并不是一种具体的产品,而是一类框架的总称,它概述了这类框架的基本特征:完成面向对象的程序设计语言到关系数据库的映射。基于ORM框架完成映射后,既可利用面向对象程序设计语言的简单易用性,又可利用关系数据库的技术优势。流行的ORM框架EnitiyEJB:EnitiyEJB实际上也是一种ORM技术,这是一直备受争议的组件技术。事实上,EJB为JavaEE的蓬勃发展赢得了极高的声誉,EJB作为一种重量级、高花费的ORM技术具有不可比拟的优势。就其他架构设计来讲,依然非常优秀。即使现在十分流行的轻量级JavaEE架构,其实质是对经典JavaEE架构的模仿——虽然存在些许的改进。EJB3.1也采取了低侵入式的设计,增加了Annotation,也具有极大的吸引力。Hibernate:目前最流行的开源ORM框架,已经被选作JBoss的持久层解决方案。整个HIbernate项目也一并投入了Jboss的怀抱,而JBoss又加入了RedHat组织,所以现在Hibernate属于RedHat的一部分。Hibernate灵巧的设计、优秀的性能,还有其丰富的文档都是其风靡全球的重要因素。iBatis:Apache软件基金组织的子项目。与其称它为一种ORM框架,不如称它为一中“SQLMapping”框架。曾经在J2EE的开发中扮演非常重要的角色,但因为不支持存粹的面向对象操作,因此现在逐渐地被取代。但是在一些公司,依然占有一席之地,特别是一些对数据访问特别灵活的地方,iBatis更加的灵活,它允许开发人员直接编写SQL语句。TopLink:Oracle公司的产品,作为一个遵循OTN协议的商业产品,TopLink在开发过程中可以自由地下载和使用,但是一旦作为商业产品被使用,则需要收取费用。由于这一点,TopLink的市场占有率不高。OBJ:Apache软件基金组织的子项目。另一个开源的ORM框架,可以说是Apache作为iBatis之后的取代产品,也是非常优秀的O/RMapping框架,但是由于Hibernate的广芒太盛,所以并未有广泛的使用,而且由于OJB的开发文档不是很多,这也影响了OJB的流行。Hibernate的优势开源免费的License,方便需要时研究源代码,改写源代码,进行功能定制。轻量级封装,避免引入过多复杂的问题,调试容易,减轻程序员的负担。具有可扩展性,API开放。功能不够用时,自己进行编码扩展。开发者活跃,有稳定的发展保障。Hibernate与O、R之间的关系JPA的概念JPA(JavaPersistenceAPI,Java持久化API)是SUN官方提出的Java持久化规范,hibernates就是依据它实现的。它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据库。学习Hibernate的步骤下载与安装Hibernate下载与安装HibernateHibernate4

下载列表(旧版)安装和配置MySql下载MySQL数据库http://dev.MySQL.com/downloads/安装MySQL数据库配置MySQL数据库默认用户名root,密码admin(自定义)使用MySQL数据库掌握MySql常用命令安装NavicatforMySQL(前端工具)下载MySQL的JDBC驱动第一个Hibernate程序Hibernate实例演示用Hibernate直接创建表先创建数据库(手动完成)再创建数据库表(程序完成)从代码生成数据库表在代码中操作数据库表//读取hibernate.cfg.xml文件Configurationcfg=newConfiguration().configure();//创建SessionFactorySessionFactoryfactory=cfg.buildSessionFactory();Sessionsession=null;try{session=factory.openSession();//开启事务session.beginTransaction();Useruser=newUser();user.setName("张三");user.setPassword("123");user.setCreateTime(newDate());user.setExpireTime(newDate());//保存数据session.save(user);//提交事务session.getTransaction().commit();}catch(Exceptione){e.printStackTrace();//回滚事务session.getTransaction().rollback();}finally{if(session!=null){if(session.isOpen()){session.close();}}}}hibernate.cfg.xml(范例)<!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><propertyname="connection.username">root</property><propertyname="connection.password">admin</property><propertyname="connection.url">jdbc:mysql://:3306/java2Db</property><propertyname="dialect“>org.hibernate.dialect.MySQLDialect</property><propertyname="connection.driver_class“>com.mysql.jdbc.Driver</property><propertyname="hbm2ddl.auto">update</property><propertyname="show_sql">true</property><propertyname="format_sql">true</property><mappingresource="com/bean/User.hbm.xml"/></session-factory></hibernate-configuration>其他自动生成Hibernate映射文件Hibernate自动生成配置文件操作演示补充知识:Java的单元测试加载JUnit.jar包注意JUnit3和Junit4的区别JUnit3的测试类需要继承TestCaseJUnit4的方法前使用@TestJUnit4的@Before和@After建立一个独立的源代码包(可选)在子类中进行测试方法的编写方法必须是public类型的方法的返回值一般为void可以以方法为粒度进行测试目录1Hibernate框架概述2Hibernate框架的基本用法3Hibernate框架的高级应用4本讲小结Hibernate体系结构简要的Hibernate体系架构Hibernate全面解决方案体系架构Hibernate全面解决方案架构解释SessionFactory:单个数据库映射关系经过编译后的内存镜像。Session:它是应用程序和持久存储层之间交互操作的一个单线程对象持久化对象:处于持久化状态的对象瞬态对象和脱管对象:系统进行new关键字进行创建的Java实例,没有Session相关联,此时处于瞬态事务(Transaction):代表一次原子操作,它具有数据库事务的概念连接提供者(ConnectionProvider):生成JDBC的连接的工厂,同时具备连接池的作用事务工厂(TransactionFactory):生成Transaction对象实例的工厂Hibernate的配置Configuration对象org.hibernate.cfg.Configuration实例代表一个应用程序到SQL数据库的映射配置,Configuration提供了一个buildSessionFactory()方法,该方法可以产生一个不可变的SessionFactory对象。配置Hibernate的方式使用perties文件作为配置文件。使用hibernate.cfg.xml文件作为配置文件。不使用任何的配置文件,以编码方式来创建Configuration对象。Hibernate的配置JDBC连接属性配置数据库方言配置JNDI数据源的连接属性配置Hibernate事物属性配置二级缓存相关属性配置外连接抓取属性配置其他常用的配置JDBC连接配置中最重要的设置hibernate.connection.driver_class:设置连接数据库驱动。hibernate.connection.url:设置所连接数据库服务的URL。hibernate.connection.username:连接数据库的用户名。hibernate.connection.password:连接数据库的密码。hibernate.connection.pool_size:设置hibernate数据库连接池的最大并发连接数。hibernate.dialect:设置数据库连接所使用的方言。其他常用的配置属性hibernate.show_sql:是否在控制台输出Hibernate生成的SQL语句,只能为true或者false两个值hibernate.format_sql:是否将SQL语句转换成格式良好的SQL语句。hibernate.use_sql_comments:是否在Hibernate生成的SQL语句中添加有助于调试的注视,只接受true和false两个值。hibernate,jdbc.fetch_size:指定JDBC抓取数量的大小,它可以接受一个整数值,其实质是调用Statement.setFetchSize()方法。hibernate.jdbc.batch_size:指定Hibernate使用JDBC2的批量更新的大小,它可接受一个整数值,建议是取5到30之间。hibernate.connection.autocommit:设置是否自动提交。通常不建议自动提交。hibernate.hbm2ddl.auto:设置当创建SessionFactory是,将Drop刚建的数据表。该属性可以是update、create和drop-create三个值。持久化类的要求提供一个无参的构造器提供一个标识属性标识属性的类型尽量避免基本类型为持久化类的每个属性添加set和get方法使用非final类重写equal()和hashCode()方法持久化对象的状态持久化对象PO=POJO+映射文件PO可有以下的3种状态。瞬态:如果PO实例从未与Session实例关联过,该实例处于瞬态状态。持久化:如果PO实例与Session实例关联起来,且该实例关联到数据库的记录。

脱管:如果PO实例曾经与Session实例关联过,但是因为Session的关闭等原因,PO实例脱离了Session的管理,这种状态被称为脱管状态。对PO的操作必须在Session的管理下才能同步到数据库,Session由SessionFactory工厂产生,SessionFactory是数据库编译后的内存镜像,通常一个对应一个SessionFactory对象。SessionFactory对象是由Configuration对象生成,Configuration负责加载Hibernate配置文件。持久化对象的状态瞬态:对象由new操作符创建,且尚未HibernateSession关联的对象被认为处于瞬态。瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识,如果程序中失去了瞬态对象的引用,瞬态对象将会被垃圾回收机制销毁。使用HibernateSession可以将其变为持久化状态。持久化对象的状态持久化:持久化实例在数据库中有对应的记录,并且拥有一个持久化标识。持久化的实例是可以刚刚保存的,也可以是刚刚被加载的,无论那一种,持久化对象都必须与指定的hibernateSession关联。hibernate会检测到处于持久化状态对象的改动,在当前操作执行完成时将对象数据写回数据库。开发者不需要手动执行UPDATE。持久化对象的状态脱管:某个实例曾属于持久化状态,但随着与之关联的Session被关闭,该对象就变为了脱管态。对脱管对象的引用依然有效,对象可以被继续修改。如果让脱管对象与某个Session关联,那么这个脱管态对象将会重新转换为持久化状态,而脱管态期间的改动也不会丢失,也可被写入数据库。正是因为这个原因,逻辑上的长事务成为了可能,它被称为应用程序事务。即事务可以跨越用户的思考,因为当对象处于脱管态,对该对象操作无须锁定数据库,不会造成性能的下降。持久化对象的状态迁移Get方法和Load方法的区别get():立即加载对象的属性立即从数据库中去查找load():延迟加载对象的属性只有在使用的时候才从数据库中去查找实际操作演示映射文件的基本结构<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping><classname="类路径.类名"><idname="id">………</id><propertyname="name"/>…..</class></hibernate-mapping>Hibernate映射文件基本结构<hibernate-mapping.../>根元素持久化类的标识属性<id.../>元素的属性映射普通属性的<property.../>元素映射集合属性持久化类的标识属性在数据库表中通过主键实现记录识别的唯一性,而Hibernate中的持久化对象则通过标识符属性来实现唯一性识别。Hibernate中的标识符属性也可称为hibernate主键,它赋予每个持久化对象独一无二的数值,所以可以认为标识符属性是数据库主键的等价物。Hibernate的主键生成器increment:由Hibernate在内存中生成主键,每次增量为1,不依赖于底层的数据库identity:采用数据库生成的主键,用于为long、short、int类型生成唯一标识sequence:DB2、Oracle均支持的序列,用于为long、short或int生成唯一标识hilo:使用一个高/低位算法生成的long、short或int类型的标识符native:根据底层数据库的能力,从identity、sequence、hilo中选择一个,灵活性更强uuid:使用一个128-bit的UUID算法生成字符串类型的标识符,32位的字符串映射普通属性Hibernate使用<property../>元素来映射普通属性必选属性:name可选属性:type、update、insert、formula、access、lazy、not-null、optimistic-lock、unique、length等type属性简单介绍属性映射的类型--typeHibernate的内置类型通常使用和Java类型相同的名字,它能够把Java基本类型、Java日期和时间类型、Java大对象类型及JDK常用的Java类型映射到相应的标准SQL类型;Java通过Hibernate访问数据库,而Hibernate又通过JDBC访问数据库,而JDBC对底层数据库SQL类型进行封装,向上提供标准的SQL类型接口,这样Hibernate就可以根据底层数据库的方言,把标准SQL类型转换为底层数据库类型。类型映射注意事项在映射文件中,映射类型可以是Java类型,或是Hibernate类型。若需要映射类型,一定要书写正确;如果使用Java类型,则需添加全路径(即包括包名的路径)。映射集合属性List集合属性的映射数组属性的映射Set集合属性的映射Bag元素映射Map属性映射映射集合属性有序集合的属性在增加、删除、修改中拥有较好的性能表现。因为数组的长度不可变,所以无法使用延迟加载。通常认为List、Map作为集合元素的性能较高,Set紧随其后,数组最差。映射属性演示映射普通属性实际操作演示映射集合属性实际操作演示自动生成Hibernate映射文件使用MyEclipse自动生成映射文件实际操作演示SessionFactory类的封装SessionFactory是重量级对象,不要频繁创建实际操作演示JPAAnnotation介绍从JDK1.5开始,java增加了Annotation支持。Hibernate提供了hibernateannotation扩展包,它是用来替换复杂的hbm.xml文件,使得hibernate程序开发大大简化。程序中只要添加相应jar包即可。当采用Annotation来管理实体类之后,可以得到如下公式:PO=POJO+@AnnotationJPAAnnotation用法@Id声明属性为主键@GeneratedValue表示主键是自动生成策略,一般该注释和@Id一起使用@Entity任何hibernte映射对象都要有次注释@Table(name=“tablename”)类声明此对象映射到哪个表@Column(name=“Name”,nullable=false,length=32)声明数据库字段和类属性对应关系JPAAnnotation用法@Lob声明字段为Clob或Blob类型@OneToMany@ManyToOne@Temporal(value=TemporalType.DATE)做日期类型转换@Transitent表示此属性不做映射@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)表示此对象应用缓存JPAAnnotation介绍对于持久化类属性的Annotation,可以写在属性的定义处上面,也可以写在该属性的get方法前面。实际操作演示JPAAnnotation实例目录1Hibernate框架概述2Hibernate框架的基本用法3Hibernate框架的高级应用4本讲小结关联关系的概念客观世界中的对象很少有孤立存在的,如果把他们作为实例,那么这种实例之间的互相访问就是关联关系。关联关系是面向对象分析、面向对象设计最重要的知识,hibernate完全可以理解这种关联关系,并且对不同的关联关系提供了很好的支持。关联关系的分类单向关联:只能单向访问关联端单向1-1单向1-N单向N-1单向N-N双向关联:关联的两端可以互相访问双向1-1双向1-N双向N-N以下以单向关联关系为例介绍单向N-1映射关系实体类定义在N端定义1端的一个实例映射文件定义(N端)<many-to-onename=“N端定义的1端属性名”column=“N端生成的外键列名"></many-to-one>单向N-1映射关系实例演示N-1学生对班级相应CRUD操作演示单向1-N映射关系实体类定义在1端定义N端的实例集合(一般是Set类型)映射文件定义(1端)<setname="students"><keycolumn="classesid"/><one-to-manyclass="Student"/></set>单向1-N映射关系实例演示1-N班级对学生相应CRUD操作演示N-1和1-N总结N-1关联映射:在N端加入一个外键指向1端,它维护的关系是N指向11-N关联映射:在N端加入一个外键指向1端,它维护的关系是1指向N也就是说1-N和N-1的映射策略是一样的,只是站的角度不同N-1和1-N生成的数据库表是一样的,都是在N端生成一个外键列单向1-1映射关系实体类定义在1端定义另一个1端的实例映射文件定义<one-to-onename=“name”>标签constrained=“true”,表明当前主键上存在一个约束,一般是外键约束或者是<many-to-one>的基础上添加unique=true单向1-1映射关系实例演示1-1学生对学号学号对学生相应CRUD操作演示单向N-N映射关系实体类定义在每个N端定义另一个N端的实例集合,一般是Set类型映射文件定义<setname="roles"table="t_user_role"><keycolumn="userid"/><many-to-manyclass=“另N端类路径"column="roleid"/></set>单向N-N映射关系实例演示N-N学生对课程课程对学生相应CRUD操作演示双向映射关系概述在两端都添加上映射关系可以通过指定inverse=“true”来确定哪端

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论