美文网首页
Spring MVC九大组件简介

Spring MVC九大组件简介

作者: 回文体文回 | 来源:发表于2018-07-15 13:29 被阅读0次

前言

DispatcherServlet初始化过程中,我们知道Spring MVC会初始化九大组件,下面我们就来看下这九个组件分别起什么作用,这里我们并不会分析它们内部具体的实现,只是做宏观的介绍。

HandlerMapping

我们可以看到HandlerMapping接口中只定义了一个方法,就是通过request找到HandlerExecutionChain,而HandlerExecutionChain包装了一个Handler和一组Interceptors。

public interface HandlerMapping {

    HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;

}

HandlerAdapter

之所以需要HandlerAdapter是因为Spring MVC没有对Handler做任何规定,它可以是类,可以是方法,也可以是任何其他东西,我们可以看到Handler的类型是Object,这样会非常灵活。但是怎么让任意类型的Handler处理固定格式的请求呢?没错,就是使用适配器,每种Handler都要有对应的HandlerAdapter才能处理请求。我们来看下HandlerAdapter接口的定义

public interface HandlerAdapter {

    /**
     * 判断是否支持传入的handler
     */
    boolean supports(Object handler);

    /**
     * 使用给定的handler处理请求
     */
    ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;

    /**
     * 返回上次修改时间,可以返回-1表示不支持
     */
    long getLastModified(HttpServletRequest request, Object handler);

}

HandlerExceptionResolver

在处理请求的过程中,难免会出现异常,HandlerExceptionResolver就是专门来处理异常的组件,它能根据异常设置ModelAndView,然后交给render进行渲染。我们来看下HandlerExceptionResolver的接口定义

public interface HandlerExceptionResolver {

    ModelAndView resolveException(
            HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex);

}

从上面的分析中我们可以知道HandlerExceptionResolver只能处理页面渲染之前的异常,页面渲染过程中的异常,它是不能处理的,这时可以让容器跳转到指定的错误页面来处理异常。

ViewResolver

ViewResolver用来将String类型的视图名和本地化信息Local解析成View类型的视图,其接口定义如下

public interface ViewResolver {

    View resolveViewName(String viewName, Locale locale) throws Exception;

}

RequestToViewNameTranslator

ViewResolver是根据viewName查找View,但有的Handler处理完后并没有设置View也没有设置viewName,这时就需要RequestToViewNameTranslator从request中找到默认的View了。我们来看下RequestToViewNameTranslator的接口定义

public interface RequestToViewNameTranslator {

    String getViewName(HttpServletRequest request) throws Exception;

}

LocalResolver

ThemeResolver

MultipartResolver

FlashMapManager

相关文章

网友评论

      本文标题:Spring MVC九大组件简介

      本文链接:https://www.haomeiwen.com/subject/rpeqlftx.html