JavaEE企业级应用开发教程 传智课后题(客观题)答案

第一章(Spring的基本应用)

第二章(Spring中的Bean)

填空题
1、对于_______作用域的Bean,Spring只负责创建,当容器创建了Bean实例后,Bean的实例就交给客户端代码来管理,Spring容器将不再跟踪其生命周期。2分
参考答案 :【prototype】

2、Spring实例化Bean有三种方式,分别为构造器实例化、静态工厂方式实例化和________。2分
参考答案 :【实例工厂方式实例化】

3、Spring提供了2种基于XML的装配方式:_______ 和_______。2分
参考答案 :【设值注入(Setter Injection)】【构造注入(Constructor Injection)】

4、所谓自动装配,就是将一个Bean自动的注入到到其他Bean的_____中。2分
参考答案 :【Property】

5、
_______ 实例化Bean时,其class属性指定的是_______,同时还需要使用factory-method属性来指定所创建的实例化bean的方法。

2分
参考答案 :【静态工厂类】【静态工厂方法】
答案说明 :
简答题
1、Bean的作用域是通过元素的scope属性来指定的,请说出该属性值有哪些。10分
我的答案:singleton、prototype 、request、session、 global session、applicaton、websocket
参考答案 :singleton、prototype、request、session、globalSession、application、websocket
答案说明 :
2、请简述基于XML的装配方式中设值注入的要求。10分
我的答案:Bean类必须有一个无参构造方法,且必须为属性提供setter方法
参考答案 :
Spring中基于XML的装配方式中设值注入需要满足以下两点要求:

1Bean类必须提供一个默认的无参构造方法。

2.Bean类必须为需要注入的属性提供对应的setter方法。

3、请简述使用静态工厂方式实例化Bean所在配置文件的配置方式。10分
我的答案:
创建名为Bean的Java类;

创建一个Java工厂类,在类中使用静态方法获取Bean实例;

创建Spring配置文件beans2.xml,并配置工厂类Bean;
创建测试类,测试程序。

参考答案 :在配置文件中,首先通过元素配置一个Bean,然后通过class属性指定其对应的静态工厂实现类。由于这种方式配置Bean后,Spring容器不知道哪个是你所需要的工厂方法,所以需要增加factory-method属性来告诉Spring容器。

4、请简述使用实例工厂方式实例化Bean所在配置文件的配置方式。10分
我的答案:
配置工厂

使用factory-bean属性指向配置的实例工厂,使用factory-method属性确定使用工厂中的方法

参考答案 :在配置文件中,首先配置了一个工厂Bean,然后配置需要实例化的Bean。在需要实例化的Bean中,使用factory-bean属性指向配置的实例工厂,该属性值就是上一个工厂Bean的id。使用factory-method属性来确定使用工厂中的方法。

第三章(Spring AOP)

1、AOP采取______,将分散在各个方法中的重复代码提取出来,然后在程序编译或运行时,再将这些提取出来的代码应用到需要执行的地方。1分
参考答案 :【横向抽取机制】

2、JDK动态代理是通过java.lang.reflect.Proxy 类来实现的,我们可以调用Proxy类的______方法来创建代理对象。1分
参考答案 :【newProxyInstance()】

3、Spring中的AOP代理,可以是JDK动态代理,也可以是CGLIB代理,对于使用业务接口的类,Spring默认会使用______来实现AOP。1分
参考答案 :【JDK动态代理】

4、AOP手动使用代理模式有两个典型的例子,分别为JDK动态代理和
_______。1分
参考答案 :【CGLIB代理】

5、的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程)。1分
参考答案 :【AOP】
6、使用AspectJ实现AOP有两种方式:一种是
,另一种是基于注解的声明式AspectJ。3分
参考答案 :【基于XML的声明式AspectJ】

7、AspectJ框架中注解______用于定义切入点表达式,在使用时还需定义一个包含名字和任意参数的方法签名来表示切入点名称。3分
参考答案 :【@Pointcut】

8、在Spring的配置文件中,切入点是通过_____元素来定义的。3分
参考答案 :【< aop:pointcut>】
答案说明 :
9、在Spring配置文件中,< aop:aspect>子元素的pointcut-ref属性用于指定一个已经存在的_______。3分
参考答案 :【切入点名称】

10、Spring配置文件中的< beans>元素下可以包含多个< aop:config>元素,一个< aop:config>元素中又可以包含属性和子元素,其子元素包括< aop:pointcut>、< aop:advisor>和_______。3分
参考答案 :【< aop:aspect>】

11、Spring中的AOP代理默认就是使用______的方式来实现的。3分
参考答案 :【JDK动态代理】

12、
_______: 在目标方法执行后实施增强,可以应用于关闭流、上传文件、删除临时文件等功能。3分
参考答案 :【AfterReturningAdvice(后置通知)】

13、
_______注解用于定义一个切面。3分
参考答案 :【@Aspect】

14、在Spring中,使用______是创建AOP代理的基本方式。3分
参考答案 :【ProxyFactoryBean】

15、基于XML的声明式AspectJ是指通过XML文件来定义切面、切入点及通知,所有的切面、切入点和通知都必须定义在_______元素内。3分
参考答案 :【< aop:config>】

简答题
1、请说出Spring AOP中切入点表达式的基本格式,并做说明。8分
我的答案:
参考答案 :
Spring AOP中切入点表达式的基本格式如下:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)

上述格式中,各部分说明如下:

l modifiers-pattern:表示定义的目标方法的访问修饰符;

l ret-type-pattern:表示定义的目标方法的返回值类型;

l declaring-type-pattern:表示定义的目标方法的类路径;

l name-pattern:表示具体需要被代理的目标方法;

l param-pattern:表示需要被代理的目标方法包含的参数;

l throws-pattern:表示需要被代理的目标方法抛出的异常类型。

其中带有问号(?)的部分,如modifiers-pattern、declaring-type-pattern和throws-pattern表示可配置项;而其他部分属于必须配置项。

2、请对Spring的通知类型进行简要说明。8分
我的答案:
参考答案 :Spring中主要包含5种通知类型,分别是环绕通知,前置通知,后置通知,异常通知和引介通知。其中,环绕通知表示在目标方法执行前后实施增强,可以应用于日志、事务管理等功能。前置通知表示在目标方法执行前实施增强,可以应用于权限管理等功能。后置通知表示在目标方法执行后实施增强,可以应用于关闭流、上传文件、删除临时文件等功能。异常通知表示在方法抛出异常后实施增强,可以应用于处理异常记录日志等功能。引介通知表示在目标类中添加一些新的方法和属性,可以应用于修改老版本程序(增强类)。

第四章(Spring的数据库开发)

