还剩35页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
第1章Web应用开发简介习题答案1.Web在组成上包括______和______两部分答案服务器客户端2.谈谈对面向对象的认识答案面向对象将将要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙解决问题中的各个步骤中的行为面向对象编程方式是建立在面向过程编程方式基础上,其最重要的改变在于面向对象编程中,程序将围绕被操作的对象来设计,而不是操作本身面向对象编程方式以类作为构造程序的基本单位,具有封装、抽象、继承、多态性等特点3.介绍几种常用的框架技术答案Java中常用的框架1.StrutsStruts是Apache基金会Jakarta项目组的一个开源项目,是一个基于SunJ2EE平台的MVC框架,它将Servlet和JSP标签作为实现自身功能的一部分2.WebWorkWebWork是由OpenSymphony组织开发的,是一个基于Web的MVC框架它在运行时通过Interceptor(拦截器)自动应用,因此脱离了Action类3.Struts2Struts2是Apache基金会的一个开源项目,它建立在Struts框架与WebWork框架基础之上,继承了二者的优点,是目前非常流行的一个Web框架4.SpringSpring是一个以IoC和AOP为核心的轻量级容器框架它提供了一系列的JavaEE开发解决方案,包括表示层的SpringMVC、持久层的SpringJDBC以及业务层事务管理等众多的企业级应用技术5.HibernateHibernate是一个ORM(对象关系映射)框架,它对JDBC进行了轻量级的封装通过使用Hibernate框架,开发人员能够以面向对象的思维方式来操作数据库6.Ibatis相对于Hibernate而言,Ibatis是一个“半自动化”的ORM实现框架,它主要致力于POJO与SQL之间的映射关系,是对“全自动化”ORM框架的一种有益补充7.EasyJWebEasyJWeb是一个核心基于模板技术实现的MVC框架,主要致力于JavaWeb应用程序的快速开发4.IDE的用途是什么?答案IDE是一种用于辅助开发人员开发应用程序的应用软件,它一般包括代码编辑器、编译器、调试器和图形用户界面工具,有的还包括版本控制系统、性能分析器等更多工具,因此IDE也就具有了编写、编译、调试等多种功能正是基于这些功能,使用IDE能够减少项目的开发周期,减轻程序员的工作量,提高应用程序的开发效率等5.Web应用服务器的用途是什么?Web应用服务器是为创建、部署、运行以及管理Web应用提供多种运行时服务(如事务、安全等等)的分布式系统,它是应用程序运行的一个基本环境第2章JavaEE运行及开发环境习题答案1.配置JDK环境变量时,需要编辑______变量,需要新增______变量和_______变量答案PathJava_Homeclasspath2.Tomcat的启动和停止程序位于其安装路径的______文件夹中答案bin3.Tomcat中______文件用于配置服务器端口连接等信息答案server.xml4.在MyEclipse中,打开MyEclipse-______-Tomcat结点,选择Tomcat
6.0结点,进入Tomcat
6.0配置界面答案Servers5.以下三个选项,______用于工程的发布答案1第3章JSP和Servlet习题答案
(1)JSP的九个内置对象分别为___,___,___,___,___,___,___,___,___答案request对象response对象session对象out对象page对象application对象pageContext对象config对象exception对象
(2)画出JSP的工作原理图?答案JSP的工作原理图��标题�客户端�服务器执行login.java�login.class�login.jsp�ResponseResquest转换编译
(3)page指令的作用?答案page指令用于定义JSP页面中的全局属性
(4)jsp:useBean指令的作用?答案jsp:useBean指令用来在JSP页面内创建一个JavaBean实例
(5)load-on-startup元素的作用?答案load-on-startup元素用于要求服务器启动时就加载和初始化Servlet
(6)举一个声明的例子%!intnumber=0;//声明一个变量publicintgetNuminti{//声明一个方法returni;}%第4章SQL与JDBC习题答案1.简述SQL的组成部分答案SQL语言由以下3部分组成,分别是数据库模式定义语言DDL CREATE、DROP、ALTER等语句数据操纵语言DML INSERT、UPDATE、DELETE、SELECT语句数据控制语言GRANT、REVOKE、COMMIT、ROLLBACK等语句2.简述JDBC的执行步骤答案
(1)加载JDBC驱动程序通过静态类Class类加载数据库驱动
(2)取得数据库连接通过DriverManager类中的getConnection获取数据库的连接对象Connection
(3)执行各种SQL语句将Connection对象转换成Statement对象,通过该对象的executeUpdate执行添加、修改以及删除的SQL语句
(4)获取查询结果将Connection对象转换成Statement对象,通过该对象的executeQuery执行查询的SQL语句,该方法返回ResultSet对象
(5)关闭数据库连接通过Connection对象的close方法关闭数据库连接,并抛出异常3.Statement对象可以处理哪些类型的SQL语句,处理这些SQL语句的主要方法是什么?答案Statement接口的executeUpdateStringsql方法将执行添加(insert)、修改(update)和删除(delete)的SQL语句,执行成功后,将返回一个int型数值,该数值为影响数据库记录的行数该接口还可以通过executeQuery方法查询的SQL语句4.PreparedStatement对象可以处理哪些类型的SQL语句,处理这些SQL语句的主要方法是什么?答案PreparedStatement接口的executeUpdateStringsql方法将执行添加(insert)、修改(update)和删除(delete)的SQL语句,执行成功后,将返回一个int型数值,该数值为影响数据库记录的行数该接口还可以通过executeQuery方法查询的SQL语句5.CallableStatement对象可以处理哪些类型的SQL语句,处理这些SQL语句的主要方法是什么?答案CallableStatement接口的executeUpdateStringsql方法将执行添加(insert)、修改(update)和删除(delete)的数据库的存储过程,执行成功后,将返回一个int型数值,该数值为影响数据库记录的行数该接口还可以通过executeQuery方法查询的数据库存储过程6.在SQLServer数据库系统中,创建一个数据库,并且在该数据库下创建学生信息表,含有学生的基本信息,并通过JDBC实现对该数据表内容实现添加、修改、删除和查询的操作答案JDBC的代码如下importpublicclassJDBConnection{privatefinalprivatefinalStringurl=jdbc:mysql://localhost:3306/db_textcharacterEncoding=gb2312;privatefinalStringuserName=sa;privatefinalStringpassword=;privateConnectioncon=null;publicJDBConnection{//通过构造方法加载数据库驱动try{Class.forNamedbDrive.newInstance;}catchExceptionex{数据库加载失败;}}publicbooleancreatConnection{//创建数据库连接try{con=DriverManager.getConnectionurluserNamepassword;con.setAutoCommittrue;}catchSQLExceptione{}returntrue;}publicbooleanexecuteUpdateStringsql{//对数据表的增加、修改和删除的操作ifcon==null{creatConnection;}try{Statementstmt=con.createStatement;intiCount=stmt.executeUpdatesql;操作成功,所影响的记录数为+String.valueOfiCount;returntrue;}catchSQLExceptione{returnfalse;}}publicResultSetexecuteQueryStringsql{//对数据库的查询操作ResultSetrs;try{ifcon==null{creatConnection;}Statementstmt=con.createStatement;rs=stmt.executeQuerysql;returnnull;}catchExceptione{returnnull;}returnrs;}}publicvoidcloseConnection{//关闭数据库连接ifcon==null{try{con.close;}catchSQLExceptione{}}}}将MYSQL数据库驱动的类包加载在工程中后,读者可以通过上代码,调用相应的方法,实现对学生信息表进行各种操作第5章Struts2框架入门习题答案1.简单介绍MVC设计模式答案MVC英文为Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离,这样一个应用被分成3个层模型层、视图层和控制层,从而可以使同一个应用程序使用不同的表现形式2.简单介绍Struts2的工作流程答案Struts2框架的基本工作流程如下图所示Struts2工作流程图对Struts2工作流程的详细说明如下
(1)客户端初始化一个指向Web容器(例如Tomcat)的请求
(2)请求经过一系列的过滤器(Filter)的过滤并传递给FilterDispatcher
(3)FilterDispatcher接收到请求信息后,会根据URL在ActionMapper中搜索指定Action的映射信息
(4)如果找到符合的映射信息,ActionProxy通过ConfigurationManager在配置文件“struts.xml”中搜索被请求的Action类
(5)ActionProxy创建一个被请求Action的实例,该实例将用来处理请求信息
(6)如果在“struts.xml”文件中存在与被请求Action相关的拦截器配置,那么该Action的实例被调用的前后,这些拦截器也会先被执行
(7)Action对请求处理完毕以后返回一个逻辑视图,由此逻辑视图寻找对应的物理视图(可以是JSP、Velocity模板、FreeMarker模板等),并返回给客户端3.在创建Action类时,需要注意哪些方面?答案在Struts2中,Action可以以多种形式存在普通的Java类、实现Action接口和继承ActionSupport类在Action类中通常包含以下内容无参数的execute方法用于处理用户请求私有属性及其属性的set、get方法Action类中封装HTTP请求参数,因此私有属性的名称应和HTTP请求参数的名称保持一致;程序通过属性的set、get方法来处理请求参数,所以必须提供属性的set、get方法4.使用不同的结果类型时,需要如何配置?答案在Struts2应用程序中,所有的Action类在处理完成之后返回的都是一个字符串类型的结果,这个结果作为一个逻辑视图而存在Struts2框架正是通过这个字符串,在“struts.xml”配置文件中将逻辑视图与物理视图建立起映射关系,而这一实现是由result元素来声明的result元素的type属性用于指定结果的类型,而且默认情况下为JSP文件当需要使用不同的结果类型时,将type属性的值设置为相应的结果类型即可5.“struts.xml”文件中action元素都有哪些属性?作用是什么?答案action元素用来配置Action,它包含的属性如下表所示属性名称是否必须功能描述name是请求的Action名称class否Action处理类对应具体路径method否指定Action中的方法名converter否指定Action使用的类型转换器第6章Struts2进阶习题答案1.如何部署和添加拦截器?答案使用interceptors元素的子元素interceptor引入指定的拦截器,在引入时需指定该拦截器的名称及其实现类下面是部署拦截器的示例代码strutspackagename=defaultextends=struts-defaultinterceptors!--部署timer拦截器--interceptorname=timer/interceptors!--省略配置Action的代码--/package/struts使用action元素的子元素interceptor-ref加入所需拦截器下面是添加拦截器的示例代码strutspackagename=defaultextends=struts-default!--省略部署拦截器的代码--!--添加拦截器--result/success.jsp/resultinterceptor-refname=timer//action/package/struts2.继承类______或类______可实现自定义类型转换器答案DefaultTypeConverterStrutsTypeConverter3.在使用field元素时,通过_____元素来引入要使用的校验器答案field-validator4.在Struts2应用中如何实现国际化?答案实现国际化的步骤
(1)创建国际化资源文件,例如sunyang_zh_CN.properties、sunyang_en_US.properties
(2)在资源文件中添加需要国际化的内容,例如hello=你好hello=hello
(3)配置国际化资源文件,可将资源文件配置为全局范围、包范围或Action范围
(4)调用国际化资源文件,在应用中使用不同的方式来获得国际化资源信息5.在Struts2应用中如何实现文件上传?答案实现文件上传的步骤
(1)如果需要,在struts.properties文件中重新配置上传解析器
(2)在Action类中封装与上传文件相关的属性,例如publicclassUploadActionextendsActionSupport{privateStringtitle;//上传文件标题privateFilepic;//上传文件privateStringpicContentType;//上传文件类型privateStringpicFileName;//上传文件名privateStringsavePath;//上传文件保存路径publicvoidsetSavePathStringsavePath{this.savePath=savePath;}//返回文件上传路径privateStringgetSavePath{HttpServletRequestrequest=ServletActionContext.getRequest;returnrequest.getRealPathsavePath;}//省略其他属性的set、get方法publicStringexecutethrowsException{setSavePath;//将上传文件存储路径设为空FileOutputStreamfos=newFileOutputStreamgetSavePath+\\+getPicFileName;//以上传文件存放路径和原文件名建立一个输出流FileInputStreamfis=newFileInputStreamgetPic;//以上传文件建立一个输入流byte[]buffer=newbyte
[1024];intlen=0;whilelen=fis.readbuffer0{fos.writebuffer0len;//将上传文件写入到输出流所对应的文件中}returnSUCCESS;}}
(3)将用于实现文件上传的Action类进行相关的配置,配置方式和普通的Action类相同第7章Struts2中应用模板语言习题答案1.Velocity中属性引用的赋值方式都有哪些?答案Velocity中属性引用的赋值方式有两种使用Hashtable对象赋值使用方法赋值2.简述几种Velocity的指令及其用法答案下面是几种常见的Velocity指令set指令给引用赋值使if/elseif/else指令类似于Java语言中的if…elseif…else指令,可进行条件控制set指令给引用赋值foreach指令进行遍历循环macro指令用来定义宏3.简述FreeMarker的宏指令及其用法?答案在FreeMarker中,宏是一个用户自定义指令,定义完宏后就可以在模板中用@来使用宏宏是使用macro指令来定义的例如使用下面的代码定义宏#macrobookbookname书的名字${bookname}/#macro使用下面的代码在模板中使用宏#macrobookbookname书的名字${bookname}@bookbookname=JSP教程/4.在FreeMarker中如何格式化数字?答案在FreeMarker中可使用#{expre;format}这种形式格式化数字,其中的format使用mN或MN表示,mN代表小数部分最小N位,MN代表小数部分最大N位5.使用Velocity模板在控制台输出一本图书的相关信息实例内容在控制台输出图书的id、图书的名称、图书的作者、图书的价格、图书的出版社、图书的出版日期,要求使用方法赋值的方式给各个属性赋值答案
(1)创建一个Java工程,名称为booksys,导入工程所需的jar文件
(2)在工程下创建模板文件showBookInfo.vm,该模板文件可输出图书的相关信息,模板文件的代码如下图书id$book.bookid图书名称$book.bookname图书作者$book.bookauthor图书价格$book.bookprice出版社$book.bookcencern出版日期$book.bookdate
(3)在工程的sunyang包下创建一个类Book.java,该类为一个JavaBean,代表图书的相关信息类Book的代码如下publicclassBook{privateintbookid;//id号privateStringbookname;//书名privateStringbookauthor;//作者privatedoublebookprice;//价格privateStringbookcencern;//出版社privateStringbookdate;//出版日期publicintgetBookid{returnbookid;}publicvoidsetBookidintbookid{this.bookid=bookid;}publicStringgetBookname{returnbookname;}publicvoidsetBooknameStringbookname{this.bookname=bookname;}publicStringgetBookauthor{returnbookauthor;}publicvoidsetBookauthorStringbookauthor{this.bookauthor=bookauthor;}publicdoublegetBookprice{returnbookprice;}publicvoidsetBookpricedoublebookprice{this.bookprice=bookprice;}publicStringgetBookcencern{returnbookcencern;}publicvoidsetBookcencernStringbookcencern{this.bookcencern=bookcencern;}publicStringgetBookdate{returnbookdate;}publicvoidsetBookdateStringbookdate{this.bookdate=bookdate;}}
(4)在工程的sunyang包下创建一个类BookVelocity.java,该类用来给模板提供值类BookVelocity的代码如下publicclassBookVelocity{publicstaticvoidmainString[]args{try{Velocity.init;//初始化Velocity引擎}catchExceptione{e.printStackTrace;}VelocityContextcontext=newVelocityContext;//初始化Velocity上下文Bookbook=newBook;//给Book属性赋值book.setBookid200803;book.setBooknameJSP教程;book.setBookauthorsunyang;book.setBookprice
53.2;book.setBookcencernXX出版社;book.setBookdate2008-02-03;context.putbookbook;//将Book对象放入Velocity上下文中StringWriterwriter=newStringWriter;try{//把模板和上下文结合起来Velocity.mergeTemplateshowBookInfo.vmGBkcontextwriter;}catchExceptione{e.printStackTrace;}}}
(4)运行程序,控制台上的输出结果如下图所示6.使用FreeMarker编写一个用户登录实例实例内容当用户在登录页面中没有输入任何信息就登录时,提示用户需要输入用户名和密码方可登录,若用户输入错误的用户名或密码,提示用户输入的用户名或密码错误,若用户输入正确的用户名和密码,登录成功,页面跳转到欢迎用户登录页面
(1)创建一个Web工程,名称为login,导入工程所需的jar文件,
(2)在WebRoot下新建一个文件夹freemarker,在freemarker创建模板文件login.ftl、welcome.ftl和error.ftl,其中login.ftl为用户登录页面,welcome.ftl为欢迎页面,error.ftl为登录失败页面login.ftl的代码如下htmlheadtitle登录页面/title/headbodycenter用户登录/centerformaction=loginname=loginFormmethod=posttablealign=centertrtd用户名/tdtdinputtype=textname=username//td/trtrtd密码/tdtdinputtype=passwordname=password//td/trtrtdinputtype=submitname=submitvalue=登录//td/tr/table/form/body/htmlwelcome.ftl的代码如下htmlheadtitle欢迎页面/title/headbodycenter欢迎你${username}/center/body/htmlerror.ftl的代码如下htmlheadtitle失败页面/title/headbodycenter${message}/center/body/html
(3)在工程的sunyang包下创建一个Servlet类LoginFreeMarker.java,该Servlet类用来进行用户登录判断,若用户登录成功,页面则转向欢迎页面,否则转向登录失败页面,类LoginFreeMarker的代码如下publicclassLoginFreeMarkerextendsHttpServlet{privateConfigurationconfiguration;//初始化FreeMarker配置publicvoidinit{configuration=newConfiguration;//创建Configuration实例configuration.setServletContextForTemplateLoadinggetServletContextfreemarker;//指定模板的位置在freemarker目录下}protectedvoiddoGetHttpServletRequestreqHttpServletResponserespthrowsServletExceptionIOException{doPostreqresp;}protectedvoiddoPostHttpServletRequestreqHttpServletResponserespthrowsServletExceptionIOException{MapStringObjectdata=newHashMapStringObject;//建立数据模型Stringusername=req.getParameterusername;Stringpassword=req.getParameterpassword;Templatet=null;ifusername.equalssunyangpassword.equals123456{data.putusernameusername;//将用户信息放入数据模型中t=configuration.getTemplatewelcome.ftl;//加载模板文件}else{//将提示信息放入数据模型中data.putmessage输入的用户名或密码错误;t=configuration.getTemplateerror.ftl;//加载模板文件}//在页面里使用模板的charset//使用text/htmlMIME-typeresp.setContentTypetext/html;charset=+t.getEncoding;Writerout=resp.getWriter;try{t.processdataout;//将数据传向模板处理并输出数据}catchTemplateExceptione{e.printStackTrace;}}}
(4)在web.xml中配置LoginFreeMarker,配置的代码如下xmlversion=
1.0encoding=UTF-8!--配置servlet--servletservlet-nameLoginFreeMarker/servlet-nameservlet-classsunyang.LoginFreeMarker/servlet-class/servlet!--配置servlet映射--servlet-mappingservlet-nameLoginFreeMarker/servlet-nameurl-pattern/freemarker/login/url-pattern/servlet-mapping/web-app
(5)发布并运行程序,登录页面的界面如下图所示如果用户输入错误的用户名和密码,单击【登录】按钮则显示如下图所示的界面如果用户输入的用户名和密码正确,则显示如下图所示的界面第8章初识Hibernate框架习题答案1.什么是ORM?答案ORM就是对象关系映射其中的“O”代表的就是对象(object),“R”代表的是关系“relation”,M代表的是映射“mapping”其原理就是将对象与表、对象的属性与表的字段分别建立映射关系2.Hibernate有那些配置文件?这些配置文件都使用什么语法配置?答案HIbernate有两个配置文件一个配置文件是使用XML语法来配置数据库连接等信息,或者hibernate.properties,使用‘名称’=‘值’的形式配置HIbernate的另一个配置文件是映射文件,用来经数据表中的字段信息映射项目中创建的持久化的属性信息这样才能使用HIbernate的ORM机制,操作持久化类对象属性的同时就可以对数据中的数据进行更改3.简述在Hibernate中使用的映射关系类型答案映射关系类型如下表所示数据表字段类型Java数据类型Hibernate映射类型INTint、java.lang.IntegerintegerTINYINTbyte、java.lang.BytebyteSMALLINTshort、java.lang.ShortshortBIGINTlong、java.lang.LonglongTINYINTbyte、java.lang.BytebyteBIGINTlong、java.lang.LonglongFLOATfloat、java.lang.FloatfloatDOUBLEdouble、java.lang.DoubledoubleNUMERICjava.math.BigDecimalbig_decimalCHARchar、java.lang.CharactercharacterCLOBjava.lang.StringtextVARCHARjava.lang.Stringstringjava.lang.Classclassjava.util.Localelocalejava.util.TimeZonetimezonejava.util.CurrencycurrencyBITboolean、java.lang.BooleanbooleanDATEjava.util.Date、java.sql.Datedatejava.util.Calendarcalendar_dateTIMEjava.util.Date、java.sql.TimetimeTIMESTAMPjava.util.Date、java.sql.Timestamptimestampjava.util.CalendarcalendarVARBINARY、BLOBbyte[]binaryjava.io.SerializableserializableCLOBjava.sql.Clobclobjava.sql.Blobblob4.Hibernate中用于开始使用Hibernate的入口配置类是什么?入口类是Configuration,该类用来读取HIbernate的配置文件并实例化SessionFactory对象等该类的实例化代码如下使用属性文件配置HIbernate时Configurationconfig=newConfiguration;使用配置文件配置HIbernate时Configurationconfig=newConfiguration.configrue;5.Hibernate中的关联关系都有哪些?实体之间通过关系来相互关联,关系之间有一对一(1:1)、一对多(1:n)和多对多(n:m)的关系第9章Hibernate查询习题答案1.Hibernate中的检索策略分为_________________________________答案立即检索延迟检索预先检索批量检索2.请简述Hibernate中的查询方式以及它们分别在什么样的场合下使用答案HQL适用于较多的静态检索时QBC适用于动态条件检索时原生SQL适用于通过SQL才可以进行检索的特殊数据库时3.请简述Hibernate一对多关联查询时应该注意的问题“一”的一方如何配置,“多”的一方如何配置答案HIbernate的一对多关联时,必须正确的配置属性和数据库的主外键,否则HIbernate的不能进行关联查询Hibernate中对这种一对多,多对一的处理方式为,使用setone-to-manymany-to-one元素来实现关系实体中的“一”的配置首先在持久化类BookInfoVo中定义关联表的外键bookno,定义的属性使用Set类型,同时需要实例化,代码为privateSetbookno=newHashSet;同时要生成该对象的getter和setter方法在配置文件中通过set元素来配置one-to-many,配置的详细代码为set标签中的name配置的就是在持久化类中配置的Set类型的bookno;key该标签配置的是关联表的外键one-to-many标签配置的是一对多关系中关联的多的一方的持久化类的全路径“多”的配置首先在持久化类BookNO中配置“一”的持久化类类型的对象,不需要实例化代码如下,同时生成该对象的getter和setter方法privateBookInfoVobookinfovo;接下来在该持久化类对应的配置文件中配置标签,代码中的关键字描述如下name图书编号持久化类中配置的BookInfoVo类型的对象bookinfovocolumn配置的图书编号表当中关联图书信息表的外键class配置的是图书编号表的关联表持久化类的全路径4.简答多对多关联查询时,如何获得对方的属性信息答案多对多关联时,可以使用对象的getXXX()方法来获得关联对象集获得的对象集是Set类型的,可以通过迭代的方式获得每一个对象的实例5.下面的代码中使用的是那种查询方式?setname=booknocascade=all-delete-orphaninverse=truelazy=falsekeycolumn=book_id//set代码中配置的是一对多关联关系中的“一”的一方第10章Hibernate性能优化习题答案1.什么是事务?事务的四个特性是什么?答案事务Transaction是访问数据库时,可能更新数据库中各种数据项的一个程序执行单元事务的四个基本特性是原子性、一致性、隔离性、持久性2.简述Hibernate的支持的事务类型答案HIbernate中支持JDBC的事务类型和JTA事务类型JDBC事务类型是HIbernate封装了的原始的JDBC事务,JTA事务类型是由容器来控制的事务类型3.Hibernate默认支持的事务类型是哪种,如何使用?答案HIbernate默认使用的事务类型是JDBC不指定事务类型时使用就是JDBC的事务代码中使用JDBC事务如下//实例化Configure类Configurationconfig=newConfiguration;……//建立Session工厂sessionFactory=config.buildSessionFactory;//开启会话Sessionsession=sessionFactory.openSession;//定义事务处理对象Transactiontx=null;try{//开始事务tx=session.beginTransaction;tx.begin;……//提交事务tx.commit;}catchExceptione{e.printStackTrace;//回滚事务tx.rollback;}finally{//关闭Sessionsession.close;}}4.并发问题的五个类型分别是_____,______,________,________答案第一类丢失更新脏读虚读不可重复读第二类丢失更新5.Hibernate中的一级缓存在什么情况下提交?HIbernate中的一级缓存是事务级别的,当事务被提交后,缓存被清空6.如下的代码中使用了Hibernate中的哪种事务类型,第几级缓存?程序中的数据在执行哪句代码时被更新?为什么要考虑更新缓存中的数据?//实例化SessionSessionsession=sessionFactory.openSession;//定义事务处理对象Transactiontx=session.beginTransaction;//开始事务tx.begin;//保存图书信息数据forinti=0;i50000;i++{BookInfoVobook=newBookInfoVo;session.savebook;ifi%100==0{session.flush;session.clear;}}//提交事务tx.commit;//关闭sessionsession.close;答案代码使用的是HIbernate的JDBC事务类型,一级缓存代码执行到session.flush时被提交,同时清空缓存这样做的原因是系统在处理大量数据时,会将数据放置在内存中,超过了内存的容量会导致系统异常或者瘫痪第11章Spring框架入门习题答案1.Spring框架有哪些突出的优点?答案Spring框架技术之所以受到广泛的欢迎和使用,与其自身的特点有密切联系开源自从Spring框架问世之初,它就是一个开放源代码的框架而正是由于这一点,才使得它能够被更多的Java开发人员所研究、使用,并不断得以完善、发展轻量级Spring无论是大小还是系统开销都算是轻量级的,整个框架可以被压缩在几M的JAR包中,应用中处理Spring的开销也微乎其微方便解耦Spring提倡通过控制反转(IoC)技术实现松耦合通过Spring中的IoC容器管理各个对象之间的依赖关系,能够有效避免硬性编码造成的耦合过于紧密的状况面向切面编程(AOP)Spring对面向切面编程提供了良好的支持,通过Spring提供的AOP功能,可以轻松实现业务逻辑与系统服务(例如日志,事务等)的分离因此,开发人员能够更加专注于业务逻辑实现方便集成其它框架Spring框架允许集成其它多种框架共同进行开发设计,例如Hibernate、Struts、Struts
2、Ibatis等2.Spring框架由哪7个模块组成?答案关于Spring架构中各个模块实现的功能说明如下核心模块(Core)该模块是整个框架的最基本组成部分,它提供了依赖注入的功能以及对Bean容器的管理功能通过依赖注入,使得类与类之间不再由硬性编码方式发生关系,而是通过配置实现这一过程,降低了各个类之间耦合的紧密度Spring框架提供的BeanFactory接口,进一步消除了应用对工厂的依赖AOP模块(AOP)该模块提供了对AOP的支持,允许以面向切面的方式开发程序同时Spring框架提供了AspectJ的整合上下文模块(Context)该模块构建于核心模块之上,提供了对Bean的框架式访问该模块还扩展了BeanFactory功能ORM模块(ORM)该模块允许Spring集成各种ORM(Object-RelationMapping)框架来实现持久层的应用各种ORM框架以插件的形式集成到Spring框架中,并由Spring框架来完成事务管理以及异常处理DAO模块(DAO)该模块对JDBC进行轻量封装,用以提供对JDBC操作的支持使用传统的SQL语句执行JDBC操作,复杂且极容易发生错误Spring通过对JDBC的轻量封装,使得操作变得更加简单化同时Spring提供了声明式的事务管理,使开发者不必在繁琐的事务方面花费过多的精力Web模块(Web)该模块也是构建于核心模块之上的,它提供了对Web各种应用的全面支持Spring的MVC模块(MVC)该模块提供了一个完整的MVCModel-View-Controller的解决方案,使用Spring框架的MVC模块进行开发,能够更好的结合IoC容器3.如何理解控制反转(IoC)?答案IoC(InverseofControl)通常被称为控制反转它是一种设计模式,主要关注组件的依赖性、配置及组件的生命周期当然IoC不仅仅适用于组件,同样也适用于简单的类通常情况下应用程序需要调用某个类时,必须自己创建一个调用类的对象实例;而采用IoC模式以后,创建对象实例的任务将由容器或框架来完成,应用程序直接使用容器或框架创建的对象即可4.IoC有哪些实现方式?Spring框架一般采用何种方式?答案依赖注入有三种不同的实现形式,分别为构造函数注入(ConstructorInjection),设值方法注入(SetterInjection)和接口注入(InterfaceInjection)Spring框架普遍采用构造函数注入和设值方法注入两种注入方式5.创建一个Spring应用应该分几步?答案创建一个Spring应用的步骤如下
(1)在web.xml文件中添加Spring监听
(2)添加Spring框架所需运行库文件
(3)设计相应的接口及实现类
(4)创建Spring配置文件,并在该文件中对涉及的组件进行配置第12章SpringAOP习题答案1.如何理解动态代理?答案动态代理是代理模式的延伸和拓展,它改善了代理模式存在的一些弊端通过Java的动态代理机制,可以非常容易地实现AOP思想,而Spring的AOP也是建立在Java的代理机制之上的在动态代理的实现过程中,代理对象是根据实际需要而被创建的当应用程序需要调用某个对象时,该对象才会被创建2.如何理解Spring的AOP?答案SpringAOP也是基于AOP这一基本思想,但是它却侧重于提供一个能与SpringIoC容器整合使用的AOP框架SpringAOP不仅提供了AOP基础框架,还提供很多现成方面实现SpringAOP主要特点包括如下几方面
(1)支持方法调用的各类通知,包括前置型通知、后置型通知、抛出异常通知以及环绕型通知等等
(2)支持通过正则表达式指定切入点,同时支持切入点的组合操作
(3)可以在不修改框架核心代码的基础上加入自定义通知
(4)AOP组件可以被当作SpringBean来管理,与IoC容器结合使用
(5)支持使用元数据实现AOP声明服务
(6)AOP组件可以应用于不同avaEE服务器3.Spring的通知包括哪些?答案前置型通知(BeforeAdvice),后置型通知(AfterRetruningAdvice),环绕型通知(MethodInterceptor)以及抛出异常通知(ThrowAdvice)4.静态切入点和动态切入点有什么区别?答案静态切入点只限于给定的方法和目标类,而不考虑方法的参数,在绝大多数情况下使用静态切入点能够满足程序需要Spring在调用静态切入点时,只在第一次的时候计算静态切入点的位置并将它缓存起来,以后就不需要再进行计算了动态切入点不仅限定于给点的方法和类,还可以指定方法的参数使用动态切入点要比使用静态切入点带来更多的性能损耗,因为在使用动态切入点时不仅要考虑静态信息,还要考虑方法的参数每次方法被调用的时候,都需要对切入点进行计算,因为参数是变化的所以不能缓存每次的计算结果5.如何理解ProxyFactoryBean?答案在Spring框架中ProxyFactory主要用于创建一个代理对象以实现AOP机制在程序执行过程中,ProxyFactory会调用另一个组件DefaultAopProxyFactory来真正创建代理对象根据设置的不同,被创建的代理对象可以是Cglib2AopProxy(CGLIB代理),也可以是JdkDynamicAopProxy(Java动态代理)通过调用ProxyFactory提供的不同方法,我们可以在程序任意位置织入advisor或者advice第13章Spring与JavaEE持久化数据访问习题答案1.Spring对Dao模式的支持主要体现在___和___两个方面答案统一的数据异常管理通用的数据访问模板及抽象支持类2.Spring框架为___、___、___、___和___等持久层技术提供了相应的模板和支持类答案JDBCHibernateIbatisJPATopLink3.Spring框架提供了3种事务处理方式,分别为___、___、___答案编程式事务处理声明式事务处理标注式事务处理4.Spring框架如何实现统一的数据访问异常机制?答案Spring所提供的统一数据访问异常是与实现技术无关,并且面向DAO层次的异常体系通过该体系,我们可以方便地将各种持久层特定异常转化为Spring的定制异常使用Spring框架结合其它持久化技术时,我们不用关心持久化技术产生的异常信息,这些异常将统一由Spring框架进行处理5.Spring框架如何管理不同持久层的事务?答案Spring框架针对事务的处理提供了两种事务编程模型编程式事务处理以及声明式事务处理无论采取哪种方式管理事务,都要用到Spring的事务管理器从根本上来说,Spring的事务管理器并没有提供具体事务处理的实现过程,而是对其它持久化技术提供的事务处理实现进行了封装因此在实际应用中,Spring可以对其所支持的任何持久化技术的事务进行管理第14章Spring与Struts
2、Hibernate框架的整合基础习题答案
(1)Struts2框架对其它框架的支持是如何实现的?答案Struts2框架对其它框架提供了良好的支持,这主要是通过Struts2框架中的插件实现的Struts2提供的插件其实就是一个JAR文件,它以“Struts2-框架名-plugin-版本号.jar”这种方式命名,如果想在应用程序中安装某个插件,只需将该JAR文件拷贝到Web应用的classpath下即可
(2)“struts-plugin.xml”文件的作用是什么?答案在“struts-plugin.xml”文件里可配置自己想扩展的功能,包括定义新包、新的Result类型和基础Action覆盖Struts2的常量值自定义拦截器改变默认的拦截器引用引入扩展点的实现类
(3)使用插件的Struts2应用程序包括3种类型的配置文件“struts-plugin.xml”文件、“struts-default.xml”文件和“struts.xml”文件,它们三个的加载顺序是什么?答案应用程序对“struts-plugin.xml”文件、“struts-default.xml”文件和“struts.xml”文件加载的顺序如下图所示
(4)Spring对Hibernate框架提供的支持主要体现在______、______、______、和______答案对Hibernate异常的支持对Hibernate事务的支持对Hibernate基础设施的支持
(5)Spring如何管理Hibernate事务?答案Spring对Hibernate事务的管理分为声明式事务管理、编程式事务管理以及标注式事务管理,在实际应用中可根据具体情况选择合适的事务管理方式其中,声明式事务管理方式是比较常用的事务管理方式,该方式由SpringIoC容器自动管理事务312。