热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringMVC的DispatcherServlet–Java开发人员应该知道的10件事

如果您使用过SpringMVC,那么您应该知道什么是DispatcherServlet?它实际上是SpringMVC的心脏,确切地说是MV

如果您使用过Spring MVC,那么您应该知道什么是DispatcherServlet? 它实际上是Spring MVC的心脏,确切地说是MVC设计模式或控制器的C语言。 应该由Spring MVC处理的每个Web请求都通过DispatcherServlet处理。 通常,它是Front Controller Pattern的实现,可在您的应用程序中提供单个入口点。 它处理所有传入的请求。 它也是Java与Spring和DispatcherServlet之间的桥梁,就像其他任何Servlet在web.xml中声明的那样,其URL模式足以将每个单个Web请求映射到DispathcherServlert。

它负责通过将请求委派给Spring MVC的其他组件(例如,实际的控制器类,即使用@Controller或@RestController (对于RESTful Web Services进行注释),Views,View Resolvers,处理程序映射器等注释的那些)来负责请求处理。

尽管实际请求映射的工作是通过@RequestMapping注释完成的,但实际上是DispatcherServlet将请求委托给相应的控制器。

对于RESTful Web服务,它还负责查找正确的消息转换器,以将响应转换为客户端期望的格式,例如JSON,XML或TEXT。 例如,如果客户端需要JSON,则它将使用MappingJacksonHttpMessageConverter或MappingJackson2HttpMessageConverter(取决于Classpath中的Jackson 1或Jackson 2是否可用)将转换返回的响应转换为JSON字符串。 请参阅Baeldung的REST with Spring,以了解有关使用Spring 3和Spring 4开发RESTful Web服务的更多信息。

如前所述,Dispatcher Servlet用于处理所有传入的请求,并将它们路由到不同的Spring Controller进行进一步处理。 为此,它确定哪些控制器应处理传入的请求。

DispatcherServlet使用HandlerMapping实现(预先构建或作为应用程序的一部分提供)将传入的请求路由到处理程序对象。 默认情况下,它使用
BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping,使用@RequestMapping注释驱动。

为了找到正确的方法来处理请求,它将扫描使用声明的所有类。
@Controller注释,它也使用
@RequestMapping批注可查找负责处理请求的类型和方法。 @RequestMapping注释可以按路径映射请求,例如 @RequestMapping(“ path”),通过HTTP方法,例如 @RequestMapping(“ path”,method = RequestMethod.GET),通过请求参数,例如 @RequestMapping(“ path””,method = RequestMethod.POST,params =“ param1”)并通过HTTP请求标头的存在例如

@RequestMapping(“路径”,标头=“ content-type = text / *”)。 您还可以在类级别应用@RequestMapping批注以过滤传入的请求。

处理完请求后,控制器将逻辑视图名称和模型返回给DispatcherServlet。 然后,它咨询视图解析器以查找实际的View来呈现输出。 可以使用ViewResolver实现来指定视图解析策略,默认情况下,DispatcherServlet使用
InternalResourceViewResolver,用于将逻辑视图名称转换为实际的View对象,例如JSP。

此后,DispatcherServlet与选定的视图联系,例如具有模型数据的JSP文件,并根据模型数据呈现输出。 该渲染的输出作为响应返回给客户端。 有时甚至不需要视图,例如在RESTful Web服务的情况下。

他们的处理程序方法使用@ResponseBody批注直接写入响应,而DispatcherServlet直接将响应返回给客户端。 请参阅REST with Spring课程,以了解有关使用Spring MVC开发和测试RESTful Web服务的更多信息。


在本文中,我将分享Java Web开发人员应该了解的有关DispatcherServlet的一些有用和必要的知识。 这些要点不仅可以帮助您更好地理解Spring MVC中DispatcherServlet的工作,还可以鼓励您通过探索和研究每个点来学习更多有关它们的知识。

1)DispatcherServlet是Spring MVC Application的主控制器。 所有传入的Web请求在通过各个Spring控制器(即使用@Controller注释进行注释的类)处理之前,都将通过DispatcherServlet传递。

2)Spring MVC的DispatcherServlet是前端控制器模式的实现(请参阅Spring MVC 4简介 )。 前端控制器不过是处理网站所有请求的控制器。 它们通常在Web应用程序中用于实现工作流。

3)与其他任何Servlet一样,Spring MVC框架的DispatcherServlet也在web.xml文件中声明和配置,如下所示:


SpringMVC
org.springframework.web.servlet.DispatcherServlet
1

SpringMVC
*

4)DispatcherServlet是一个实际的Servlet,它继承自HttpServlet基类。 像Tomcat这样的Servlet引擎会创建此类的实例,并调用它的各种生命周期方法,例如init(),service()和destroy()。

5)DispatcherServlet为您的Spring MVC Web应用程序提供了一个入口点。 如前所述,它处理所有传入的请求。 有关Spring内部工作的更多详细信息,请参见Spring MVC在内部如何工作。

6)Spring的DispatcherServlet也与Spring IoC容器完全集成,因此可以使用Spring框架的所有功能,例如依赖注入。