填空题
1、定义jdbcTemplate时,需要将(DataSource)注入到jdbcTemplate中。3分
2、使用DataSource配置数据源时,driverClassName的属性值为(指定连接数据库的JDBC驱动程序)
。3分
3、JdbcTemplate类继承自抽象类JdbcAccessor,同时实现了(JdbcOperations)接口。3分
4、在Eclipse中将JUnit4的支持包加入到项目中后,在测试类中会自动导入
(Junit框架支持)包。3分
5、Spring的JDBC模块负责数据库资源管理和(错误处理)。3分
6、(@Test)就是Junit4用来测试的注解,要测试哪个方法,只需要在相应测试的方法上添加此注解即可。3分
7、Spring JDBC模块中support包提供异常转换功能的(SQLException)类。3分
8、Spring JdbcTemplate类中常用方法有(execute())、update()和query()方法。3分
9、Spring的JDBC模块负责(数据库资源管理)和错误处理。3分
10、dbcTemplate类的直接父类JdbcAccessor为子类提供了一些访问数据库时使用的公共属性,其中DataSource主要功能是获取(获取数据库连接)。3分
11、JdbcTemplate类的继承关系十分简单。它继承自抽象类(JdbcAccessor),同时实现了JdbcOperations接口。3分
12、Spring JDBC模块中support包含了core和(object)包的支持类。3分
13、Spring JDBC模块中dataSource以(JDBC的方式)的方式访问数据库。3分
14、可以说,(JdbcTemplate)类是Spring JDBC的核心类。3分
15、JDBC连接数据库时需要4个基本属性,包括有(driverClassName)、url、username和password。3分
16、(JDBC)是Spring数据访问/集成中的重要模块。3分
17、Spring JDBC模块中dataSource包中有访问(数据源)的实用工具类。3分
18、定义jdbcTemplate时,需要将(dataSource)注入到jdbcTemplate中,而其他需要使用jdbcTemplate的Bean,也需要将jdbcTemplate注入到该Bean中。3分
19、针对数据库的操作,Spring框架提供了(JdbcTemplate)类,该类是Spring框架数据抽象层的基础。3分
20、JdbcTemplate类中还提供了大量的(query())方法来处理各种对数据库表的查询操作。3分
简答题
21、请简述JdbcTemplate类的继承和实现关系。8分
我的答案:JdbcTemplate类的继承关系十分简单。它继承自抽象类JdbcAccessor,同时实现了JdbcOperations接口。
22、请简述使用JdbcTemplate类演示数据库操作时创建项目所需要的JAR包有哪些。8分
我的答案:
org.springframework.orm-3.1.2.RELEASE.jar

org.springframework.transaction-3.1.2.RELEASE.jar

mysql-connector-java-5.1.40.jar

23、请简述SpringJDBC的query()方法中获取封装Account类的BeanPropertyRowMapper对象的方法。8分
我的答案:
24、请简述如何使用Junit对程序中的方法进行测试。8分
我的答案:
1.导入Junit所需的依赖包

2.编写Java文件对应的测试类

3.加上注解@Test

4.运行测试类

5.查看测试结果

25、请简述JdbcTemplate父类JdbcAccessor提供访问数据库时使用的公共属性及作用。8分
我的答案:
1.DataSource:获取数据库连接

2.SQLExceptionTranslator:负责对 SQLException 进行转译工作

第五章(Spring的事务管理)

填空题
1、TransactionDefinition接口是事务定义(描述)的对象,该对象中定义了
(事务规则),并提供了获取事务相关信息的方法。2分

2、声明式事务管理主要思想是将事务管理作为一个“切面”代码单独编写,然后通过(AOP)技术将事务管理的“切面”代码植入到业务目标类中。2分

3、PlatformTransactionManager接口的实现类(JtaTransactionManager)
用于配置全局事务管理器。2分

4、在事务管理过程中,数据的查询不会影响原数据的改变,所以不需要进行事务管理,而对于数据的插入、更新和删除操作,必须进行事务管理。如果没有指定事务的传播行为,Spring默认传播行为是(REQUIRED)。2分

5、Spring事务管理中的(TransactionStatus)接口是事务的状态,它描述了某一时间点上事务的状态信息。2分

6、Spring的声明式事务管理可以通过两种方式来实现,一种是基于XML的方式,另一种是基于(Annotation)的方式。2分

7、如果没有指定事务的传播行为,Spring默认传播行为(REQUIRED)。

8、声明式事务管理:是通过(AOP技术)实现的事务管理。2分

9、Spring配置文件中< tx:attributes>元素可通过配置多个(< tx:method>)子元素来配置执行事务的细节。2分

10、使用基于注解方式的事务管理需要在使用事务的Spring Bean类或者Bean类的方法上添加注解(@Transactional)。2分

11、< tx:method>元素的属性read-only用于指定事务是否只读,其默认值为
(false)。2分

12、事务管理的3个核心接口包括有PlatformTransactionManager、
(TransactionDefinition)和TransactionStatus。2分

13、Spring2.0以后,提供了tx命名空间来配置事务,tx命名空间下提供了
(< tx:advice>)元素来配置事务的通知(增强处理)。2分

14、Spring的声明式事务管理可以通过两种方式来实现,一种是基于(XML)的方式,另一种是基于Annotation的方式。2分

15、如果将注解@Transactional添加在Bean类上,则表示事务的设置对整个Bean类的(所有方法)都起作用。2分

16、配置< tx:advice>元素时,通常需要指定id和transaction-manager属性,其中id属性是配置文件中的(唯一标识)。2分

17、在Spring的所有JAR包中,包含一个名为(spring-tx-4.3.6.RELEASE)的JAR包,该包就是Spring提供的用于事务管理的依赖包。2分

18、PlatformTransactionManager接口是Spring提供的平台事务管理器,主要用于管理事务,该接口中提供了(三个)事务操作的方法。2分

19、基于Annotation方式的声明式事务要在需要使用事务的Spring Bean类或者Bean类的方法上添加注解(@Transactional)。2分

20、基于XML方式的声明式事务管理配置< tx:advice>元素时, id属性是配置文件中的唯一标识,(transactio-manager)属性用于指定事务管理器。2分

21、(声明式事务管理)在一定程度上减少了工作量,提高了开发效率,所以在实际开发中,通常都推荐使用该种事务管理方式。2分

22、PlatformTransactionManager接口的getTransaction()方法会返回一个
(TransactionStatus)对象,该对象就表示一个事务。2分

23、Spring中的事务管理分为两种方式,在实际开发中通常都推荐使用(声明式)事务管理。2分

24、Spring中的事务管理分为两种方式:一种是传统的编程式事务管理,另一种是(声明式事务管理)。2分

25、在实际开发中,操作数据库时还会涉及到(事务)管理问题。2分

简答题

26、请简述基于Annotation方式的声明式事务实现步骤。10分
我的答案:
1.在Spring容器中注册事务注解驱动

2.在需要使用事务的Spring Bean类或者Bean类的方法上添加注解@Transactional

27、Spring中基于Annotation方式的声明式事务的实现。10分
我的答案:
1.在Spring容器中注册事务注解驱动

2.在需要使用事务的Spring Bean类或者Bean类的方法上添加注解@Transactional

28、请简述相较于编程式事务管理,声明式事务管理的主要优势。10分
我的答案:大大减少了配置文件的代码量
29、请写出在Spring容器中注册事务注解驱动的代码。10分
我的答案:<tx:annotation-driven transaction-manager=“transactionManager”/>
30、在Spring的JAR包org.springframework.transaction中有3个事务管理的接口文件,请具体指出并做说明。10分
我的答案:
1.PlatformTransactionManager 接口是 Spring 提供的平台事务管理器,用于管理事务。

2.TransactionDefinition 接口是事务定义(描述)的对象,它提供了事务相关信息获取的方法。

3.TransactionStatus 接口是事务的状态,它描述了某一时间点上事务的状态信息。

第六章(初始MyBatis)

填空题
1、MyBatis框架也被称之为ORM,即(ORM)框架。2分

2、在Executor接口的执行方法中,包含一个(MappedStatement)类型的参数,该参数是对映射信息的封装,用来存储要映射的SQL语句的id、参数等。2分

3、mybatis-config.xml作为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,其中主要内容是获取(获取数据库连接)。2分

4、MyBatis由会话工厂(SqlSessionFactory)创建SqlSession对象,该对象中包含了执行SQL的所有方法。

5、MyBatis的删除操作在映射文件中是通过配置(< delete>)元素来实现的。

6、MyBatis(前身是(iBatis))是一个支持普通SQL查询、存储过程以及高级映射的持久层框架。2分

7、在MyBatis的映射文件中,添加操作是通过(< insert>)元素来实现的。2分

8、入门程序中可以使用SqlSession的(selectList())方法模糊查询客户信息。

9、使用ORM框架后,应用程序不再直接访问底层数据库,而是以(面向对象)的方式来操作持久化对象。2分

