引言
刚考完期末,再也不用考试啦!!!
最近学习了慕课网的实战课《手写SpringMVC
,剑指开源框架灵魂》。
spring-boot
太过智能了,智能到我们完全不用去管底层是如何实现的,都可以很轻易地去开发一款 web
应用。
最近将本课程和《看透 Spring MVC
》结合起来学习,感觉受益匪浅,同时,纠正了我之前对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
配置文件。
执行流程
整体执行流程就如下图所示:
当来请求时,客户端和服务端的 Tomcat
建立连接,Tomcat
去找 web.xml
,然后根据其中定义的url
到Servlet
的映射,去初始化相应的 Servlet
,然后调用service
方法处理业务,返回。
最开始对 SpringMVC
的多线程不是很理解,现在终于明白了,多线程其实并不是 SpringMVC
管理的,而是当有一个新的客户端建立连接时,Tomcat
就会新建一个线程去调用 Servlet
的方法处理请求,所以多线程其实是 Tomcat
的多线程。
SpringMVC
SpringMVC
为了解决 Servlet
太多的问题,引入了DispatcherServlet
,进行统一调度。
SpringMVC
定义 DispatcherServlet
接管/
,即所有请求,内部再将请求分发给各个HandlerMapping
,通俗来说就是控制器中的方法。
总结
好读书,不求甚解。— 晋·陶渊明《五柳先生传》
做开发,不可不求甚解。