都SpringMVC了为什么还要学Servlet? 今天面试一个工程师,tomcat、springmvc都懂,基础还不错,最后问了这个故障:SpringMVC、Tomcat是怎样完成一次Http请求的?能回答说tomcat把请求分配给springmvc,具体业务逻辑由springmvc执行,听着有些含糊。其实这个故障只是把各自独立的内容整合在一起问而已,就把面试者难住了。要回答这个故障并不难。 首先,我们来看看Tomcat、SpringMVC各自的定位和职责。 Tomcat和SpringMVC的职责
正是因为上面的定义,程序员经常把Tomcat是一个Servlet容器,其实Tomcat实现的功能比这个要更多一些。 由上面两个的职责描述,可以看出SpringMVC和Tomcat的结合点是Servlet。其实SpringMVC的DispatchServlet实现了HttpServlet,那么SpringMVC在Tomcat看来,其实就是一个Servlet。 Tomcat和Servlet的工作原理Tomcat作为Servlet容器,当然也可以当作web服务器直接运用,负责把接收和返回http请求。 Tomcat 和 Servlet工作原理 下面,我们通过一个更细致的时序图来看一下具体工作过程: Tomcat和Servlet时序图 从上图我们看出一个Http的具体处理流程:
Tomcat下Servlet的配置文件:web.xmlweb.xml的作用是配置Http和Servlet之间的映射关系、filter、context参数等。这样通过这份约定的配置文件,Tomcat可以把Http请求映射到不同的Servlet实例上。所以,在Servlet时代的web.xml中,会有很多的 SpringMVC的改变我们上面说过,SpringMVC也是Servlet的实现,只不过SpringMVC增加了一个DispatchServlet,所有的http请求都是映射到这个Servlet上,请求进入到这个Servlet中之后,就算进入到了框架之中了,由这个Servlet来统一的分配http请求到各个Controller,接下来的事情大家就清楚了。 PS:最后给大家几个建议:
|