10、MyBatis和Hibernate都属于持久层框架,也被称之为(ORM)框架。2分

11、MyBatis(前身是iBatis)是一个支持普通SQL查询、存储过程以及高级映射的(持久层)框架。2分

12、(MyBatis)是当前主流的Java持久层框架之一,它与Hibernate一样,也是一种ORM框架。2分

13、MyBatis入门程序中可以使用SqlSession的(insert())方法执行添加操作。2分

14、MyBatis映射文件中< mapper>元素是配置文件的根元素,它包含一个
(namespace)属性,该属性为这个< mapper>指定了唯一的命名空间。2分

15、MyBatis映射文件中配置了操作数据库的SQL语句,需要在(mybatis-config.xml)中加载才能执行。2分

16、MyBatis入门程序中可以使用SqlSession的(delete())方法执行删除操作。2分

17、对于一些复杂的和需要优化性能的项目来说,使用(MyBatis)持久层框架更加合适。2分

18、MyBatis的更新操作在映射文件中是通过配置(< update>)元素来实现的。2分

19、MyBatis入门程序中可以使用SqlSession的(update())方法执行更新操作。2分

20、MyBatis底层定义了一个(Exceutor)接口来操作数据库,它会根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存的维护。2分

简答题

21、请简述Hibernate和MyBatis这两个框架的主要区别。10分
我的答案:
Hibernate是一个全表映射的框架。通常开发者只需要定义好持久化对象到数据库表的映射关系,就可以用过Hibernate提供的方法完成持久层操作。

MyBatis是一个半自动映射的框架。需要手动提供POJO、SQL和映射关系

22、请简述Hibernate和MyBatis框架的主要区别。10分
我的答案:
Hibernate是一个全表映射的框架。通常开发者只需要定义好持久化对象到数据库表的映射关系,就可以用过Hibernate提供的方法完成持久层操作。

MyBatis是一个半自动映射的框架。需要手动提供POJO、SQL和映射关系

23、请简要介绍MyBatis的工作原理。10分
我的答案:
1.读取MyBatis配置文件mybatis-config.xml

2.加载映射文件Mapper.xml

3.构建会话工厂

4.创建SqlSession对象

5.MyBatis底层定义了一个Exceutor接口来操作数据库,它会根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存的维护

6.输入参数映射

7.输出结果映射

24、简要说明单独进行MyBatis框架进行程序开发时候,主要需要哪些JAR包。10分
我的答案:MyBatis的核心包和MyBatis的依赖包

25、请简述执行添加操作与执行查询操作过程中需要额外注意的地方。10分
我的答案:需要通过SqlSession的commit()方法提交事务

26、请简述从MyBatis手册中快速获取MyBatis配置文件的方式。10分
我的答案:
打开MyBatis的使用手册mybatis-3.x.pdf,在Getting Started下的Exploring Mapped SQL Statements中,即可找到映射文件的约束信息

第七章(MyBatis的核心配置)

填空题
1、在MyBatis框架的核心配置文件中,(< configuration>)是配置文件的根元素,其他元素都要在该元素内配置。2分

2、当数据表中的列和需要返回的对象的属性不完全一致, MyBatis是不会自动赋值的。此时,就可以使用(< resultMap>)元素进行处理。2分

3、SqlSessionFactory对象的实例可以通过(SqlSessionFactoruBuilder)
对象来构建,而该对象可以通过XML配置文件或一个预先定义好的Configuration实例构建出。2分

4、< typeAliases>元素的子元素< typeAlias>中的type属性用于指定需要被定义别名的类的全限定名;(alias)属性的属性值user就是自定义的别名。2分

5、MyBatis中默认的ObjectFactory的作用就是(实例化目标类),它既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。2分

6、除了可以通过外部配置文件来定义属性值外,还可以通过配置< properties>元素的子元素(< property>),以及通过方法参数传递的方式来获取属性值。2分

7、在< environment>元素内,包含事务管理和数据源的配置信息,其中(< dataSource>)元素用于配置数据源,它的(type)属性用于指定使用哪种数据源。

8、< resultMap>元素表示结果映射集,是MyBatis中最重要也是最强大的元素。它的主要作用是定义(映射规则)、级联的更新以及定义类型转化器等。

9、MyBatis映射文件中< insert>的< selectKey>子元素的order属性可以被设置为(BEFORE)或(AFTER)。2分

10、SqlSessionFactory是MyBatis框架中十分重要的对象,它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建(SqlSession)。2分

11、在MyBatis中,可以配置两种类型的事务管理器,分别是(JDBC)和(MANAGED)

12、在< environment>元素内,包含事务管理和数据源的配置信息,其中
(< transcationManager>)元素用于配置事务管理。2分

13、在MyBatis映射文件中,(< configuration>)元素是映射文件的根元素,其他元素都是它的子元素。2分

14、MyBatis允许在已映射语句执行过程中的某一点进行拦截调用,这种拦截调用是通过插件来实现的。(< plugins>)元素的作用就是配置用户所开发的插件。

15、< update>元素的keyColumn属性用于设置第几列是主键,当主键列不是表中的(第一列)时需要设置

16、typeHandler的作用就是将预处理语句中传入的参数从(javaType)转换为(jdbcType),或者从数据库取出结果时将(jdbcType)转换为(javaType)

17、< properties>是一个配置属性的元素,该元素通常可以通过
(< property>)属性来引入外部的常量配置文件。2分

18、使用< include>元素的refid属性可以引用自定义的代码片段,refid的属性值为自定义代码片段的(name)2分

19、在使用MyBatis框架时,主要涉及到了两个核心对象:
(SqlSessionFactory)和SqlSession,它们在MyBatis框架中起着至关重要的作用。

20、< select>元素属性useCache是用来控制(二级缓存)的开启和关闭。2分

21、< settings>元素主要用于改变MyBatis运行时的行为,例如开启
(二级缓存)、开启(延迟加载)等。2分

22、SqlSession是MyBatis框架中另一个重要的对象,它是应用程序与持久层之间执行交互操作的一个(单线程)线程对象,其主要作用是执行持久化操作。

23、< resultMap>元素的(type属性)属性表示需要映射的POJO,id属性是这个resultMap的唯一标识

24、< typeAliases>元素的子元素< typeAlias>中的type属性用于指定需要被定义别名的类的(全限定名);alias属性的属性值就是自定义的(别名)

25、使用完SqlSession对象之后,要及时的关闭它,通常可以将其放在
(finally)块中关闭。2分

26、MyBatis框架每次创建结果对象的新实例时,都会使用一个(ObjectFactory)的实例来完成。2分

27、每一个线程都应该有一个自己的SqlSession实例,并且该实例是不能被共享的。使用完SqlSession对象之后,要及时的关闭它,通常可以将其放在
(finally)块中关闭。2分

28、< resultMap>元素的子元素< id>用于表示哪个列是
(主键),而(< result>)
元素用于表示POJO和数据表中普通列的映射关系。2分

29、MyBatis映射文件中< insert>元素的keyProperty属性作用是将插入或更新操作时的返回值赋值给PO类的某个属性,如果需要设置联合主键,可以在多个值之间用(逗号)隔开。2分

简答题
30、请简述构建SqlSessionFactory实例的方法。6分
我的答案:
通过SqlSessionFactoryBuilder对象构建,SqlSessionFactoryBuilder通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory实例

31、请简述< properties>元素的使用方法。6分
我的答案:
1.在项目的src目录下,添加一个全名为db.properties的配置文件

2.在MyBaties配置文件mybaties-config.xml中配置<properties…/>元素

3.修改配置文件中数据库连接的信息

32、请简述MyBatis配置文件中< settings>元素的主要作用。6分
我的答案:< settings>元素主要用于改变MyBatis运行时的行为,例如开启二级缓存、开启延迟加载等

