Java面试题--SSM框架面试知识点

 

 

SSM框架面试知识点

 

目录

第01章 初识mybatis

第02章 SQL映射文件

第03章 动态SQL

第04章 Spring核心概念

第05章 IoC和AOP使用扩展

第06章 MyBatis与Spring的整合

第07章 Spring配置补充

第08章 Spring MVC-1

 第09章 Spring MVC-2

 第10章 Spring MVC扩展和SSM框架整合


 

 

01 初识mybatis

问题1:什么是框架?

解答:

  1. 是一个应用程序的半成品
  2. 提供可重用的公共结构
  3. 按一定规则组织的一组组件

问题2:使用框架有什么好处?

解答:

  1. 不用再考虑公共问题
  2. 专心在业务实现上
  3. 结构统一,易于学习、维护
  4. 新手也可写出好程序

 

问题3:mybatis有哪些特点?

解答:

  1. 半自动化的ORM实现
  2. DAO层
  3. 动态SQL
  4. 小巧灵活、简单易学
  5. 基于SQL语法,简单易学
  6. 能了解底层封装过程
  7. SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
  8. 方便程序代码调试

问题4:什么是持久化?

解答:持久化是程序数据在瞬时状态和持久状态间转换的过程,最终会存储在具体的物理介质当中。

问题5:什么是ORM? 

解答:

ORM(Object Relational Mapping)

  1. 编写程序的时候,以面向对象的方式处理数据
  2. 保存数据的时候,却以关系型数据库的方式存储

问题6ORM解决方案包含哪些部分?

解答:

  1. 在持久化对象上执行基本的增、删、改、查操作
  2. 对持久化对象提供一种查询语言或者API
  3. 对象关系映射工具
  4. 提供与事务对象交互、执行检查、延迟加载以及其他优化功能

 

问题7MyBatis开发环境步骤

解答:

  1. 下载mybatis-3.2.2.jar包并导入工程
  2. 编写MyBatis核心配置文件(configuration.xml)
  3. 创建实体类-POJO
  4. DAO层-SQL映射文件(mapper.xml)
  5. 创建测试类
    1. 读取核心配置文件mybatis-config.xml
    2. 创建SqlSessionFactory对象,读取配置文件
    3. 创建SqlSession对象
    4. 调用mapper文件进行数据操作

问题8mybatis的优缺点。

解答:

优点

  1. 与JDBC相比,减少了50%以上的代码量
  2. 最简单的持久化框架,小巧并简单易学
  3. SQL代码从程序代码中彻底分离,可重用
  4. 提供XML标签,支持编写动态SQL
  5. 提供映射标签,支持对象与数据库的ORM字段映射

缺点

  1. SQL语句编写工作量大,对开发人员有一定要求
  2. 数据库移植性差

 

问题9mybatis的核心类以及核心配置文件有哪些? 

解答:

MyBatis的核心

  1. SqlSessionFactoryBuilder
  2. SqlSessionFactory
  3. SqlSession

核心配置文件

    1. mybatis-config.xml  系统核心配置文件
    2. mapper.xml  SQL映射文件

 

问题10SqlSessionFactoryBuilder的特点。

解答:

  1. 用过即丢,其生命周期只存在于方法体内
  2. 可重用其来创建多个 SqlSessionFactory 实例
  3. 负责构建SqlSessionFactory,并提供多个build方法的重载

 

问题11如何创建一个会话工厂? 

解答:

String resource = "mybatis-config.xml";

InputStream is = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

 

问题12SqlSession的获取方式.。 

解答:

SqlSession的两种使用方式

    1. 通过SqlSession实例直接运行映射的SQL语句
    2. 基于Mapper接口方式操作数据

 

问题13mybatis-config.xml 系统核心配置文件的重要元素。

解答:

configuration 配置

properties    可以配置在Java 属性配置文件中

settings    修改 MyBatis 在运行时的行为方式

typeAliases   为 Java 类型命名一个别名(简称)

typeHandlers   类型处理器

objectFactory   对象工厂

