Spring Boot开发实战(第8章 Spring Boot自定义Web MVC配置)

8.1 Web MVC配置简介

    Spring MVC提供了一个WebMvcConfigurationSupport类和一个注解@EnableWebMvc来减少Bean的声明
    WebMvcConfigurationSupport的常用配置方法:
     1)addCorsMappings():配置跨域路径映射
     2)addFormatters():配置格式化器
     3)addInterceptors():配置拦截器
     4)addViewControllers():配置视图控制器映射
    自定义一个继承自WebConfigurationSupport的配置类WebMvcConfig:
     1)使用@Configuration注解类WebMvcConfig
     2)重写addCorsMappings、addFormatters、addInterceptors、addViewControllers
    注:
     1)@Configuration在类上使用,启用Spring MVC配置
     2)@EnableWebMvc使用在入口类上,启用WebMvc配置

8.1.1 静态资源配置

    Spring Boot中默认的静态资源配置时把类路径下的/static、/public、/resources和/METAINF/resources文件夹的静态文件直接映射为/**。
    可通过覆盖写addResourceHandlers定制静态资源路径映射

8.1.2 拦截器配置

    通过覆盖addInterceptors()方法,使用InterceptorRegistry注册器来添加拦截器HandlerInterceptor

8.1.3 跨域配置

    通过重写addCorsMappings方法实现跨域配置的支持,使用CorsRegistry注册类添加路径映射

8.1.4 视图控制器配置

    通过重写addViewControllers方法,使用ViewControllerRegistry实现视图控制器配置

8.1.5 消息转换器配置

    新增自定义的HTTPMessageConverter:定义一个自己的HTTPMessageConverters的bean,然后在此Bean中注册自定义HTTPMessageConverter即可

8.1.6 数据格式化器配置

    通过覆盖重写addFormatters方法来添加数据格式化器

8.1.7 视图解析器配置

    通过覆盖重写ContentNegotiatingViewResolver类的configureViewResolves()方法来配置视图解析器

8.2 全局异常处理

    Spring MVC的controller层中,全局异常捕获处理的解决方案:
 1.使用@ControllerAdvice和@ExceptionHandler进行全局的Controller层异常处理
  1)定义统一异常处理类
   定义一个@ControllerAdvice标注的WikiExceptionHandler类,在用@ExceptionHandler标注defaultErrorHandler()方法。当捕获到对应异常时,进入defaultErrorHandler()方法。
  2)异常信息展示
   对应请求视图映射到一个继承WebMVCConfigurationSupport类的WebMvcConfig类的addViewControllers方法中
  3)测试异常条件
   在一个controller类中编写一个抛出对应异常的测试逻辑
  4)测试运行
 2.实现org.springframework.web.servlet.HandlerExceptionResolver接口中的resolveException()方法
  1)HandlerExceptionResolver接口
   HandlerExceptionResolver接口中定义了一个resolveException方法,用于处理Controller中的异常
  2)异常处理实现
   定义一个使用@Component标注的类,该类实现HandlerExceptionResolver接口中法人resolveException()方法
  3)UndeclaredThrowableException
   该异常通常是在RPC接口调用场景或者使用JDK动态代理的场景时发生
  4)异常逻辑测试
  5)运行测试

8.3 定制Web容器

    Spring Boot支持嵌入式容器,默认启动嵌入式Tomcat容器
    Spring Boot中Web服务器的配置在application.properties中的属性以server.*开头。Spring Boot给所有属性都提供了默认配置

8.4 定制Spring Boot应用程序启动Banner

    程序启动最开始,有一个Spring空心字的这段Banner是在Spring Boot中默认配置的,配置类是SpringBootBanner。SpringBoot中使用SpringApplicationBannerPrinter这个类来实现支持TextBanner(banner.txt)、ImageBanner(banner.gif/banner.jpg/banner.png)两种展示

8.5 自定义注册Servlet、Filter和Listener

    Spring Boot中已经移除了web.xml文件,如果需要注册添加Servlet、Filter、Listener为Spring Bean,在Spring Boot中有两种方式:
     1)Servlet 3.0 API中的注解@WebServlet、@WebListener、@WebFilter用来配置
     2)Spring Boot JavaConfig注解配置Bean的方式进行配置

8.5.1 注册Servlet

    声明一个继承自HTTPServlet的HelloServlet类,并覆写doGet和doPost方法。(@WebServlet注解标注在继承了HTTPServlet类的HelloServlet之上,该注解的作用等价于在web.xml中配置的改servlet的<servlet-mapping>元素中<url-pattern>的配置)
     1)@WebFilter注册配置Filter类
     2)@WebServlet注册配置Servlet类
     3)@WebListener注册配置Listener类

8.5.2 注册Filter

    Filter主要用于对用户请求进行预处理(HTTPServletRequest到的Servlet之前,Filter拦截用户的HTTPServletRequest。根据需要检查HTTPServletRequest,也可修改HTTPServletRequest请求头和数据),也可以对HTTPServletResponse进行后处理(HTTPServletResponse到达客户端之前,Filter拦截HTTPServletResponse。根据需要坚持HTTPServletResponse,也可修改HTTPServletResponse响应头和数据),是典型的职责链模式。其与Servlet的区别在于,他不能直接向用户生成响应
    处理请求和响应的分解线是chain.doFilter()。执行该方法之前,可对用户请求进行预处理;执行该方法之后,可对响应进行后处理。
    Filter接口中的方法总结:
     1)init():类似于Servlet生命周期中的init()方法,用于初始化一些关于Filter接口的参数,只在Servlet启动时调用一次
     2)doFilter():类似于Servlet生命周期中的service()方法,该方法用于存放过滤器的业务逻辑实现代码
     3)destory():类似于Servlet生命周期中的destory()方法,当Servlet容器销毁前调用该方法
    开发中使用Filter的场景:
     1)禁用浏览器的缓存
     2)解决中文乱码问题
     3)检查用户是否登录来管理用户权限
     3)检查用户请求,根据请求过滤用户非法请求
     4)详细记录某些特殊的用户请求
     5)对非标准编码的请求解码

8.5.3 注册Listener

    Servlet的监听器Listener是实现了javax.servlet.ServletContextListener接口的服务器端程序,只初始化一次,随Web应用的停止而销毁。在Filter init()执行之前执行,在Filter destory()执行之后执行。主要作用是:做一些初始化的内容添加工作,设置一些基本的内容。
    Listener主要分为三类:
     1)与ServletContext有关的Listener接口
     2)与HTTPSession有关的Listener接口
     3)与ServletRequest有关的Listener接口

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值