33、请简述MyBatis中默认的ObjectFactory的作用。6分
我的答案:MyBatis中默认的ObjectFactory的作用就是实例化目标类,它既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化

34、请简述如何自定义对象工厂。6分
我的答案:需要实现ObjectFactory接口,或者继承DefaultObjectFactory类。由于DefaultObjectFactory类已经继承了ObjectFactory接口,所以通过继承DefaultObjectFactory类实现即可

35、请列举SqlSession对象中包含的常用方法(至少4个)。6分
我的答案:
void select(String statement,Object parameter,RowBounds rowBounds)

int insert(String statement)

int update(String statement)

int delete(String statement)

36、请列举5个MyBatis映射文件中的主要元素。6分
我的答案:
< properties>

< typeAliases>

< typeHandler>

< ObjectFactory>

< plugins>

第八-九章(动态SQL、MyBatis的关联映射)

填空题
1、< association>元素的属性fetchType有(lazy)和eager两个属性值。2分

2、实体映射文件中< select>元素的resultMap属性值必须与< resultMap>元素的(id)属性值一样。2分

3、在数据库中,多对多的关联关系通常使用一个(中间表)来维护,比如该表中的订单id作为外键参照订单表的id,商品id作为外键参照商品表的id。2分

4、在MyBaits映射文件中使用< set>和< if>元素组合进行update语句动态SQL组装时,如果< set>元素内包含的内容都为空,则会出现(SQL语法错误)。2分

5、SQL语句中,where后直接跟and,这在运行时肯定会报(SQL语法)错误。2分

6、在关系型数据库中,多对多关系会产生(中间关系表)表,引入两张表的主键作为外键,两个主键成为联合主键或使用新的字段作为主键。2分

7、在使用< if>元素根据客户姓名和职业模糊查询客户信息时,可以使用MySQL数据库的(concat)函数进行字符串拼接。2分

8、< association>元素的(propertu)指定映射到的实体类对象属性,与表字段一一对应。2分

9、在数据库中,多对多的关联关系通常使用一个(中间表)来维护。2分

10、< bind>元素用于从OGNL表达式中创建一个变量,并将其绑定到上下文,常用于(模糊查询)的sql中。2分

11、可以执行SqlSession的(selectList())查询方法,返回结果集。2分

12、< collection>子元素的ofType属性与javaType属性对应,它用于指定实体对象中集合类属性所包含的(元素类型)。2分

13、MyBatis在映射文件中加载关联关系对象主要通过两种方式:
(嵌套查询)和(嵌套结果)2分

14、< association>元素的select属性用于指定引入嵌套查询的子SQL语句,该属性用于关联映射中的(嵌套查询)。2分

15、一对多的关系就是一个A类类型对应多个B类类型的情况,需要在A类中以
集合
的方式引入B类类型的对象,在B类中定义A类类型的属性a2分

16、使用了< choose>元素时,第一个(< choose>)中的条件为真,则只动态组装第一个(< when>)内的SQL片段,否则就继续向下判断第二个< when>元素中的条件是否为真,以此类推。当前面所有when元素中的条件都不为真时,则只组装(< otherwise>)
内的SQL片段。2分

17、在MyBatis中,(< if>)元素是最常用的判断语句,它类似于Java中的if语句,主要用于实现某些简单的条件选择。2分

18、使用MyBatis时,需要将新创建的映射文件路径配置到(核心配置)文件中才有效。2分

19、MyBatis是通过< resultMap>元素的(< collection>)子元素该元素来处理一对一关联关系的。2分

20、当在MyBaits文件中使用了< bind>元素,在SQL语句中可以直接引用< bind>元素的(name)属性值即可进行动态SQL组装。2分

21、< foreach>元素通常在构建(in)条件语句时使用。2分

22、针对多表之间的操作,MyBatis提供了(关联映射)来处理对象与对象之间的关联关系。2分

23、动态SQL是MyBatis的强大特性之一,MyBatis3采用了功能强大的基于
(OGNL)的表达式来完成动态SQL。2分

简答题
24、请简述MyBatis嵌套查询方式的弊端。9分
我的答案:每执行一次循环语句,都需要向数据库中发送一条查询SQL,其查询效率是非常低的

25、请简述在Java中,通过对象如何进行关系描述。9分
我的答案:
一对一:在本类中定义对方类型的对象,A类中定义B类类型的属性b,B类中定义A类类型的属性a

一对多:个A类类型对应多个B类类型的情况,需要在A类中以集合的方式引入B类类型的对象,在B类中定义A类类型的属性a

多对多:在A类中定义B类类型的集合,在B类中定义A类类型的集合

26、请简要说明MyBatis在映射文件中加载关联关系对象的方式。9分
我的答案:MyBatis在映射文件中加载关联关系对象主要通过两种方式:嵌套查询和嵌套结果。嵌套查询是指通过执行另外一条SQL映射语句来返回预期的复杂类型;嵌套结果是使用嵌套结果映射来处理重复的联合结果的子集

27、请简述MyBatis中延迟加载的配置。9分
我的答案:MyBatis默认没有开启延迟加载,需要在核心配置文件中的< settings>元素内进行将延迟加载开关lazyLoadingEnabled设置为true并将积极加载开关aggressiveLazyLoading设置为false。由于MyBatis关联映射的< association>元素和< collection>元素中都已默认配置了延迟加载属性,所以不需配置

28、请简述< if>元素如何使用。9分
我的答案:MyBatis中的< if>元素与java中的if语句功能类似,都用于对条件语句进行判断。MyBatis中的< if>语句以“< if>”开头,并以“< /if>”结尾,在使用是需要使用其test属性对其条件进行判断。

29、请简述MyBatis动态SQL中的主要元素及说明。9分
我的答案:
< if>:判断语句,用于单条件分支判断

< choose>(< when>、< otherwise>):相当于Java中的switch…case…default语句,用于多条件分支判断

< where>、< trim>、< set>:辅助元素,用于处理一些SQL拼装、特殊字符问题

< foreach>:循环语句,常用于in语句等列举条件中

< bind>:从OGNL表达式中创建一个变量,并将其绑定到上下文,常用于模糊查询的sql中

第十章(Spring与MyBatis整合)

填空题
1、MapperFactoryBean的sqlSessionTemplate参数用于指定SqlSessionTemplate。如果与sqlSessionFactory同时设定,则只会启用
(sqlSessionFactory)。2分

2、通常情况下,MapperScannerConfigurer在使用时只需通过(basePackage)属性指定需要扫描的包即可,Spring会自动的通过包中的接口来生成映射器。2分

3、(SqlSessionTemplate)是mybatis-spring的核心类,它负责管理MyBatis的SqlSession,调用MyBatis的SQL方法。2分

4、MyBatis-Spring团队提供了一种自动扫描的形式来配置MyBatis中的映射器——采用(MapperScannerConfigurer)类。2分

5、进行MyBatis与Spring的整合时,Mybatis配置文件中需要配置Mapper文件位置以及配置(application.properties)。2分

6、SqlSessionDaoSupport是一个抽象支持类,可以通过SqlSessionDaoSupport类的(getSqlSession)方法来获取所需的SqlSession。2分

7、MyBatis工厂的作用就是构建SqlSessionFactory,它是通过(mybatis-spring)包中提供的org.mybatis.spring.SqlSessionFactoryBean类来配置的。2分

8、在MyBatis+Spring的项目中,事务是由(Spring)来管理的。2分

9、在MyBatis与 Spring整合配置时, MyBatis工厂通常需要提供两个参数:一个是(数据源),另一个是MyBatis的配置文件路径。2分

10、可以使用mybatis-spring包中所提供的SqlSessionTemplate类或(SqlSessionDaoSupport)类来实现向DAO实现类中注入SqlSessionFactory。2分

11、在进行Spring与MyBatis整合时,Spring框架所需要准备的JAR包共10个,其中包括:4个核心模块JAR,AOP开发使用的JAR,(JDBC)和事务的JAR。2分

