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 FrameworkServlet
→ FrameworkServlet extends HttpServletBean
→ HttpServletBean extends HttpServlet
。
DispatcherServlet
与任何其他 Servlet 一样,在 web.xml 中声明。它处理所有传入的 HTTP 请求。它被称为前端控制器,它在您的应用程序中提供单点入口。它负责通过将请求委托给不扩展 HTTP Servlet API 的 Spring MVC 控制器的其他组件来处理请求。
看下图
在这张图片中DispacherServlet
是唯一的HttpServlet
。 Controller
s、HandlerMapping
和 ViewResolver
都是 Spring MVC bean。
【讨论】:
以上是关于Spring mvc 中的 Servlet的主要内容,如果未能解决你的问题,请参考以下文章