主要包括SpringMVC的异常处理机制,拦截器的应用,自定义消息转换器和注册书写编辑器,Spring表单和国际化知识点。
异常处理机制
在开发中,不管是持久层、业务层还是控制器,运行时都有可能抛出异常,为保障程序正常运行,就需要进行大大小小的异常捕获,代码的可读性可想而知是多么糟糕。那么该如何处理呢?在 SpringMVC 中,能将所有类型的异常处理从各个处理过程中解放出来,既保证了相关处理过程的功能较单一, 也实现了异常信息的统一处理和维护。也就是不管是持久层、业务层还是控制器,只要出现异常都通过 throws Exception 向外抛出,最后由 SpringMVC 前端控制器交由异常处理器进行异常处理。 SpringMVC 异常处理器机制包括:
- 全局异常处理
需要在配置文件中配置使用 SpringMVC 提供的简单异常处理器 SimpleMappingExceptionResolver,处理器实现 HandlerExceptionResolver 接口,如果需要自定义全局异常处理器,也需要实现该接口。
- 局部异常处理
在需要进行处理的控制器中定义一个处理方法,通过注解 @ExceptionHandler 进行处理,如果将这个类向上抽象到 BaseController 中,让其它控制器进行继承也可实现类似全局的处理。
拦截器
SpringMVC 拦截器在进行权限验证,单点登录等场景下使用。
SpringMVC 拦截器的实现方式有两种:
- 第一种方式:自定义的拦截器类实现 HandlerInterceptor 接口,重写多个方法
- 第二种方式:继承了 HandlerInterceptor 接口 HandlerInterceptorAdapter 抽象类,重写一个方法 使用时需要在 springmvc.xml 配置文件中通过 mvc:interceptors 子节点进行相关配置。可以利用通配符简化拦截规则。
转化器与编辑器
SpringMVC 是一个功能强大,扩展性良好的框架,自带了许多消息转化器,但也提供了扩展接口。可以利用自定义转化器与向容器注册属性编辑器的方式扩展功能,比如日期类型的处理。自定义转化器的方式是实现 Converter 接口,在配置文件中进行配置,关联到 <mvc:annotation-driven />
中。向容器注册属性编辑器通过在一个类中定义一个方法,注入 WebDataBinder
对象,然后在方法添加注解 @InitBinder 实现,如果将这个方法所在的类向上抽象到 BaseController
中,让其它控制器进行继承也可实现类似全局的处理。
Spring 表单与国际化
Spring 表单标签共有 13 个,它的好处是在前后端不分离的项目中简化了模板的开发,可以在表单中直接使用对象的属性,而不需要 ${}
的方式,另外增强了普通表单所没有的功能,可以发送 Delete 和 PUT 请求。因为现在项目多采用前后端分离的方式,因此应用场景逐渐变小。此处仅需了解即可。
在 SpringMVC 中,实现国际化工作是一项简单但繁琐的工作,简单是因为只通过配置语言包即可实现,繁琐是多种语言的翻译过程。在 resources 目录添加格式为 "基名语言国家.properties" 的语言包文件,在 springmvc.xml
中配置 ReloadableResourceBundleMessageSource
即可,注意事项是配置时 id 必须命名为 messageSource
,在指定基名时需要通过指定类路径的形式 classpath:基名
实现。