plugins   插件

environments   环境

environment   环境变量

transactionManager  事务管理器

dataSource   数据源

mappers    映射器

注意先后顺序。

问题14配置properties元素有几种方式? 

解答:

配置properties元素的两种方式:

  1. 通过外部指定的方式(database.properties),实现动态配置
  2. 直接配置为xml,实现动态配置

 

问题15:typeAliases元素的作用?

解答:

使用别名,不需要书写全类名,可以一定程度简化工作量。

 

 

问题16environments元素简单说明。 

解答:

environments元素

    1. 表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
    2. 子元素节点:environment,但是必须指定其中一个为默认运行环境(通过default指定)

问题17transactionManager类型

解答:

Jdbc ,  managed

问题18dataSource配置

解答:





  







Type可以选 pooled,unpooled,JNDI。

问题19如何将mapper映射文件加入到系统核心配置文件中

解答:

方式一:使用类资源路径获取资源





方式二:使用URL获取资源







 

 

 

 

02 SQL映射文件

问题1:SQL映射文件的几个顶级元素

解答:

mapper - namespace
cache - 配置给定命名空间的缓存
cache-ref – 从其他命名空间引用缓存配置
resultMap –用来描述数据库结果集和对象的对应关系
sql – 可以重用的SQL块,也可以被其他语句引用
insert – 映射插入语句
update – 映射更新语句
delete – 映射删除语句
select – 映射查询语句

 

 

问题2:namespace作用。 

解答:namespace和子元素的id联合保证唯一,区别不同的mapper。

 

问题3:mapper中select之类的子元素id有什么要求,作用是什么?

解答:接口中的方法与映射文件中SQL语句id一一对应,作用是mybatis动态代理能够准确执行对应的方法。

 

问题4:select元素属性说明。 

解答:

id
命名空间中唯一的标识符
接口中的方法与映射文件中的SQL语句id一一对应
parameterType
传入SQL语句的参数类型
resultType
SQL语句返回值类型的完整类名或别名

 

问题5:parameterType说明

解答:

基础数据类型
int、String、Date等
只能传入一个,通过#{参数名}即可获取传入的值
复杂数据类型
Java实体类、Map等
通过#{属性名}或者#{map的keyName}即可获取传入值

 

问题6:resultMap简单属性书写。 

解答:

通知mybatis如何将property与column映射即可。

比如:







 

问题7:resultType 与resultMap 。 

解答:

resultType :直接表示返回类型
基本数据类型
复杂数据类型

resultMap :对外部resultMap的引用
应用场景:
数据库字段信息与对象属性不一致
复杂的联合查询,自由控制映射结果
二者不能同时存在,本质上都是Map数据结构

 

 

 

问题8:resultMap如何自动映射?

解答:

字段名与属性名一致

resultMap的自动映射级别-autoMappingBehaviorPARTIAL(默认):自动匹配所有

 

问题9如何禁止自动匹配

解答:





 

问题10insert、update、delete举例

解答:



 insert into  smbms_user (userCode,userName,userPassword)