12、为了满足MyBatis用户对Spring框架的需求,MyBatis社区自己开发了一个用于整合这两个框架的中间件——(MyBatis-Spring)。2分

13、(MapperFactoryBean)是MyBatis-Spring团队提供的一个用于根据Mapper接口生成Mapper对象的类。

14、创建项目时,需要将所准备的JAR包添加到项目的(lib)目录中,并发布到类路径下。2分

15、由于在Spring中已经配置了数据源信息,所以在MyBatis的配置文件中就不再需要配置数据源信息。只需要使用(< typeAliases>)和(< mappers>)元素来配置文件别名以及指定Mapper文件位置即可。2分

16、在业务处理类中,使用Spring的注解(@Service)来标识业务层的类,使用了(@Transactinal)注解来标识事务处理的类。2分

17、MapperFactoryBean是MyBatis-Spring团队提供的一个用于根据(Mapper接口)生成Mapper对象的类。2分

18、采用传统DAO开发方式进行MyBatis与Spring框架的整合时,需要编写DAO接口以及接口的实现类,并且需要向DAO实现类中注入(SqlSessionFactory)。2分

19、在进行Spring与MyBatis整合时,会涉及到的JAR包有MyBaits框架包、Spring框架包、(Spring与MyBatis整合的中间JAR包)、数据库驱动包和数据源包。2分

20、在进行Spring与MyBatis整合时,MyBatis框架所需要准备的JAR包共13个,包括核心包(mybatis-3.4.2,jar),以及其解压文件夹中lib目录中的所有JAR。2分

简答题
21、请简述MyBatis与Spring整合时,Spring的配置文件主要配置内容。10分
我的答案:4个核心模块JAR,AOP开发使用的JAR,JDBC和事务的JAR。

22、请对mybatis-spring包中所提供的两个类SqlSessionTemplate和SqlSessionDaoSupport进简要介绍。10分
我的答案:SqlSessionTemplate:是mybatis-spring的核心类,它负责管理MyBatis的SqlSession,调用MyBatis的SQL方法。
SqlSessionDaoSupport:是一个抽象支持类,它继承了DaoSupport类,主要是作为DAO的基类来使用。

23、请简述MapperFactoryBean类在Spring配置文件中使用时可以配置的参数。10分
我的答案:
mapperInterface:用于指定接口

sqlSessionFactoty:用于指定sqlSessionFactoty

sqlSessionTemplate:用于指定sqlSessionTemplate。如果与sqlSessionFactory同时设定,则只会启用sqlSessionFactoty

24、请简述在Spring与MyBatis整合项目中如何进行事务测试。10分
我的答案:
在项目中,Service层既是处理业务的地方,又是管理数据库事务的地方。要对事务进行测试,首先需要创建Service层,并在Service层编写添加客户操作的代码;然后在添加操作的代码后,有意的添加一段异常代码(如int i = 1/0;)来模拟现实中的意外情况;最后编写测试方法,调用业务层的添加方法。这样,程序在执行到错误代码时就会出现异常。 在项目中,Service层既是处理业务的地方,又是管理数据库事务的地方。要对事务进行测试,首先需要创建Service层,并在Service层编写添加客户操作的代码;然后在添加操作的代码后,有意的添加一段异常代码(如int i = 1/0;)来模拟现实中的意外情况;最后编写测试方法,调用业务层的添加方法。这样,程序在执行到错误代码时就会出现异常。

25、请简述在MyBatis+Spring的项目中,使用传统的DAO开发方式可能出现的问题。10分
我的答案:在MyBatis+Spring的项目中,虽然使用传统的DAO开发方式可以实现所需功能,但是采用这种方式在实现类中会出现大量的重复代码,在方法中也需要指定映射文件中执行语句的id,并且不能保证编写时id的正确性(运行时才能知道)

26、请简述MapperScannerConfigurer类在Spring配置文件中如何使用。10分
我的答案:
< !-- Mapper代理开发(基于MapperScannerConfigurer) -->

< bean class=“org.mybatis.spring.mapper.MapperScannerConfigurer”>

< property name=“basePackage” value=“com.itheima.mapper” />

< /bean>

第十一章(Spring MVC入门)

填空题
1、控制器类会调用Controller的实现方法handleRequest()来处理请求,并返回一个(ModelAndView)对象。5分

2、Spring MVC支持多种视图技术,包括(JSP)、Velocity和FreeMarker等。5分

3、在< servlet>中,通过其子元素(< init-param>)配置Spring MVC配置文件的位置。5分

4、前端控制器DispatcherServlet拦截到请求后,会调用(HandlerMapping)处理器映射器。5分

5、Spring MVC使用基于(XML)的配置文件,在编辑后,不需要重新编译应用程序。5分

6、Spring MVC提供了一个前端控制器(DispatcherServlet),使开发人员无需额外开发控制器对象。5分

7、Spring MVC入门所需要的Spring MVC框架包主要有两个:spring-web.jar和(spring-webmvc.jar)。5分

8、Spring MVC的配置文件中,可以配置处理器映射、处理器映射器、处理器适配器和(视图解析图)。5分

9、Spring MVC是Spring提供的一个实现了(Web MVC)设计模式的轻量级Web框架。5分

10、阅读下面配置代码,并将正确信息填写在相应括号中:

< servlet>
< servlet-name>springmvc</ servlet-name>
< servlet-class>
org.springframework.web.servlet._____(DispatcherServlet)
</ servlet-class>
< init-param>
< param-name>contextConfigLocation</ param-name>
< param-value>classpath:springmvc-config.xml</ param-value>
</ init-param>
< load-on-startup>1</l oad-on-startup>
</ servlet>
< servlet-mapping>
< servlet-name> _____(springmvc)</ servlet-name>
< url-pattern>/</ url-pattern>
</ servlet-mapping>

5分
11、SSM框架指的是Spring、(Spring MVC)以及MyBatis。5分

12、(handleRequest)是Controller接口的实现方法,控制器类会调用该方法来处理请求。5分

13、在Spring MVC的执行流程中,Controller执行完成后,会返回一个
(ModeAndView)对象。5分

14、前端控制器拦截请求后,会调用(HandlerMapping)。5分

简答题
15、请简述Spring MVC的特点。10分
我的答案:
1.是Spring框架的一部分,可以方便的利用Spring所提供的其他功能。

2.灵活性强,易于与其他框架集成。

3.提供了一个前端控制器DispatcherServlet,使开发人员无需额外开发控制器对象。

4.可自动绑定用户输入,并能正确的转换数据类型。

5.内置了常见的校验器,可以校验用户输入。如果校验不能通过,那么就会重定向到输入表单。

6.支持国际化。可以根据用户区域显示多国语言。

7.支持多种视图技术。它支持JSP、Velocity和FreeMarker等视图技术。

8.使用基于XML的配置文件,在编辑后,不需要重新编译应用程序。

16、请简述第一个Spring MVC应用的实现步骤。10分
我的答案:
1.创建项目,引入JAR包

2.配置前端控制器

3.创建Controller类

4.创建Spring MVC的配置文件,配置控制器映射信息

5.创建视图(View)页面

6.启动项目,测试应用

17、请简述Spring MVC框架的工作执行流程。10分
我的答案:
1.用户通过浏览器向服务器发送请求,请求会被Spring MVC的前端控制器DispatcherServlet所拦截;

2.DispatcherServlet拦截到请求后,会调用HandlerMapping处理器映射器;

3.处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;

4.DispatcherServlet会通过返回信息选择合适的HandlerAdapter(处理器适配器);

5.HandlerAdapter会调用并执行Handler(处理器),这里的处理器指的就是程序中编写的Controller类,也被称之为后端控制器;

6.Controller执行完成后,会返回一个ModelAndView对象,该对象中会包含视图名或包含模型和视图名;

