转载

我对 SpringMVC 的一些误解

引言

刚考完期末,再也不用考试啦!!!

最近学习了慕课网的实战课《手写 SpringMVC ,剑指开源框架灵魂》。

我对 SpringMVC 的一些误解

spring-boot 太过智能了,智能到我们完全不用去管底层是如何实现的,都可以很轻易地去开发一款 web 应用。

最近将本课程和《看透 Spring MVC 》结合起来学习,感觉受益匪浅,同时,纠正了我之前对 SpringMVC 的一些误解。

我对 SpringMVC 的一些误解

误解

洪荒时代的 Java Web

当年,开发 Java Web 都需要手动去实现 Servlet

public class TestServlet implements Servlet {
    @Override
    public void init(ServletConfig config) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

Servlet 中规定了五个方法。

init 初始化方法, service 业务逻辑方法, destroy 销毁方法。

web.xml 文件中配置路由到 Servlet 之间的映射,也就是说,我们没开发一个接口,都需要写一个 Servlet ,然后配一遍 xml

<!-- 基本配置 -->
<servlet>
    <servlet-name>test</servlet-name>
    <servlet-class>TestServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>test</servlet-name>
    <url-pattern>/test</url-pattern>
</servlet-mapping>

所以就导致了项目中会有很多的 Servlet ,以及极其冗长的 xml 配置文件。

执行流程

整体执行流程就如下图所示:

我对 SpringMVC 的一些误解

当来请求时,客户端和服务端的 Tomcat 建立连接, Tomcat 去找 web.xml ,然后根据其中定义的 urlServlet 的映射,去初始化相应的 Servlet ,然后调用 service 方法处理业务,返回。

最开始对 SpringMVC 的多线程不是很理解,现在终于明白了,多线程其实并不是 SpringMVC 管理的,而是当有一个新的客户端建立连接时, Tomcat 就会新建一个线程去调用 Servlet 的方法处理请求,所以多线程其实是 Tomcat 的多线程。

SpringMVC

SpringMVC 为了解决 Servlet 太多的问题,引入了 DispatcherServlet ,进行统一调度。

SpringMVC 定义 DispatcherServlet 接管 / ,即所有请求,内部再将请求分发给各个 HandlerMapping ,通俗来说就是控制器中的方法。

我对 SpringMVC 的一些误解

总结

做开发,不可不求甚解。

原文  https://segmentfault.com/a/1190000019677258
正文到此结束
Loading...