values ( #{userCode},#{userName},#{userPassword})







update smbms_user set userCode = #{userCode},

         userName = #{userName},

              userPassword = #{userPassword}  where id = #{id}





delete from smbms_user where id = #{id}

 

问题11resultMap说明。 

解答:

resultMap属性

id:
resultMap的唯一标识

type:
Java实体类
resultMap子元素

id
一般对应数据库中该行的主键id,设置此项可提高MyBatis性能

result
映射到JavaBean的某个“简单类型”属性

association
映射到JavaBean的某个“复杂类型”属性,比如JavaBean类

collection
映射到JavaBean的某个“复杂类型”属性,比如集合

问题12:association说明

解答:

复杂的类型关联,一对一

内部嵌套
映射一个嵌套JavaBean属性
属性
property:映射数据库列的实体对象的属性
javaType:完整Java类名或者别名
resultMap:引用外部resultMap

子元素
id
result
property:映射数据库列的实体对象的属性
column:数据库列名或者别名

问题13:collection元素说明

解答:

复杂类型集合,一对多
内部嵌套
映射一个嵌套结果集到一个列表
属性
property:映射数据库列的实体对象的属性
ofType:完整Java类名或者别名(集合所包括的类型)
resultMap:引用外部resultMap
子元素
id
result
property:映射数据库列的实体对象的属性
column:数据库列名或者别名

 

问题14:缓存如何配置

解答:

MyBatis缓存
一级缓存
二级缓存


二级缓存的配置
MyBatis的全局cache配置
在Mapper XML文件中设置缓存,默认情况下是没有开启缓存的
在Mapper XML文件配置支持cache后,如果需要对个别查询进行调整,可以单独设置cache

 

 

03 动态SQL

问题1:用于实现动态SQL的元素主要有哪些? 

解答:

if

trim

where

set

choose(when、otherwise)

foreach

 

问题2:trim元素说明

解答:

 

属性
prefix

suffix

prefixOverrides

suffixOverrides

更灵活地去除多余关键字
替代where和set

 

 

问题3:foreach使用说明

解答:

迭代一个集合,通常用于in条件
属性
item
index
collection:必须指定
list
array
map-key
open
separator
close

 

问题4:choose元素内部有哪些元素

解答:

  1. when
  2. otherwise

问题5:MyBatis分页功能如何实现?

解答:

分页-DAO层实现
limit(起始位置,页面容量)
查询用户列表的方法增加2个参数
from
pageSize

 

 

 

04 Spring核心概念

问题1:Spring是一个什么样的框架

解答:轻量级框架, Java EE的spring,当前主流框架。

问题2:spring主要包含的内容。 

解答:

  1. IoC容器
  2. AOP实现
  3. 数据访问支持
  • 简化JDBC/ORM 框架
  • 声明式事务
  1. Web集成

 

问题3:Spring设计理念。

解答:Spring是面向Bean的编程。

 

问题4:spring两大核心技术?

解答:

    1. 控制反转(IoC:Inversion of Control ) /依赖注入(DI:Dependency Injection )
    2. 面向切面编程(AOP:Aspect Oriented Programming)

 

问题5:Spring的优点。

解答:

  1. 低侵入式设计
  2. 独立于各种应用服务器
  3. 依赖注入特性将组件关系透明化,降低了耦合度
  4. 面向切面编程特性允许将通用任务进行集中式处理
  5. 与第三方框架的良好整合

问题6什么是控制反转 / 依赖注入

解答:

    1. 将组件对象的控制权从代码本身转移到外部容器
  • 组件化的思想:分离关注点,使用接口,不再关注实现
  • 依赖的注入:将组件的构建和使用分开

 

问题7编写一个简单的spring例子的步骤

解答:

  1. 添加Spring到项目中
  2. 编写配置文件
  3. 编写代码获取HelloSpring实例

 

问题8:使用Spring IoC的步骤是什么?

解答:

    1. 设值注入
    2. 使用元素定义一个组件
  • id属性:指定一个用来访问的唯一名称
  • name属性:指定多个别名,名字之间使用逗号、分号或空格进行分隔

问题9:AOP相关术语。

解答:

  1. 增强处理(Advice)
  • 前置增强
  • 后置增强
  • 环绕增强、异常抛出增强、最终增强等类型
  1. 切入点(Pointcut)
  2. 连接点(Join Point)
  3. 切面(Aspect)
  4. 目标对象(Target object)
  5. AOP代理(AOP proxy)
  6. 织入(Weaving)

 

问题10:怎样使用AOP。

解答:

  1. 在项目中添加Spring AOP的jar文件
  2. 编写前置增强和后置增强实现指定功能
  3. 编写Spring配置文件,对业务方法进行增强处理
  4. 编写代码获取带有增强处理的业务对象

 

问题11如何定义切入点。

解答:





 

问题12execution表达式说明

解答:

  1. 任意公共方法的执行:

execution(public * *(..))

  1. 任何一个以“set”开始的方法的执行:

execution(* set*(..))

AccountService 接口的任意方法的执行:

execution(* com.xyz.service.AccountService.*(..))

  1. 定义在service包里的任意方法的执行:

execution(* com.xyz.service.*.*(..))

  1. 定义在service包和所有子包里的任意类的任意方法的执行:

execution(* com.xyz.service..*.*(..))

  1. 定义在pointcutexp包和所有子包里的JoinPointObjP2类的任意方法的执行:

execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")

***> 最靠近(..)的为方法名,靠近.*(..))的为类名或者接口名,如上例的JoinPointObjP2.*(..))

