Spring mvc 中的 Servlet

Posted

技术标签:

【中文标题】Spring mvc 中的 Servlet【英文标题】:Servlets in spring mvc 【发布时间】:2016-04-18 06:10:39 【问题描述】:

我对 servlet 和 spring mvc 有基本的了解。但是我不知道spring mvc中是否使用了servlet。在 spring mvc 中,我们有控制器类。我的想法是 servlet 在 spring mvc 中用作控制器。如有不妥请指正。

【问题讨论】:

你似乎缺少关于“MVC”的“基本思想”:***.com/q/3541077 【参考方案1】:

相关/复制到When to use Servlet or @Controller。问题不一样,但对那个问题的解释你会明白的:

如果您是一名有兴趣学习这门语言的学生,那么我现在会坚持使用 servlet。仅使用 servlet 编写 Web 应用程序是可能的,但实际上您可能还想查看 JSP。

JSP 是编写 servlet 的一种便捷方式,它允许您将 html 与脚本元素混合(尽管建议避免在 jsp 中使用 Java 代码,而使用标签和 el 表达式)。在幕后,它将被编译为一个 servlet,但它避免了您必须使用大量凌乱的打印语句。

至少对 servlet 和 JSP 有基本的了解是很重要的。 Spring MVC 是构建在 servlet 之上的众多框架之一,旨在使编写 Web 应用程序的任务变得更容易一些。基本上所有请求都映射到充当前端控制器的 DispatcherServlet。

然后 DispatcherServlet 将调用注解匹配传入请求的控制器。这比必须自己在 web.xml 中编写这些映射更简洁(尽管使用 servlet 3.0 您现在可以注释 servlet)。但是您还可以获得许多其他可以使用的好处,例如将表单字段映射到对象,使用 jsr303 注释验证该对象,将输入和输出映射到 xml 或 json 等。此外,它与核心 spring 紧密集成,因此您可以轻松连接供控制器调用的服务。

值得注意的是,在 servlet 之上构建了许多相互竞争的框架。 Spring MVC 是最流行的一种,因此它是一个不错的选择。

【讨论】:

【参考方案2】:

是的,你完全正确。 Servlet 在 Spring-MVC 中使用。在 Spring-MVC 中,当您编写 @Controller 之类的注解时,您间接地使用了一个称为 Dispatcher Servlet 的 Servlet。 Dispatcher Servlet 在 web.xml 文件中定义,其属性和类名映射到 .jsp 页面和 Controller 部分。

【讨论】:

这个答案具有误导性。使用 @Controller 注释的 Spring 类不是 HttpServlet API 的扩展。看看我下面的答案。【参考方案3】:

控制器不是 Servlet! 控制器是不扩展 HttpServlet 的普通 Spring MVC bean。取而代之的是 Spring 的自定义扩展 HttpServlet,称为 DispacherServlet。查看DispacherServlet 的源代码可以看到类层次结构为:DispatcherServlet extends FrameworkServletFrameworkServlet extends HttpServletBeanHttpServletBean extends HttpServlet

DispatcherServlet 与任何其他 Servlet 一样,在 web.xml 中声明。它处理所有传入的 HTTP 请求。它被称为前端控制器,它在您的应用程序中提供单点入口。它负责通过将请求委托给不扩展 HTTP Servlet API 的 Spring MVC 控制器的其他组件来处理请求。

看下图

在这张图片中DispacherServlet 是唯一的HttpServletControllers、HandlerMappingViewResolver 都是 Spring MVC bean。

【讨论】:

以上是关于Spring mvc 中的 Servlet的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc中如何过滤form提交数据中的空格?

spring mvc中的mybatis怎么使用

两个 servlet 中的 Spring、MVC 和 REST

Spring MVC 中的验证

Spring mvc 中的 Servlet

了解 Spring MVC 中的“globalValidator”