7.HandlerAdapter将ModelAndView对象返回给DispatcherServlet;

8.DispatcherServlet会根据ModelAndView对象选择一个合适的ViewReslover(视图解析器);

9.ViewReslover解析后,会向DispatcherServlet中返回具体的View(视图);

10.DispatcherServlet对View进行渲染(即将模型数据填充至视图中);

11.视图渲染结果会返回给客户端浏览器显示。

第十二章(Spring MVC的核心类和注解)

填空题
1、org.springframework.stereotype.Controller注解类型用于指示Spring类的实例是一个(控制器)。3分

2、在控制器类中添加完@Controller注解后,为了保证Spring能够找到控制器类,需要在Spring MVC的配置文件中引入spring-context的schema信息并使用(< content:component-scan>)元素指定需要扫描的类包。3分

3、在实际开发中通常都会使用基于(注解)的形式来实现控制器。3分

4、如果方法中添加了Model参数,则每次调用该请求处理方法时,Spring MVC都会(创建Model对象),并将其作为参数传递给方法。3分

5、注解@RequestMapping的method属性用于指定该方法用于处理哪种类型的请求方式,如果需要支持多个请求方式则需要通过{}写成数组的形式,并且多个请求方式之间是有(英文逗号)分隔。3分

6、Spring MVC配置文件中设置视图解析器的类名为(ViewResolver)。3分

7、使用注解方式时,程序的运行需要依赖Spring的( AOP )
包。3分

8、RequestMapping注解类型用于映射(一个请求或一个方法)。3分

9、org.springframework.ui.Model类型不是一个Servlet API类型,而是一个包含了Map对象的(Spring MVC)类型。3分

10、Sring MVC中String类型的返回值无法携带数据,所以需要通过参数Model对象的(addAttribute())方法来添加数据。3分

11、在Spring框架的(4.3)版本中,引入了组合注解,来帮助简化常用的HTTP方法的映射。3分

12、由于(ModelAndView)类型未能实现数据与视图之间的解耦,所以在企业开发时,方法的返回类型通常都会使用String。3分

13、为了保证Spring能够找到控制器类,还需要在Spring MVC的配置文件中添加相应的(扫描配置)信息。3分

14、Spring MVC配置文件中设置视图解析器后缀的属性值为(suffix)。3分

15、使用它String返回值类型进行重定向时,需要使用(redirect)关键词。

16、如果没有通过< init-param>元素配置,则应用程序会默认去(WEB-INF)寻找配置文件。3分

17、注解@RequestMapping的默认属性是(value)。3分

18、在视图解析器配置中,可以设置视图的(前缀和后缀)。3分

19、如果< load-on-startup>元素不存在,则应用程序会(在第一个Servlet请求时)加载该Servlet。3分

20、Spring MVC中,视图解析器的主要作用是(解析视图)。3分

简答题
21、请简述RequestMapping注解类型的用法与作用。10分
我的答案:

  1. 标注在方法上:作为请求处理方法在程序接收到对应的URL请求时被调用

  2. 标注在类上:该类中的所有方法都将映射为相对于类级别的请求,表示该控制器所处理的所有请求都被映射到value属性值所指定的路径下。

22、请简述@RequestMapping注解value和method属性的作用。10分
我的答案:
value:用于映射一个请求和一个方法,可以标注在一个方法或一个类上

method:用于指定该方法用于处理哪种类型的请求方式

23、请列举出三个组合注解,并说明其作用。10分
我的答案:
@GetMapping:匹配GET方式的请求;
@PostMapping:匹配POST方式的请求;
@PutMapping:匹配PUT方式的请求;
24、请简述ModelAndView、String和void三种返回类型的作用。10分
我的答案:
ModelAndView:可以添加Model数据,并指定视图

String:可以跳转视图,但不能携带数据

void:在异步请求时使用,它只返回数据,而不会跳转视图

第十三章(数据绑定)

填空题
1、在使用POJO类型数据绑定时,前端请求的参数名必须与要绑定的POJO类中的(属性名)一样,这样才会自动将请求数据绑定到POJO对象中,否则后台接收的参数值为(null)。2分

2、如果将订单和用户的所有查询条件都封装在一个简单POJO中,显然会
比较混乱,这时就可以考虑使用(包装POJO)类型的数据绑定。2分

3、对于一些特殊类型的参数无法在后台进行直接转换则需要自定义(转换器(Converter))或格式化(Formatter)来进行数据绑定。2分

4、Converter接口中有一个类型转换方法(Convert())。2分

5、Converter<S, T>接口中的S表示源类型,T表示(目标类型)。2分

6、在使用集合数据绑定时,后台方法中不支持直接使用(集合形参)进行数据绑定。2分

7、在使用集合数据绑定时,后台方法中不支持直接使用集合形参进行数据绑定,所以需要使用包装POJO作为形参,然后在包装POJO中包装一个(集合)属性。2分

8、前端请求中参数名和后台控制器类方法中的形参名不一样,可以使用(@RequestParam)注解来进行间接数据绑定。2分

9、批量修改用户操作时,前端请求传递过来的数据可能就会批量包含各种类型的数据,此时可以采用(复杂数据绑定)的形式。2分

10、在数据绑定过程中,Spring MVC框架会通过(数据绑定组件(DataBinder))将请求参数串的内容进行类型转换,然后将转换后的值赋给控制器类中方法的形参。2分

11、当前端请求的参数比较简单时,可以在后台方法的形参中直接使用Spring MVC提供的(默认参数类型)类型进行数据绑定。2分

12、DataBinder调用(ConversionService)组件进行数据类型转换、数据格式化等工作,并将ServletRequest对象中的消息填充到参数对象中。2分

13、简单数据类型的绑定,就是指Java中几种(基本数据类型的绑定)的绑定,例如int、String、Double等类型。2分

14、Spring框架提供了一个(Converter)用于将一种类型的对象转换为另一种类型的对象。2分

15、在实际开发时,遇到前端请求需要传递到后台一个或多个相同名称参数的情况(如批量删除)时,可以采用(绑定数组)的方式来完成实际需求。2分

16、Spring MVC中的数据绑定主要分为(简单数据绑定和复杂数据绑定)。

17、在前端请求中,后台可能会出现请求参数(中文乱码)问题。2分

18、Spring MVC提供了(@RequestParam)注解类型来进行间接数据绑定。

19、Spring MVC中@RequestParam的属性required用于指定参数是否必须,默认是(true)。2分

20、POJO类型的数据绑定就是将所有关联的请求参数封装在一个(POJO)中。2分

21、包装POJO,就是在一个POJO中包含另一个(简单POJO)。2分

22、使用包装POJO类型数据绑定时,如果前端条件参数是包装类中POJO的子属性,则参数名必须为(对象.属性)。2分

23、Spring MVC在数据绑定过程中,校验完成后会生成数据绑定结果(BindingResult)对象。2分

24、除了使用Converter进行转换外,我们还可以使用(Formatter)来进行类型转换。2分

25、Model是一个接口,ModelMap是一个接口实现,作用是将model数据填充到(request)。2分

26、Spring MVC将(ServletRequest)对象传递给DataBinder进行类型转换。2分

27、日期数据就需要开发者自定义(转换器(Converter)或格式化(Formatter))来进行数据绑定。2分

28、在web.xml中配置(Spring提供的编码过滤器)可以解决请求参数中的中文乱码问题。2分

29、方法参数中如果使用了HttpServletRequest类型,那么可以通过该对象的(request)方法来获取指定的参数。2分

30、Spring MVC中@RequestParam的属性(defaultValue)表示如果请求中没有同名参数时的默认值。2分

简答题

31、请简述Spring MVC中POJO类型数据的绑定是怎么实现的。8分
我的答案:
POJO类型的数据绑定就是将所有关联的请求参数封装在一个POJO中,然后在方法中直接使用该POJO作为形参来完成数据绑定。