问题13织入增强处理举例。

解答:



    

    

            

            

     

 

05 IoC和AOP使用扩展

问题1:spring注入方式有几种

解答:

  1. 构造注入
  2. setter注入

问题2:需要注意的点

解答:

1、一个元素表示构造方法的一个参数,且使用时不区分顺序。

2、通过元素的index 属性可以指定该参数的位置索引,位置从0 开始。

3、元素还提供了type 属性用来指定参数的类型,避免字符串和基本数据 类型的混淆。

 

问题3:p命名空间注入属性说明。 

解答:

  1. p 命名空间的特点:使用属性而不是子元素的形式配置Bean的属性,从而简化了配置代码
  2. 使用前要先要在Spring配置文件中引入p命名空间
  3. 使用p命名空间注入属性值分
    1. 普通属性直接书写即可
    2. 引用则使用*-ref来指向即可。

 

 

 

问题4:注入不同数据类型说明

解答:

  1. 注入直接量
  • 使用标签实现
  • 注意特殊字符的处理
  1. 引用bean
  • 使用标签实现
  • 注意bean属性和 local 属性的区别

 

  1. 使用内部bean


      

  1. 注入集合
  • 分别使用标签实现
  1. 注入null和空字符串
  • 使用注入null 值
  • 使用注入空字符串值

 

问题5:异常增强处理说明

解答:

  1. 异常抛出增强的特点
  • 在目标方法抛出异常时织入增强处理
  • 可拔插的异常处理方案
  1. 元素:定义异常抛出增强

问题6最终增强

解答:

    1. 最终增强的特点
  • 无论方法是否抛出异常,都会在目标方法最后织入增强处理,即:该增强都会得到执行
  • 类似于异常处理机制中finally块的作用,一般用于释放资源
  • 可以为各功能模块提供统一的,可拔插的处理方案
    1. 元素:定义最终增强

 

问题7环绕增强说明。 

解答:

  1. 环绕增强的特点
  • 目标方法前后都可织入增强处理
  • 功能最强大的增强处理
  • 可获取或修改目标方法的参数、返回值,可对它进行异常处理,甚至可以决定目标方法是否执行
  1. 元素:定义环绕增强

 

问题8如何使用注解实现IoC?

解答:

 

注解方式将Bean的定义信息和Bean实现类结合在一起,Spring提供的注解有

@Component:实现Bean组件的定义
@Repository :用于标注DAO类
@Service :用于标注业务类
@Controller :用于标注控制器类

问题9自动注入使用哪个注解

解答: @Autowired

问题10自动注入精确指定使用哪个注解

解答: @Qualifier指定Bean的名称。

 

问题11如何使用注解信息启动Spring容器?

解答:

   ,可以指明多个包名。

问题12如何使用Java标准注解完成装配?

解答:

使用@Resource注解实现组件装配,默认按名称匹配

 

问题13如何使用注解定义切面?

解答:@AspectJ

问题14如何启动对注解@Aspectj生效

解答:

问题15:使用aspectj使用前置后置等增强使用什么注解

解答:@Before @After @AfterThrowing  @Around @AfterReturning

 

06 MyBatis与Spring的整合

问题1:整合关键类

解答:

  1. SqlSessionFactoryBean

为整合应用提供SqlSession对象资源

  1. SqlSessionTemplate

负责管理MyBatis的SqlSession,调用SQL映射语句,实现对数据库的访问

  1. MapperFactoryBean

