美文网首页
Spring MVC 整体介绍

Spring MVC 整体介绍

作者: 邹志全 | 来源:发表于2019-10-03 19:25 被阅读0次

    大学时写的的文章,当时文章水平略差,大家见谅。

    Spring MVC 是以servlet 为核心进行实现的,统一入口进入拿到请求后,做一次路由,找到对应的controller及对应的RequestMapping,完成逻辑的后,返回对应的视图或者数据元,如果是顺道完成视图的解析,返回对应html,完成响应。

    开发步骤:

    1、建立Spring 工程,引入对应Spring MVC 所需要的Jar。

    2、创建web.xml 文件,指定dispacherServlet,然后指定拦截的请求规则,比如说 *.do,再配置对应的listener,还有spring 依赖的bean的配置文件

    3、创建springMVC-servlet.xml 类似于这样的一个配置文件,设置启用注解,设置对应扫描的包,然后指定页面存在的位置,指定前缀后缀什么

    4、在对应目录下创建一个controller 类,并指定对应注解,创建对应RequestMapping 注解的函数,设置URI。

    5、编写对应逻辑。

    6、部署&运行

    内部处理流程:

    1、dispacher Servlet 拦截到外部所有的请求

    2、根据HandlerMapping找到对应的Handler,并将一堆拦截器和Handler封装至HandlerExecutionChain

    3、带着Handler 找到对应的HandlerAdapter,完成对应的逻辑处理。

    4、带着具体的Model&View返回

    5、首先通过ViewResolver对于视图进行解析,并完成 对应的视图渲染,反馈给Dispacher Servlet。

    6、最后dispacher Servlet 完成响应

    image.png

    这就是Spring MVC 中的一个简要流程。

    这里的Handler 是需要我们手动实现逻辑的,也就具体的controller、然后ModleAndView 也是我们开发中所接触的ModelAndView,具体的渲染和解析的过程其实就是将对应视图变为前端可识别HTML 文档的形式,过程中将对应的对象信息解析进去就OK了。

    具体的看后续操作~

    这里介绍的主要是核心的分发器dispacherServlet,在说之前先来看一看常规的servlet。

    public interface Servlet {

    void init(ServletConfig var1) throws ServletException;
    
    ServletConfig getServletConfig();
    
    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
    
    String getServletInfo();
    
    void destroy();
    

    }

    sevlet 是Java 在Java web开发中定义的一个规范,任何一个可以处理外部用户请求的应用组件都需要实现这个接口(即作为一种servlet 存在)。

    public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {

    这是GenericServlet,一种servlet的通用实现,提供了servlet应该有的基础功能。

    我们常用的是HTTP servlet,一种基于HTTP协议对于GenericServlet实现的Servlet,能够对于外部HTTP请求进行对应的处理并且完成对应的响应。并且针对各种HTTP 请求原语实现了对应的处理方法(具体来说是要求使用者自己必须实现)

    DispacherServlet 就是一种HTTP servlet ,它实现了对于所有符合规则的的HTTP请求进行拦截,并对具有handler的请求完成具体的逻辑。

    Spring MVC 中 DispacherServlet的核心初始化函数是这一个:

    protected void initStrategies(ApplicationContext context) {

    this.initMultipartResolver(context);//初始化多部请求解析器,没有默认的实现
    
    this.initLocaleResolver(context);//初始化地域解析器,默认实现是AcceptHeaderLocaleResolver  
    
    this.initThemeResolver(context); //初始化主题解析器,默认实现是FixedThemeResolver  
    
    this.initHandlerMappings(context);//初始化处理器映射,这是个集合, 默认实现是BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping   
    
    this.initHandlerAdapters(context);//初始化处理器适配器,这是个集合,默认实现是HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter  
    
    //初始化处理器异常解析器,这是个集合,默认实现是AnnotationMethodHandlerExceptionResolver,ResponseStatusExceptionResolver和DefaultHandlerExceptionResolver
    
    this.initHandlerExceptionResolvers(context);
    
    this.initRequestToViewNameTranslator(context);//初始化请求到视图名解析器,默认实现是DefaultRequestToViewNameTranslator
    
    this.initViewResolvers(context);//初始化视图解析器,这是个集合,默认实现是InternalResourceViewResolver    
    
    this.initFlashMapManager(context);
    

    }

    通过ApplicationContext完成对应初始化,对应的调用关系可以搜一下对应DispacherServlet 然后找到对应函数 alt + F7 查看就OK了

    初始化关系大体过程是这样的,到这里大体能清除整个的层级关系就好:

    1、首先初始化GenericServlet

    2、HttpServletBean的初始化

    3、FrameworkServlet 初始化

    4、完成最终DispacherServlet 初始化

    Spring MVC 最核心的差不多就这么多东西,更细节的东西需要亲自动手去翻看源码~

    相关文章

      网友评论

          本文标题:Spring MVC 整体介绍

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