第一篇:Java Web 程序设计教程 第12章习题答案(范立锋、林果园 编著)
Java Web 程序设计教程(范立锋、林果园 编著)
第12章Spring AOP习题答案
1.如何理解动态代理?
动态代理是代理模式的延伸和拓展,它改善了代理模式存在的一些弊端。通过Java的动态代理机制,可以非常容易地实现AOP思想,而Spring的AOP也是建立在 Java的代理机制之上的。在动态代理的实现过程中,代理对象是根据实际需要而被创建的。当应用程序需要调用某个对象时,该对象才会被创建。
2.如何理解Spring的AOP?
Spring AOP也是基于AOP这一基本思想,但是它却侧重于提供一个能与Spring IoC容器整合使用的AOP框架。Spring AOP不仅提供了AOP基础框架,还提供很多现成方面实现。Spring AOP主要特点包括如下几方面:
①支持方法调用的各类通知,包括前置型通知、后置型通知、抛出异常通知以及环绕型通知等等。②支持通过正则表达式指定切入点,同时支持切入点的组合操作。
③可以在不修改框架核心代码的基础上加入自定义通知。
④AOP组件可以被当作Spring Bean来管理,与IoC容器结合使用。
⑤支持使用元数据实现AOP声明服务。
⑥AOP组件可以应用于不同avaEE服务器。
3.Spring的通知包括哪些?
前置型通知(BeforeAdvice),后置型通知(AfterRetruningAdvice),环绕型通知(MethodInterceptor),抛出异常通知(ThrowAdvice)。
4.静态切入点和动态切入点有什么区别?
静态切入点只限于给定的方法和目标类,而不考虑方法的参数,在绝大多数情况下使用静态切入点能够满足程序需要。Spring在调用静态切入点时,只在第一次的时候计算静态切入点的位置并将它缓存起来,以后就不需要再进行计算了。动态切入点不仅限定于给点的方法和类,还可以指定方法的参数。使用动态切入点要比使用静态切入点带来更多的性能损耗,因为在使用动态切入点时不仅要考虑静态信息,还要考虑方法的参数。每次方法被调用的时候,都需要对切入点进行计算,因为参数是变化的所以不能缓存每次的计算结果。
5.如何理解ProxyFactoryBean?
在Spring框架中ProxyFactory主要用于创建一个代理对象以实现AOP机制。在程序执行过程中,ProxyFactory会调用另一个组件DefaultAopProxyFactory来真正创建代理对象。根据设置的不同,被创建的代理对象可以是Cglib2AopProxy(CGLIB代理),也可以是JdkDynamicAopProxy(Java动态代理)。通过调用ProxyFactory提供的不同方法,我们可以在程序任意位置织入advisor或者advice。
第二篇:Java Web 程序设计教程 第6章习题答案(范立锋、林果园 编著)
Java Web 程序设计教程(范立锋、林果园 编著)
第6章Struts 2进阶习题答案
1.如何部署和添加拦截器?
使用
使用
2.继承类DefaultTypeConverter或类StrutsTypeConverter可实现自定义类型转换器。
3.在使用
4.在Struts 2应用中如何实现国际化?
实现国际化的步骤:
①创建国际化资源文件,例如sunyang_zh_CN.properties、sunyang_en_US.properties。②在资源文件中添加需要国际化的内容,例如:
hello=你好
hello=hello
③配置国际化资源文件,可将资源文件配置为全局范围、包范围或Action范围。④调用国际化资源文件,在应用中使用不同的方式来获得国际化资源信息。
5.在Struts 2应用中如何实现文件上传?
实现文件上传的步骤:
①如果需要,在struts.properties文件中重新配置上传解析器。
②在Action类中封装与上传文件相关的属性,例如:
public class UploadAction extends ActionSupport {
private String title;private File pic;// 上传文件标题 // 上传文件 private String picContentType;// 上传文件类型 private String picFileName;private String savePath;// 上传文件名 // 上传文件保存路径public void setSavePath(String savePath){} // 返回文件上传路径 private String getSavePath(){}
//省略其他属性的set、get方法 HttpServletRequest request = ServletActionContext.getRequest();return request.getRealPath(savePath);this.savePath = savePath;
public String execute()throws Exception {setSavePath(“");// 将上传文件存储路径设为空 FileOutputStream fos = new FileOutputStream(getSavePath()+ ”"+ getPicFileName());
// 以上传文件存放路径和原文件名建立一个输出流
FileInputStream fis = new FileInputStream(getPic());
// 以上传文件建立一个输入流
byte[] buffer = new byte[1024];int len = 0;while((len = fis.read(buffer))> 0){fos.write(buffer, 0, len);
// 将上传文件写入到输出流所对应的文件中
}
③将用于实现文件上传的Action类进行相关的配置,配置方式和普通的Action类相同。} } return SUCCESS;
第三篇:Java Web 程序设计教程 第1章习题答案(范立锋、林果园 编著)
Java Web 程序设计教程(范立锋、林果园 编著)
第1章Web应用开发简介习题答案
1.Web在组成上包括服务器和客户端两部分。
2.谈谈对面向对象的认识。
面向对象将将要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙解决问题中的各个步骤中的行为。面向对象编程方式是建立在面向过程编程方式基础上,其最重要的改变在于面向对象编程中,程序将围绕被操作的对象来设计,而不是操作本身。面向对象编程方式以类作为构造程序的基本单位,具有封装、抽象、继承、多态性等特点。
3.介绍几种常用的框架技术。
①Struts:Struts是Apache 基金会Jakarta 项目组的一个开源项目,是一个基于Sun J2EE平台的MVC框架,它将Servlet和JSP标签作为实现自身功能的一部分。
②WebWork:WebWork是由OpenSymphony组织开发的,是一个基于Web的MVC框架。它在运行时通过Interceptor(拦截器)自动应用,因此脱离了Action类。
③Struts 2:Struts 2是Apache基金会的一个开源项目,它建立在Struts框架与WebWork框架基础之上,继承了二者的优点,是目前非常流行的一个Web框架。
④Spring:Spring是一个以IoC和AOP为核心的轻量级容器框架。它提供了一系列的Java EE开发解决方案,包括表示层的Spring MVC、持久层的Spring JDBC以及业务层事务管理等众多的企业级应用技术。
⑤Hibernate:Hibernate是一个ORM(对象关系映射)框架,它对JDBC进行了轻量级的封装。通过使用Hibernate框架,开发人员能够以面向对象的思维方式来操作数据库。
⑥Ibatis:相对于Hibernate而言,Ibatis是一个“半自动化”的ORM实现框架,它主要致力于POJO与SQL之间的映射关系,是对“全自动化”ORM框架的一种有益补充。
⑦EasyJWeb:EasyJWeb是一个核心基于模板技术实现的MVC框架,主要致力于Java Web应用程序的快速开发。
4.IDE的用途是什么?
IDE是一种用于辅助开发人员开发应用程序的应用软件,它一般包括代码编辑器、编译器、调试器和图形用户界面工具,有的还包括版本控制系统、性能分析器等更多工具,因此IDE也就具有了编写、编译、调试等多种功能。正是基于这些功能,使用IDE能够减少项目的开发周期,减轻程序员的工作量,提高应用程序的开发效率等。
5.Web应用服务器的用途是什么?
Web应用服务器是为创建、部署、运行以及管理Web应用提供多种运行时服务(如事务、安全等等)的分布式系统,它是应用程序运行的一个基本环境。
第四篇:Java Web 程序设计教程 第13章习题答案(范立锋、林果园 编著)
Java Web 程序设计教程(范立锋、林果园 编著)
第13章Spring与Java EE持久化数据访问习题答案
1.Spring对Dao模式的支持主要体现在统一的数据异常管理
和通用的数据访问模板及抽象支持类两个方面。
2.Spring框架为JDBC、Hibernate、Ibatis、JPA和TopLink等持久层技术提供了相应的模板和支持类。
3.Spring框架提供了3种事务处理方式,分别为编程式事务处理、声明式事务处理、标注式事务处理。
4.Spring框架如何实现统一的数据访问异常机制?
Spring所提供的统一数据访问异常是与实现技术无关,并且面向DAO层次的异常体系。通过该体系,我们可以方便地将各种持久层特定异常转化为Spring的定制异常。使用Spring框架结合其它持久化技术时,我们不用关心持久化技术产生的异常信息,这些异常将统一由Spring框架进行处理。
5.Spring框架如何管理不同持久层的事务?
Spring框架针对事务的处理提供了两种事务编程模型:编程式事务处理以及声明式事务处理。无论采取哪种方式管理事务,都要用到Spring的事务管理器。从根本上来说,Spring的事务管理器并没有提供具体事务处理的实现过程,而是对其它持久化技术提供的事务处理实现进行了封装。因此在实际应用中,Spring可以对其所支持的任何持久化技术的事务进行管理。
第五篇:C语言程序设计教程课后习题答案
C语言程序设计教程课后习题答案
第一章 C语言程序设计概述 -习题答案 算法的描述有哪些基本方法?
答
1、自然语言
2、专用工具C语言程序的基本结构是怎样的?举一个例子说明。
答
1、C语言程序由函数构成;
2、“/*”与“*/”之间的内容构成C语言程序的注释部分;
3、用预处理命令#include、#define可以包含有关文件或预定义信息;
4、大小写字母在C语言中是有区别的;
5、除main()函数和标准库函数外,用户也可以自己编写函数,应用程序一般由多个函数组成,这些函数指定实际所需要做的工作。C语言有什么特点?
答
1、具有结构语言的特点,程序之间很容易实现段的共享;
2、主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译代码,以实现程序的模块化;
3、运算符丰富,包含的范围很广;
4、数据类型丰富;
5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能;
6、限制不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚;
7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。★指出合法与不合法的标识符命名。
答
AB12--√ leed_3--a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2--√ AVE#XY--× _762--√ #_DT5--× C.D--×说明下列Turbo C热键的功能。
答
F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行(用于调试程序)Ctrl+F9:编译并链接成可执行文件 Alt+F5:将窗口切换到 DOS 下,查看程序运行结果。说明下列Turbo C方式下输入并运行下列程序,记录下运行结果。
①main()
{printf(“********************n”);printf(“ welcome you n”);printf(“ very good n);printf(”********************n“);} ②main()
{ int a,b,c,t;printf(”please input three numbers;“);scanf(”%d,%d,%d“,&a,&b,&c);/*教材S是错误的*/ t=max(max(a,b),c);printf(”max number is:%dn“,t);} int max(int x, int y){ int z;if(x>y)z=x;else z=y;return(z);} 答
运行结果:
******************** welcome you very good ******************** 运行结果:
please input three numbers;3,1,4 /*左侧下划线内容为键盘输入*/ max number is:4 7 一个C程序是由若干个函数构成的,其中有且只能有一个___函数。
答
main()8 在Turbo C环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。
答
1、User screen
2、Alt+F5 9 ★C语言对标识符与关键字有些什么规定?
答
1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。
2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。C源程序输入后是如何进行保存的?
答
是以C为扩展名保存的纯文本文件。
第二章 C语言程序的基本数据类型与表达式 -习题答案 ★指出下列常数中哪些是符合C语法规定的。
答
''--× '101'--× ”“--× e3--× 019--√ 0x1e--√ ”abn“--√ 1.e5--×(2+3)e(4-2)--× 5.2e2.5--×请找出下列程序中的错误,改正后写出程序运行结果。
①void main(){int x,y=z=5,aver;x=7 AVER=(x+y+z)/3 printf(”AVER=%dn“,aver);} ②void main()
{ char c1='a';c2='b';c3='c';int a=3.5,b='A' printf(”a=%db='“endn”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 答
main(){int x,y=5,z=5,aver;x=7;aver=(x+y+z)/3;printf(“AVER=%dn”,aver);}
运行结果:AVER=5 ②main()
{ char c1='a', c2='b', c3='c';int a=3,b='A';printf(“a=%d,b='%c'”end“n”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);}
运行结果:a=3,b='A'“end”
aabcc abc 3 写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。int 99
-1 char 'h'
unsigned int
float
55.78
long int
答 int 99 104 66 55 68-1 char 'c' 'h' 'B' '7' 'D'
unsigned int 99 104 66 55 68 65535
float 99.00 104.00 66.00 55.78 68.00-1.00
long int 99 104 66 55 68-1
★写出程序运行结果。
①void main(){int i,j;i=8,j=10;printf(“%d,%d,%d,%dn”,i,j,++i,j++);} ②main()
{ int a=1,b=2,c=30;;printf(“%d,%d,%d,%dn”,a=b=c,a=b==c,a==(b=c),a==(b==c));} 注意:a=b=c,a=b==c之间应为逗号,教材有误 答
运行结果: 9,11,9,10 运行结果: 30,1,0,0
③void main()
{int a=10,b=20,c=30,d;d=++a<=10||b-->=20||c++;printf(“%d,%d,%d,%dn”,a,b,c,d);}
答
运行结果: 11,19,30,1
★写出下面表达式的值(设a=10,b=4,c=5,d=1,x=2.5,y=3.5)。⑴a%=(b%=3)
⑵n++,a+=a-=a*=a ⑶(float)(a+c)/2+(int)x%(int)y ⑷a*=b+c ⑸++a-c+b++ ⑹++a-c+++b ⑺a
⑼a+b,18+(b=4)*3,(a/b,a%b)
⑽x+a%3*(int)(x+y)%2/4+sizeof(int)⑾a
答
⑴0 ⑵0 ⑶9.500000 ⑷90 ⑸10 ⑹10 ⑺'A' ⑻2 ⑼4.5 ⑽1 ⑾0 ⑿20 ⒀0 下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值的整型变量)?
①m=(a=4,4*5)与m=a=4,4*5 ②(float)(a/b)与(float)a/b ③(int)a+b与(int)(a+b)④m%=2+a*3与m=m%2+a*3 ⑤m=1+(a=2)+(b=3)与a=2,b=3,m=1+a+b 答
①前面是赋值表达式,而后面的是一个逗号表达式,所以一定不同;
②前面的表达式中a/b结果为一整数,结果已经取整,精度可能受到影响,之后强制float后才为浮点型,后面的是先将a转换为float后再与b相除,其值保证了精度,所以不同。
③因为a、b均为整数,其前后两个表达式的计算结果是一致的。
④前一表达式是一算术表达式,而后者为一赋值表达式,此为一点不同;另外,前一表达式的m只被赋过一次值,后一表达式中的m曾两次被赋值,第一次赋值时与第一表达式中的值一致,第二次赋值后即不再相同。⑤前后表达式的计算结果应该是一致的:a=2, b=3, m=6 7 条件表达式x>0?x:-x的功能是什么?
答
如果x的值是一正数,则表达式的值为x值;如果x的值是一非正数,则表达式的值为-x。其实该表达式的值即为x的绝对值,C语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。用一个条件表达式描述从a、b、c中找出最大都赋给max.答
max=a>(b>c?b:c)?a:(b>c?b:c);9 ★若x为int型变量,则执行以下语句后x的值为()。x=6;x+=x-=x*x;A.36 B.-60 C.60 D.-24 答 B.10 ★若有以下类型说明语句: char w;int x;float y;double z;则表达式w*x+z-y的结果为()类型。A.float B.char C.int D.double 答 D.第三章 顺序结构程序设计 -习题答案 变量k为float类型,调用函数scanf(“%d”,&k),不能使变量k得到正确数值的原因是___。
答
格式修饰符与变量类型不一致。因为%d输入的数据类型应该为十进制整数,而&k为占用4个字节的float类型变量的地址。★a=1234,b=12,c=34,则执行“printf(“|%3d%3d%-3d|n”,a,b,c);”后的输出是___。
答
|1234 1234 |
分析如下:
①%3d为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小于3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受限制。
②%-3d为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。★设有“int a=255,b=8;”,则“printf(“%x,%on”,a,b);”输出是___。答 ff,10 ①如果“printf(“%X,%on”,a,b);”则输出为FF,10。说明在输出十六进制字母时,其大小写受格式修饰符的限制,如果是“%x”则输出小写,如果是“%X”则输出大写。
②如果希望在输出十六进制时输出前导符0x或0X,则以上输出语句应改“printf(“%#x,%on”,a,b);”为或“printf(“%#X,%on”,a,b);”。本条解释不必须掌握。★以下程序输出的结果是___。main(){ int a1=1,a2=0,a3=2;printf(“%d,%d,%dn”,a1,a1+a2+a3,a3-a1);} 答 1,3,1 5 printf函数中用到格式符%5s,其中5表示输出字符占用5列。如果字符串长度大于5,则按___输出;如果字符串长度小于5,则按___输出。
答
①实际 ②左端补空格 6 ★已定义变量如下: int a1,a2;char c1,c2;若要求输入a1、a2、c1和c2的值,正确的输入函数调用语句是___。
答
scanf(“%d,%d,%c,%c”,&a1,&a2,&c1,&c2);7 输入两个整型变量a、b的值,输出下列算式以及运算结果___。a+b、a-b、a*b、a/b、(float)a/b、a%b 每个算式占一行。如a=10,b=5,a+b输出为:10+5=15 答
设int a=10,b=5;以下为输出语句及结果: ①printf(“%d+%d=%dn”,a,b,a+b);10+5=15 ②printf(“%d-%d=%dn”,a,b,a-b);10-5=5 ③printf(“%d*%d=%dn”,a,b,a*b);10*5=50 ④printf(“%d/%d=%dn”,a,b,a/b);10/5=2 ⑤printf(“%(float)d/%d=%fn”,a,b,(float)a/b);(float)10/5=2.000000 ⑥printf(“%d%%%d=%dn”,a,b,a%b);10%5=0 8 ★输入一个非负数,计算以这个数为半径的圆周长和面积。答
#define PI 3.1415926 main(){ float r,l,area;printf(“Input a positive:”);scanf(“%f”,&r);l=2*PI*r;area=PI*r*r;printf(“l=%ftarea=%fn”,l,area);} 9 输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。
答
main(){ int x,y;printf(“Input a number(100-999):”);scanf(“%d”,&x);y=100*(x%10)+10*(x/10%10)+x/100;/*注意分析此处算法*/