根据指定Mapper接口生成Bean实例

  1. MapperScannerConfigurer

根据指定包批量扫描Mapper接口并生成实例

 

问题2:整合步骤

解答:

  1. 配置数据源

配置SqlSessionFactoryBean

使用SqlSessionTemplate实现数据库的操作

编写业务逻辑代码并测试

  1. 使用MapperFactoryBean注入映射器
  2. 使用MapperScannerConfigurer自动扫描指定包下的Mapper接口并将它们直接注册为MapperFactoryBean
  3. 配合@Autowired注解或@Resource注解完成自动注入
  4. 配置声明式事务
    1. 导入tx和aop命名空间
    2. 定义事务管理器Bean,并为其注入数据源Bean
    3. 通过配置事务增强,绑定事务管理器并针对不同方法定义事务规则
    4. 配置切面,将事务增强与方法切入点组合

 

问题3:事务属性有哪些,各自说明。 

解答:

propagation:事务传播机制
REQUIRED(默认值)
REQUIRES_NEW 、MANDATORY、NESTED
SUPPORTS
NOT_SUPPORTED、NEVER
isolation:事务隔离等级
DEFAULT(默认值)
READ_COMMITTED
READ_UNCOMMITTED
REPEATABLE_READ
SERIALIZABLE
imeout:事务超时时间,允许事务运行的最长时间,以秒为单位。默认值为-1,表示不超时
read-only:事务是否为只读,默认值为false
rollback-for:设定能够触发回滚的异常类型
Spring默认只在抛出runtime exception时才标识事务回滚
可以通过全限定类名指定需要回滚事务的异常,多个类名用逗号隔开
no-rollback-for:设定不触发回滚的异常类型
Spring默认checked Exception不会触发事务回滚
可以通过全限定类名指定不需回滚事务的异常,多个类名用英文逗号隔开

 

问题4:如何使用注解实现事务处理?

解答:

  1. 在Spring配置文件中配置事务管理类,并添加对注解配置的事务的支持
  2. 使用@Transactional为方法添加事务支持

 

 

07 Spring配置补充

问题1:在Spring中引用属性文件。

解答:

  1. 数据库连接信息写在属性文件中
  2. 采用PropertyPlaceholderConfigurer可以引入属性文件,在Spring配置文件中采用诸如${url}的方式引用属性值

比如:







classpath:database.properties



 

问题2:如何使用JNDI数据源?

解答:

    1. 通过JNDI从服务器容器中获取DataSource资源
  • 在服务器环境中配置数据源
  • 在Spring配置文件引用JNDI资源

比如:



        

        

            java:comp/env/jdbc/smbms

        

 

问题3:Spring中Bean的作用域有哪些,各自特点是什么

解答:

单例(singleton) (默认)每一个Spring IoC容器都拥有唯一的一个实例对象

原型(prototype) 一个Bean定义,任意多个对象

请求(request) 一个HTTP请求会产生一个Bean对象,也就是说,每一个HTTP请求都有自己的Bean实例。只在基于web的Spring ApplicationContext中可用

会话(session) 限定一个Bean的作用域为HTTPsession的生命周期。同样,只有基于web的Spring ApplicationContext才能使用

全局会话(global session) 限定一个Bean的作用域为全局HTTPSession的生命周期。通常用于门户网站场景,同样,只有基于web的Spring ApplicationContext可用

应用(application) 限定一个Bean的作用域为ServletContext的生命周期。同样,只有基于web的Spring ApplicationContext可用

问题4:如何使用注解指定Bean的作用域?

解答:@Scope

问题5:Spring自动装配有哪几种,各自说明

解答:

 no 默认值。Spring 默认不进行自动装配,必须显式指定依赖对象

 byName 根据属性名自动装配。Spring 自动查找与属性名相同的id,如果找到,则自动注入,否则什么都不做

 byType 根据属性的类型自动装配。Spring 自动查找与属性类型相同的Bean,如果刚好找到唯一的那个,则自动注入;如果找到多个与属性类型相同的Bean,则抛出异常;如果没找到,就什么也不做

 constructor 和byType 类似,不过它针对构造方法。如果 Spring 找到一个Bean和构造方法的参数类型相匹配,则通过构造注入该依赖对象;如果找不到,将抛出异常

