Tomcat和Spring和servlet和springMVC之间的关系

1、Servlet是么?

servlet就是一个Java接口,是JavaEE规范的一种,主要是为了扩展Java作为Web服务的功能。

由其他内部厂商如tomcat,JBoss内部实现web的功能。

如一个http请求到来:

容器将请求封装为servlet中的HttpServletRequest对象,调用init(),service()等方法输出response,由容器包装为httpresponse返回给客户端的过程。

2、Spring框架

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

3、关系

1、Servlet与JSP一起为Web应用开发带来了巨大的贡献,后来出现的众多Java Web应用开发框架都是基于这两种技术的,更确切的说,都是基于Servlet技术的。

2、Springmvc的核心是一个DispatcherServlet,并且DispatcherServlet继承自 FrameworkServlet继承自HttpServletBean 继承自HttpServlet(也就是你说的servelt) 本质上是一样的东西。其实就是基于tomcat等这些web容器对我们的CS请求能做更多的事情,如校验,拦截(AOP思想),后期渲染等等,好让我们专注于业务的开发。

servlet、filter和listener是javaweb得三大组成部分。

其中servlet通常是由web.xml统一管理。

而springmvc核心是disparcherservlet为入口。

spring可以管理servlet和springmvc中得javabean,这个意思就是说servlet和springmvc是相对独立的两个servlet,

当你想要在一个继承servlet的实现类中,控制url映射的时候,必须在web.xml配置对应关系,即使你把这个servlet交给spring去管理

他的映射入口依然是web.xml中你配置的那个路径,跟dispatcherservlet没有关系。这就导致了spring中有一个注入的servlet,并且还有一个独立的servlet(可以说是由web.xml管理的),最终如果你在servlet、filter注入属性的时候不成功。

servlet工作流程

img

Tomcat和Spring关系

​ Tomcat和Servlet作为Web服务器和Servlet容器的结合,可以接受网络http请求解析为Servlet规范的请求对象和响应对象。

​ 比如,HttpServletRequest对象是Tomcat提供的,Servlet是规范,Tomcat是实现规范的Servlet容器,SpringMVC是处理Servlet请求的应用,其中DispatcherServlet实现了Servlet接口Tomcat负责加载和调用DispatcherServlet。同时,DispatcherServlet有自己的容器(SpringMVC)容器,这个容器负责管理SpringMVC相关的bean,比如Controler和ViewResolver等。同时,Spring中还有其他的Bean比如Service和DAO等,这些由全局的Spring IOC容器管理,因此,Spring有两个IOC容器。

​ 如果只是使用spring(不包含springmvc),那么是tomcat容器解析xml文件,通过反射实例化对应的类,根据这些servlet规范实现类,触发对应的代码处理逻辑,这个时候tomcat负责http报文的解析和servlet调度的工作。

如果使用spring mvc,那么tomcat只是解析http报文,然后将其转发给dispatchsetvlet,然后由springmvc根据其配置,实例对应的类,执行对应的逻辑,然后返回结果给dispatchservlet,最后由它转发给tomcat,由tomcat负责构建http报文数据。

Spring MVC与Jsp/Servlet比较

1、传统的 Jsp/Servlet 技术体系弊端

Servlet: 是用java编写的服务端应用程序。

  • 作用:主要用于交互式的浏览和修改数据,生成web内容,这个过程为:客户端发送请求到服务器 -> 服务器将请求信息发送至Servlet–>Servlet生成相应内容并将其传给服务器-> 服务器将响应返回给客户端。
  • 在传统的 Jsp/Servlet 技术体系中,如果要开发接口,一个接口对应一个
    Servlet,每个请求都去在web.xml中配置一个servlet节点。会导致我们开发出许多 Servlet,使用 SpringMVC可以有效的简化这一步骤。

2、Spring Web MVC 特点

  • Spring Web MVC 是一种基于 Java 的实现了 Web MVC 设计模式的请求驱动类型的轻量级 Web 框架,即使用了 MVC 架构模式的思想,将 web 层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringWeb MVC 也是要简化我们日常 Web 开发的。

  • Spring Web MVC 也是服务到工作者模式的实现,但进行可优化。前端控制器是DispatcherServlet;应用控制器可以拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View
    Resolver)进行视图管理;页面控制器/动作/处理器为 Controller 接口(仅包含 ModelAndView handleRequest(request, response) 方法,也有人称作 Handler)的实现(也可以是任何的 POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。

3、Spring MVC工作流程

韩顺平 Java工程师课程-SpringMVC

  • 1、用户发送请求至前端控制器DispatcherServlet。

  • 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。

  • 3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

  • 4、 DispatcherServlet调用HandlerAdapter处理器适配器。

  • 5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

  • 6、Controller执行完成返回ModelAndView。

  • 7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

  • 8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

  • 9、ViewReslover解析后返回具体View。

  • 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

  • 11、DispatcherServlet响应用户。