7)调度程序servlet被配置为load-on-startup = 1,这意味着该Servlet应该在部署应用程序时由Servlet容器创建,而不是在请求到达此请求时创建。 这样做是为了减少第一个请求的响应时间,因为DispatcherServlet在启动时做了很多工作来扫描和查找所有控制器和请求映射。 请参阅Kevin Jones的Java Web基础知识,以了解有关启动时加载和其他servlet基础的更多信息。

8)在DispatcherServlet初始化期间,Spring MVC框架将在Web应用程序的WEB-INF目录中查找名为[servlet-name] -servlet.xml的文件,并在其中创建定义的bean,例如,如果servlet名称为“ SpringMVC”如上面的web.xml配置所示,它将查找名为SpringMVC-Servlet.xml的文件。 它还覆盖了在全局范围内用相同名称定义的任何bean的定义。 您可以使用contextConfigLocation servlet初始化参数来更改此配置文件的确切位置。

9)在Spring MVC框架中,每个DispatcherServlet都有自己的WebApplicationContext(请参见Spring in Action ),该继承了在根WebApplicationContext中已经定义的所有bean。 这些继承的bean可以在servlet特定的作用域中被覆盖,并且可以在给定servlet实例的本地定义新的scope特定的bean。

10)Spring MVC框架的DispatcherServlet也可以返回Servlet API指定的last-modification-date。 它通过查找适当的处理程序映射来确定最后修改日期,并测试找到的处理程序是否实现了LastModified接口。 如果是,则调用LastModified接口的getLastModified(request)方法,并将值返回给客户端。

这就是Spring MVC框架的DispatcherServlet的全部内容。 就像我说的那样,DispatcherServlet是Spring MVC的主干,并充当将不同的HTTP请求路由到相应的Spring Controller的主控制器。 它是Front Controller设计模式的一种实现,并为Spring Web应用程序提供了一个入口。 您可以在web.xml中配置DispatcherServlet,但是将其分配为“启动时加载”值1,以建议容器在启动时而不是在请求出现时加载该Servlet。 这减少了第一个请求的响应时间。

进阶学习

  • Spring MVC 4简介
  • Baeldung的Spring REST
  • Spring基本原理作者:布莱恩·哈森(Bryan Hassen)

您可能想探索的其他与Spring相关的文章

  • Spring MVC中@RestControler和@Controller之间的区别? ( 回答 )
  • 2至3年的23个Spring MVC面试问题经验( 列表 )
  • Spring MVC中DispatcherServlet的用途是什么? ( 回答 )
  • 如何在Java应用程序中启用Spring安全性? ( 回答 )
  • Spring认证对工作和职业有帮助吗? ( 文章 )
  • 前五名Spring认证模拟考试( 列表 )
  • Pluralsight的Spring基础知识( 请参阅 )
  • Spring中@Autowired和@Injection批注之间的区别? ( 回答 )
  • 5个Java开发人员的Spring和Hibernate在线课程( 列表 )

感谢您到目前为止阅读本文。 如果您喜欢这篇文章,请与您的朋友和同事分享。 如果您有任何疑问,建议或反馈,或者您对DispatcherServlert有任何要点,但这里没有提及,但是值得您了解,请发表评论,我将其包含在主要文章中。

翻译自: https://www.javacodegeeks.com/2017/09/dispatcherservlet-spring-mvc-10-things-java-developer-know.html



推荐阅读
  • Spring Boot基础教程 ( 五 ) :构建 RESTful API 与单元测试
    首先,回顾并详细说明一下在下面我们尝试使用SpringMVC来实现一组对User对象操作的RESTf ... [详细]
  • 本文讨论了在ASP中创建RazorFunctions.cshtml文件时出现的问题,即ASP.global_asax不存在于命名空间ASP中。文章提供了解决该问题的代码示例,并详细解释了代码中涉及的关键概念,如HttpContext、Request和RouteData等。通过阅读本文,读者可以了解如何解决该问题并理解相关的ASP概念。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • 本文介绍了ASP.NET Core MVC的入门及基础使用教程,根据微软的文档学习,建议阅读英文文档以便更好理解,微软的工具化使用方便且开发速度快。通过vs2017新建项目,可以创建一个基础的ASP.NET网站,也可以实现动态网站开发。ASP.NET MVC框架及其工具简化了开发过程,包括建立业务的数据模型和控制器等步骤。 ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
  • 我将SpringMVC升级到Spring3.2.5.我的一些剩余调用即使存在,也会返回无法识别的字段异常.这是错误.Resolvingexceptionfrom ... [详细]
  • 实战基于SpringBoot2的WebFlux和mLab搭建反应式Web
    SpringFramework5带来了新的ReactiveStack非阻塞式Web框架:SpringWebFlux。作为与SpringMVC并行使用的Web框架,SpringWeb ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
  • 博客分类:restful笔记如何保持可见性?(a)使用HTTP方法(例如GET,POST,PUT)时,其语义要与HTTP所规定的语义保持一致,并添加适当的标头来描述请 ... [详细]
author-avatar
林世光_519
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有