问题6:拆分配置文件—拆分策略?

解答:

  1. 为什么需要拆分配置文件
  • 项目规模变大,配置文件可读性、可维护性差
  • 团队开发时,多人修改同一配置文件,易发生冲突
  1. 拆分策略
  • 公用配置+每个系统模块一个单独配置文件(包含DAO、Service、Web控制器)
  • 公用配置+DAO Bean配置+业务逻辑Bean配置+Web控制器配置
  • 两种策略各有特色,适用于不同场合

问题7:拆分配置文件引入有几种方式

解答:

两种方法

  1. 利用ClassPathXmlApplicationContext 的重载方法可以配置多个配置文件,用逗号隔开或者使用通配符
  2. 使用方式

 

08 Spring MVC-1

问题1:什么是MVC设计模式?

解答:

    1. 视图(View)-对应组件:JSP或者HTML文件
    2. 控制器(Controller)-对应组件:Servlet
    3. 模型(Model) -对应组件:JavaBean

 

问题2:Spring MVC架构是怎样的

解答:

  1. Spring MVC
  • 结构最清晰的MVC Model2实现
  • Controller
  • ModelAndView

问题3:springmvc环境搭建步骤

解答:

  1. 下载jar文件并导入工程
  • spring-web-3.2.13.RELEASE.jar
  • spring-webmvc-3.2.13.RELEASE.jar
  1. 配置文件
  • 在web.xml中配置Servlet
  • 创建Spring MVC的配置文件
  1. 创建Controller-处理请求的控制器
  • BeanNameUrlHandlerMapping
  1. 创建View-JSP
  2. 部署运行

问题4:注解驱动控制器如何配置

解答:

 

 

 

问题5:Spring MVC请求处理流程?

解答:

1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;

2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI, 调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler 对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成 功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

4.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填 充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换 为指定的响应信息

数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error 中

5.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

6.  根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring 容器中的ViewResolver)返回给DispatcherServlet ;

7. ViewResolver 结合Model和View,来渲染视图

8. 将渲染结果返回给客户端。

 

问题6:Spring MVC体系结构?

解答:

  1. 核心组件
  2. HandlerMapping(处理器映射)
  • BeanNameUrlHandlerMapping(默认)
  • 将请求URL映射到同名的控制器Bean上
  • DefaultAnnotationHandlerMapping
  • 将请求映射到标注@RequestMapping注解的控制器和处理方法上
  • RequestMappingHandlerMapping
  1. HandlerAdapter(适配器)
  • AnnotationMethodHandlerAdapter
  • RequestMappingHandlerAdapter
  1. ViewResolver(视图解析器)
  • InternalResourceView

 

 

问题7:Spring MVC框架特点?

解答:

  1. 清晰地角色划分
  2. 灵活的配置功能
  3. 提供了大量的控制器接口和实现类
  4. 真正做到与View层的实现无关(JSP、Velocity、Xslt等)
  5. 国际化支持
  6. 面向接口编程
  7. Spring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间可以很方便的结合一起

 

 

问题8:参数传递使用哪个注解

解答:

@RequestParam

 

问题9:@RequestMapping如何使用

解答:

    1. 标注在类定义处
    2. 标注在方法定义处
    3. 映射规则
  • 通过请求URL进行映射
  • 通过请求参数进行映射
  • 若选择方法参数直接入参的话,方法入参名必须与请求中参数名保持一致
  • 通过请求方法进行映射
  • GET
  • POST

问题10:ModelAndView简单说明

解答:

  1. ModelAndView
    1. 包含视图信息和模型数据信息
    2. 常用方法
  • 添加模型数据
  • ModelAndView addObject(String attributeName, Object attributeValue);
  • ModelAndView addAllObjects(Map modelMap);
  • 设置视图
  • void setView(View view);
  • void setViewName(String viewName);

 

 

