美文网首页
MVC框架设计实现及SpringMVC源码分析

MVC框架设计实现及SpringMVC源码分析

作者: 极速魔法 | 来源:发表于2022-03-20 20:49 被阅读0次

    SpringMVC基础

    Spring MVC本质是对 servlet的封装,简化了 Servlet的开发

    经典三层

    • 表现层:view,controller
    • 业务层: service
    • DAO层

    MVC

    • M: model(数据模型+业务模型)
    • V: view
    • C: controller

    Spring MVC 核心三大组件

    • 处理器映射器 HandlerMapping
    • 处理器适配器 HandlerAdapter
    • 视图解析器 ViewResovler

    url-pattern配置

    • 配置 / 拦截静态资源
      原因:tomcat中有 web.xml(父配置),默认实现 DefaultServlet。项目中也有 web.xml(子配置),继承关系。项目中的web.xml会覆盖 Tomact中的web.xml。请求到来会走项目的 web.xml中,因此被拦截。

    • 不拦截 .jsp
      原因:父web.xml中有 JspServlet, 项目中没有覆写这个配置,JSP的处理交给 Tomcat处理。

    • 静态资源放行
      <mvc:default-servlet-handler/>
      添加标签后,SpringMVC上下文中定义一个 /DefaultServeltHttpRequestHandler/对象,对进入 DispatcherServlet 的URL 进行过滤,
      放行静态资源,交给 Tomcat 默认的 DefaultServlet处理。
      其他资源,交个 SpringMVC处理

    监听器、过滤器和拦截器对⽐

    • Servlet:处理Request请求和Response响应

    • 过滤器(Filter):对Request请求起到过滤的作⽤,作⽤在Servlet之前,如果配置为/*可以对所 有的资源访问(servlet、js/css静态资源等)进⾏过滤处理

    • 监听器(Listener):实现了javax.servlet.ServletContextListener 接⼝的服务器端组件,它随 Web应⽤的启动⽽启动,只初始化⼀次,然后会⼀直运⾏监视,随Web应⽤的停⽌⽽销毁

    • 拦截器(Interceptor):框架⾃⼰的,不会拦截 jsp/html/css/image的访问等,只会拦截访问的控制器⽅(Handler)。
      拦截过程:
      request —> 过滤器 —> 拦截器(Handler执行前)—>Controller —> 拦截器(Handler执行完跳转页面前)—>
      视图渲染 —> 拦截器(跳转页面后拦截)—> response

    自定义拦截器

    1. 实现 /HandlerInterceptor/接口
    2. 注册
    <mvc:interceptors>
        <mvc: interceptor>
    <!-- 拦截所有 ** 代表当前目录及其子目录的所有URL -->
            <mvc:mapping path="/**" />
            <bean class="xx" />
        </mvc: interceptor>
    </mvc:interceptors>
    

    异常处理机制

    // 异常处理器 写在 Controller中只对当前Controller生效
    @ExceptionHandler(ArithmeticException.class)
    public void handleExecption(ArithmeticException exception,HttpServletResponse resp) {
            ...
    
    }
    
    // 捕获所有Controller对象Handler 方法抛出的异常
    @ControllerAdvice
    public Class GlobalExceptionResolver {
            // 处理具体的异常          @ExceptionHandler(ArithmeticException.class)
            public void handleExecption(ArithmeticException exception,HttpServletResponse resp) {
            ...
    
        }
    }
    

    自定义MVC框架

    步骤

    1. Tomcat 加载web.xml ,前端控制器 DispatchServlet 加载指定的配置文件 springmvc.xml
    2. 包扫描,扫描注解
      获取包磁盘路径, 扫描的是 .class结尾的文件
    Threa.currentThread().getContextClassLoader().getResource(".").getPath()+packageName.replaceAll("\\.","/");
    
    1. IOC容器Bean初始化和依赖注入维护
    2. 建立 URL 和method 之间的映射关系
    3. 等待请求,处理请求

    Spring MVC源码解析

    doDispatch方法核心步骤

    1. 调用 getHandler() 获取 请求的执行链 HandlerExecutionChain
    2. 调用getHandlerAdapter() 获取 步骤1 中 Handler适配器
    3. 适配器调用Handler执行 ha.handle,返回 ModelAndView对象
    4. 调用 processDispatchResult()方法完成 视图渲染 跳转

    SpringData

    SpringDataJpa

    spring基于 jpa规范的基础上封装的一套 JPA应用框架,简化数据库的访问和操作

    相关文章

      网友评论

          本文标题:MVC框架设计实现及SpringMVC源码分析

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