32、请简述Spring MVC数据绑定的过程。8分
我的答案:
1.Spring MVC将ServletRequest对象传递给DataBinder;

2.将处理方法的入参对象传递给DataBinder;

3.DataBinder调用ConversionService组件进行数据类型转换、数据格式化等工作,并将ServletRequest对象中的消息填充到参数对象中;

4.调用Validator组件对已经绑定了请求消息数据的参数对象进行数据合法性校验;

5.校验完成后会生成数据绑定结果BindingResult对象,Spring MVC会将BindingResult对象中的内容赋给处理方法的相应参数。

33、请简述使用包装POJO类型数据绑定时,前端请求的参数名编写必须符合的两种情况。

8分
我的答案:
1.参数是包装类基本属性,则直接用属性名

2.参数是包装类中POJO类的子属性,则必须用【对象.属性】

34、请简述什么是Spring MVC的数据绑定。8分
我的答案:在执行程序时,Spring MVC会根据客户端请求参数的不同,将请求消息中的信息以一定的方式转换并绑定到控制器类的方法参数中。这种将请求消息数据与后台方法参数建立连接的过程就是Spring MVC中的数据绑定。

35、为什么需要自定义数据绑定?8分
我的答案:遇到有特殊数据类型无法直接进行数据绑定,必须先经过数据转换,例如日期数据时,需要自定义转换器(Converter)或格式化(Formatter)来进行数据绑定开发者自定义。

第十四章(JSON数据交互和RESTful支持)

填空题
1、在使用注解式开发时,需要用到2个重要的JSON格式转换注解,分别为@RequestBody和(@ResponseBody)。2分

2、RESTful风格在HTTP请求中,不能够出现(get)。2分

3、RESTful可以将他理解为一种软件架构风格或设计风格,而不是一个(标准)。2分

4、在jsp中获取当前项目路径可以通过EL表达式(${pageContext.request.contextPath})获取。2分

5、Spring MVC在数据绑定的过程中,需要对传递数据的格式和类型进行转换,它既可以转换String类型的数据,也能够转换(JSON等其他类型)的数据。2分

6、如果使用JSON存储单个数据(如“abc”),一定要使用
(数组)的形式。2分

7、使用JSON可以传输一个简单的数据,也可以传输一个数组或者一个复杂的(Object)对象。2分

8、使用@RequestMapping注解限定GET请求方法时,需要指定method=
(RequestMethod.GET)。2分

9、注解@ResponseBody用于直接返回return对象。该注解用在(方法)上。2分

10、方法中的@PathVariable注解则用于接收并绑定请求参数,它可以将请求(URL)中的变量映射到方法的形参上。2分

11、JSON对象的数组结构以“[”开始,以“]”结束,中间部分由0个或多个以英文“(,)”分隔的值的列表组成。2分

12、JSON有两种数据结构,分别为(对象结构)和数组结构。2分

13、RESTful风格就是把(请求参数)变成请求路径的一种风格。2分

14、在实际开发中,使用(json数据)格式的数据进行前后台的数据交互。

15、在目前国内开发,多使用(post)和get方式来进行增删改查操作。2分

16、JSON是一种(轻量)级的数据交换格式。2分

17、注解@RequestBody用于将请求体中的数据绑定到方法的形参中。该注解用在方法的(形参)上。2分

18、<mvc:resources …/>中有两个重要属性location和(mapping)。2分

19、RESTful风格在HTTP请求中,使用(put)、delete、post和get方式分别对应添加、删除、修改和查询的操作。2分

20、使用< bean>标签配置方式配置JSON转换器时,需要同时配置处理器映射器和处理器适配器,并且JSON转换器是配置在(适配器)中。2分

简答题

21、请简述配置< mvc:default-servlet-handler />后的执行方式。10分
我的答案:配置< mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.spring.web.servlet.resource.DefaultServletHttpRequestHandler(即默认的Servlet请求处理器)。它会像一个检查员,对进入DispatcherServlet的URL进行筛查。如果发现是静态资源的请求,就将该请求转由Web服务器默认的Servlet处理,默认的Servlet就会对这些静态资源放行;如果不是静态资源的请求,才由DispatcherServlet继续处理。

22、什么是RESTful?10分
我的答案:简单来说,RESTful风格就是把请求参数变成请求路径的一种风格。

23、请简述@PathVariable注解的作用。10分
我的答案:将URL中占位符参数绑定到控制器处理方法的入参中,

24、请简述在Spring中配置静态资源访问的几种方式并做说明。10分
我的答案:
1.使用< mvc:resources>元素可以实现对静态资源的访问

2.在springmvc-config.xml文件中,使用< mvc:default-servlet-handler>标签

3.激活Tomcat默认的Servlet来处理静态文件访问

25、请简述Spring中HttpMessageConverter接口的主要作用。10分
我的答案:
Spring提供了一个HttpMessageConverter接口来实现浏览器与控制器类(Controller)之间的数据交互。该接口主要用于将请求信息中的数据转换为一个类型为T的对象,并将类型为T的对象绑定到请求方法的参数中,或者将对象转换为响应信息传递给浏览器显示。

26、请简述Spring提供的HttpMessageConverter接口作用。10分
我的答案:
Spring提供了一个HttpMessageConverter接口来实现浏览器与控制器类(Controller)之间的数据交互。该接口主要用于将请求信息中的数据转换为一个类型为T的对象,并将类型为T的对象绑定到请求方法的参数中,或者将对象转换为响应信息传递给浏览器显示。

第十五章(拦截器)

填空题
1、当已登录的用户在系统主页中单击“退出”链接时,系统会回到(登录)页面。2分

2、当用户登录后,可以使用Session的(setAttribute())方法将用户信息保存到Session中。2分

3、拦截器可以通过实现(HandlerInterceptor)接口来定义。2分

4、< mvc:interceptors>元素的子元素< bean>中定义的是(全局拦截器)。

5、自定义拦截器中的preHandler()方法,其返回值为(true)时,表示继续向下执行。2分

6、在Spring MVC中配置拦截器时,可以使用< mvc:mapping>元素的(path)属性配置作用路径。2分

7、如果拦截器类中的preHandle()方法的返回值为(true),则程序会继续向下执行处理器中的方法。2分

8、当用户退出登录后,可以使用Session的(invalidate())方法清楚Session。2分

9、当有多个拦截器同时工作时,它们的(preHandler())方法会按照配置文件中拦截器的配置顺序执行。2分

10、在通过拦截器实现用户登录权限验证时,可以在拦截器的
(preHandler())方法中进行拦截处理。2分

11、当用户登录后,可以将用户信息保存到(Session)中,并重定向到主页。2分

12、Spring MVC单个拦截器执行顺序中,在(DispatcherServlet)处理完请求后,才会执行afterCompletion()方法。2分

13、在DispatcherServlet处理完请求后,才会执行拦截器的(afterCompletion())方法。2分

14、Spring MVC中的拦截器(Interceptor)类似于Servlet中的
(过滤器(Filter)),它主要用于拦截用户请求并作相应的处理。2分

15、Spring MVC拦截器的postHandle()方法会在控制器方法调用之后,且
(解析视图)之前执行。2分

16、要使Spring MVC的自定义拦截器类生效,还需要在(Spring MVC的配置文件)中进行配置。2分

17、< mvc:interceptor>元素中定义的拦截器,可以对(指定路径)路径下的请求生效。2分

18、< mvc:interceptors>元素用于配置(一组拦截器)。2分

19、接口HandlerInterceptor中有(三)个抽象方法。2分

20、程序进入拦截器后首先会执行拦截器类中的(preHandler())方法。2分

简答题