问题11:Model使用说明

解答:

  1. Model
    1. 数据结构:Map类型
    2. 常用方法:添加模型数据

 Model.addAttribute(String attributeName,Object attributeValue);

    1. 处理方法的入参为Model类型

问题12:视图解析器使用说明

解答:

  1. InternalResourceViewResolver
    1. prefix
    2. suffix

例子:







问题11:Model使用说明

解答:

 

问题12如何使用转发与重定向

解答:

  1. 指示符—“redirect:”
    1. 重定向
  2. 指示符—“forward:”
    1. 转发

问题13静态资源文件如何引用

解答:

  1. 标签
    1. mapping:将静态资源映射到指定的路径下
    2. location:本地静态资源文件所在的目录

问题14异常如何处理

解答:

  1. 异常处理
    1. HandlerExceptionResolver
      1. resolveException()
    2. 局部异常处理
      1. 仅能处理指定Controller中的异常
      2. @ExceptionHandler

 

 09 Spring MVC-2

问题1:Spring表单标签如何引入使用

解答:

  1. Spring表单标签
    1. Spring提供的轻量级标签库
    2. 可在JSP页面中渲染HTML元素的标签
  2. 用法
    1. 必须在JSP页面的开头处声明taglib指令

<%@ taglib prefix="fm"     

         uri="http://www.springframework.org/tags/form" %>

  1. 引入标签声明之后就可使用Spring表单标签

 

问题2Spring常用表单标签

解答:

 渲染表单元素

 输入框组件标签

 密码框组件标签

 隐藏框组件标签

 多行输入框组件标签

 单选框组件标签

 复选框组件标签

 下拉列表组件标签

 显示表单数据校验所对应的错误信息

标签

  1. modelAttribute
    1. 指定绑定的模型属性,默认为command
    2. 建议指定
  2. action
    1. 指定表单提交的目标URL
    2. 可不指定,则自动提交到获取表单页面的URL
  3. method
    1. GET
    2. POST

 

问题3数据校验简单说明

解答:

  1. 服务器端的数据校验
    1. 利用Spring自带的验证框架
    2. 利用JSR 303实现
  2. JSR 303
    1. Java为Bean数据合法性校验所提供的标准框架
    2. Spring MVC支持JSR 303标准的校验框架
    3. JSR 303通过在Bean属性上标注校验注解指定校验规则,并通过标准的验证接口对Bean进行验证
    4. http://jcp.org/en/jsr/detail?id=303

注意:

  1. Spring本身没有提供JSR 303的实现
    1. 实现者:Hibernate Validator
    2. http://hibernate.org/validator

问题4数据校验步骤

解答:

  1. 加入jar文件
    1. hibernate-validator-4.3.2.Final.jar
    2. jboss-logging-3.1.0.CR2.jar
    3. validation-api-1.0.0.GA.jar
  2. POJO
    1. 修改User.java
    2. 给需要验证的属性增加相应的校验注解
  1. Controller
    1. 使用注解所声明的限制规则来进行数据的校验
    2. 修改UserController.java
      1. 处理方法addSave()的入参
        1. 标注@Valid注解
        2. BindingResult参数

 

 

 

  1. View
    1. 将验证的错误信息显示在页面中,进行相应的信息提示
    2. 修改useradd.jsp
      1. 使用标签在JSP页面显示错误信息

 

 

问题5什么是REST风格?

解答:

REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。

 

问题6如何实现单文件

解答:

  1. 导入jar文件
    1. commons-io-2.4.jar
    2. commons-fileupload-1.2.2.jar
  2. 编写文件上传表单页
    1. method="POST"
    2. enctype="multipart/form-data"
      1. 指定表单内容类型,支持文件上传
      1. 用来上传文件的file组件
  3. 编写控制器-处理方法
    1. File.separator
    2. Windows、Linux自适应路径分隔符
  4. 低入侵性的代码实现
  5. 必须对上传文件进行重命名
    1. 原因
      1. 原文件名存在中文               乱码问题
      2. 原文件名与服务器上已有文件重名              覆盖问题
    2. 重新定义上传文件名(保证不重名)
      1. 当前系统时间+随机数+“_Personal.jpg”
  6. 文件上传成功后,须更新数据库字段(idPicPath),记录上传文件的存储路径

 

