4

引言

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

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

clipboard.png

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

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

clipboard.png

误解

洪荒时代的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配置文件。

执行流程

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

clipboard.png

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

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

SpringMVC

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

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

clipboard.png

总结

好读书,不求甚解。 ---晋·陶渊明《五柳先生传》

做开发,不可不求甚解。


张喜硕
2.1k 声望423 粉丝

浅梦辄止,书墨未浓。