21、请简述如何在配置文件中配置拦截器信息。10分
我的答案:在上述代码中,< mvc:interceptors>元素用于配置-组拦截器,其子元素< bean>中定义的是全局拦截器,它会拦截所有的请求;而< mvc:interceptor>元素 中定义的是指定路径的拦截器,它会对指定路径下的请求生效。< mvc:interceptor> 元素的子元素< mvc:mapping>用于配置拦截器作用的路径,该路径在其属性path中定义。如上述代码中path的属性值“/**” 表示拦截所有路径,"/hello” 表示拦截所有以“/hello” 结尾的路径。如果在请求路径中包含不需要拦截的内容,还可以通过< mvc:exclude- -mapping>元素进行配置。
需要注意的是,< mvc:interceptor> 中的子元素必须按照上述代码的配置顺序进行编写,即<mvc:mapping … /> > <mvc:exclude-mapping … />> <bean … />的顺序,否则文件会报错。

22、请简述拦截器HandlerInterceptor接口中的方法并做说明。10分
我的答案:
1 、 preHandler() 方法:该方法会在控制器方法前执行,其返回值表示是否中断后续操作。当其返回值为 true 时,表示继续向下执行;当其返回值为 false 时,会中断后续的所有操作。

2 、 postHandle() 方法:该方法会在控制器方法调用之后,且解析视图之前执行。可以通过此方法对请求域中的模型和视图做出进一步的修改。

3 、 afterCompletion() 方法:该方法会在整个请求完成,即视图渲染结束之后执行。可以通过此方法实现一些资源清理、记录日志信息等工作。

23、请简述Spring MVC中如何自定义拦截器(Interceptor)。10分
我的答案:
通常拦截器类可以通过两种方式来定义。

一种是通过实现HandlerInterceptor接口,或继承HandlerInterceptor接口的实现类(如HandlerInterceptorAdapter)来定义;

另一种是通过实现WebRequestInterceptor接口,或继承WebRequestInterceptor接口的实现类来定义。

24、请简述实现用户登录权限验证案例的程序执行流程。10分
我的答案:在实现用户登录权限验证中,只有登录后的用户才能访问系统中的主页面,如果没有登录系统而直接访问主页面,则拦截器会将请求拦截,并转发到登录页面,同时在登录页面中给出提示信息。如果用户名或密码错误,也会在登录页面给出相应的提示信息。当已登录的用户在系统主页中单击“退出”链接时,系统同样会回到登录页面。

25、请简述< mvc:exclude-mapping>元素的作用。10分
我的答案:在配置自定义拦截器时,如果在请求路径中包含不需要拦截的内容,还可以通过< mvc:exclude-mapping>元素进行配置。

26、请简述多个拦截器的执行流程。10分
我的答案:当有多个拦截器同时工作时,它们的preHandle()方法会按照配置文件中拦截器的配置顺序执行,而它们的postHandle()方法和afterCompletion()方法则会按照配置顺序的反序执行。

第十六章(文件上传和下载)

填空题
1、使用URLEncoder.encode()方法会出现(UnsupportedEncodingException)异常。2分

2、配置CommonsMultipartResolver时必须指定该Bean的id为(multipartResolver)。2分

3、文件下载就是将(文件服务器)中的文件下载到本机上。2分

4、在jsp页面使用encoder()方法进行转码时,需要使用(page)标签引入URLEncoder类。2分

5、在Spring MVC中进行文件下载中,后台响应头中要设置下载时的打开方式以及(下载方式)。2分

6、可以使用String类型字符串的(indexOf())方法判断是否包括另一个字符串。2分

7、使用Servlet API中提供的URLEncoder类中的(encode())方法将中文转为UTF-8编码2分

8、由于各个浏览器(内部转码机制)的不同,就会出现不同的乱码以及解析异常问题。2分

9、由于不同版本的IE浏览器,请求代理(User-Agent)中的关键字也略有不同。2分

10、实现文件下载时,下载页面链接的(href)属性要指定后台文件下载的方法以及文件名。2分

11、Spirng MVC的文件上传需要依赖(Commons FileUpload)的组件。2分

12、Spring MVC提供了一个(ResponseEntity)类型的对象,使用它可以很方便的定义返回的HttpHeaders对象和HttpStatus对象2分

13、HttpStatus类型代表的是Http协议中的状态,示例中的HttpStatus.OK表示(200),即服务器已成功处理了请求。2分

14、文件下载中,MediaType.APPLICATION_OCTET_STREAM的值为application/octet-stream,即表示以(二进制流)的形式下载数据。2分

15、在jsp页面设置下载中文名为utf-8编码后,后台火狐浏览器解码要使用
(IOS-8895-1)格式。2分

16、实现文件上传功能时,form表单的enctype属性要设置为
(multipart/form-data)。2分

17、在Spring MVC中,实际上是使用MultipartResolver接口的实现类
(CommonsMultipartResolver)来完成文件上传工作的。2分

18、多数文件上传都是通过(表单形式)提交给后台服务器的。2分

19、要实现文件上传,需要提供< input type="(file)" name=“filename” />的文件上传输入框。2分

20、当客户端form表单的enctype属性为multipart/form-data时,浏览器就会采用(二进制流)的方式来处理表单数据。2分

21、(multiple)属性是HTML5中的新属性,如果使用了该属性,则可以同时选择多个文件进行上传,即可实现多文件上传。2分

22、使用MultipartFile接口的(transferTo())方法可以完成文件上传到指定位置。2分

23、进行文件下载时,需要使用HttpHeaders的(setContentType())方法定义以流的形式下载返回文件数据。2分

24、后台获取获取上传文件的原始名称可以使用MultipartFile的(getOriginalFilename)方法。2分

25、Spring MVC提供了(MultipartResolver)对象来实现文件上传的。2分

26、如果将项目的发布路径已更改到Tomcat中,则需要去Tomcat的
(webapps)目录中寻找项目。2分

27、在Spring MVC中,后台可以通过(MultipartFile)接口类型的参数来封装上传的文件。2分

28、进行文件下载时,需要使用HttpHeaders的
(setContentDispositionFormData)方法通知浏览器以下载的方式打开文件。2分

29、URLEncoder类中的encoder(String s, String enc)方法,第一个参数表示需要转码的字符串,第二个参数表示(编码格式)。2分

30、如果保存文件的地址不存在,就可以使用File的(mkdirs())方法先创建目录。2分

简答题
31、请写出Spring MVC中配置文件中定义MultipartResolver接口的Bean的基本示例代码。8分
我的答案:< bean id=“multipartResolver” class= “org.springframework.web.multipart.commons.CommonsMultipartResolver”> < !-- 设置请求编码格式,必须与JSP中的pageEncoding属性一致,默认为ISO-8859-1 --> < property name=“defaultEncoding” value=“UTF-8” /> <! – 设置允许上传文件的最大值(2M),单位为字节 --> < property name=“maxUploadSize” value=“2097152” /> … </ bean>

32、请简述文件下载时中文乱码的解决思路。8分
我的答案:为了解决浏览器中文件下载时中文名称的乱码问题,可以在前端页面发送请求前先对中文名进行统一编码,然后在后台控制器类中对文件名称进行相应的转码。

33、请写出文件上传表单的基本示例代码。8分
我的答案:< form action=“uploadUrl” method=“post” enctype=“multipart/form-data”> < input type=“file” name=“filename” multiple=“multiple” /> < input type=“submit” value=“文件上传” /> </ form>

34、请写出将一个utf-8编码的filename参数更改为ISO-8859-1格式的方式。8分
我的答案:String filename=new String(filename.getBytes(“UTF-8”), “ISO-8859-1”);

35、请简述文件上传时表单需要满足的3个条件。8分
我的答案:
1.form表单的method属性设置为post;

2.form表单的enctype属性设置为multipart/form-data;

3.提供< input type=“file” name=“filename” />的文件上传输入框

  • 17
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值