问题7如何实现多文件上传

解答:改为MultipartFile处理即可。

 10 Spring MVC扩展和SSM框架整合

问题1:JSON对象如何处理

解答:

  1. 添加jar
  2. Fastjson或者jacskon
  3. 添加@Responseboy注解
  4. 调用对应的API

问题2如何解决JSON数据传递的中文乱码问题

解答:

    1. 原因:
      1. 消息转换器(StringHttpMessageConverter)中固定了转换字符编码为“ISO-8859-1”
    2. 解决方案一:
@RequestMapping(value="/view",
        method=RequestMethod.GET,

                     produces={"application/json;charset=UTF-8"})
      1. 简单实用,并可做到灵活处理
    1. 解决方案二
      1. 装配消息转换器StringHttpMessageConverter,设置字符编码为UTF-8
        1. supportedMediaTypes属性
          1. 指定媒体类型:application/json
          2. 字符编码:UTF-8
      2. 一次配置,永久搞定

 

问题3数据转换处理日期如何完成

解答:

  1. 解决JSON数据传递的日期格式问题
    1. 日期格式:时间戳       “yyyy-MM-dd”
    2. 解决方案一:
      1. 注解方式:@JSONField(format= "yyyy-MM-dd")
    3. 解决方案二
      1. 配置FastJson的消息转换器-FastJsonHttpMessageConverter
      2. 设置features属性:指定输出时的日期转换器为WriteDateUseDateFormat

推荐使用方式二。

问题4如何配置多视图解析器?

解答:

  1. ContentNegotiatingViewResolver
    1. favorParameter
      1. 默认为true,表示支持参数匹配,可以根据请求参数的值确定MIME类型,默认的请求参数为format,如: /user/view?id=12&format=json
    2. mediaTypes
      1. 根据请求参数值和MIME类型的映射列表
    3. viewResolvers
      1. 网页视图解析器

 

问题5:自定义转换器如何实现

解答:

  1. Converter转换接口
    1. 作用:将一种类型转换成另一种类型的对象
    2. 方法:convert()

 

  1. 自定义转换器(StringToDateConverter.java)
    1. 实现convert()方法:完成字符串到java.util.Date类型指定格式的转换
  2. 装配自定义的ConversionService

问题6数据绑定如何使用

解答:

  1. 使用@InitBinder装配自定义编辑器
    1. 制定Controller,标注@InitBinder
    2. 注意:标注了@InitBinder注解的方法会在控制器初始化时调用

 

问题7SSM框架整合步骤。 

解答:

SSM框架搭建

新建Web Project,导入相关jar文件

配置web.xml

配置文件(/resources)

database.properties

log4j.properties

mybatis-config.xml

配置typeAliases

设置全局性懒加载

applicationContext-mybatis.xml

数据源相关配置

配置sql心跳包

在校验连接的同时,解决数据库重新连接的问题,从而确保连接池中连接是真实有效的连接

initialSize
maxActive
maxIdle 
minIdle
maxWait
removeAbandoned
removeAbandonedTimeout

事务管理
配置SqlSessionFactoryBean
配置MapperScannerConfigurer

springmvc-servlet.xml  

配置标签(包括消息转换器配置)

通过标签配置静态文件访问

配置支持文件上传- multipartResolver

配置多视图解析器-ContentNegotiatingViewResolver

配置拦截器-interceptors

基于HandlerMapping,对请求实施拦截,根据业务需求,基于不同的HandlerMapping定义多个拦截器

HandlerInterceptor接口
preHandle()

postHandle()

afterCompletion()

自定义拦截器的配置-SysInterceptor

 

 

 

 

 

 

   

 

你可能感兴趣的:(面试)