何时使用Servlet或@Controller

我需要清理一些事情。 我一直在寻找这个问题的答案,但我似乎无法找到我的具体问题的好答案(例如,这个问题正在蚕食答案: servlet和Web服务之间的区别 )。

根据我的理解,有一些不同的方法可以在“面向MVC”的Web应用程序中实现“请求处理”,即“控制器”,其中两个是:

  1. Java特定的Servlet (例如,您通过单击new – > Servlet创建的,例如在eclipse中),用作“Controller”。 这个扩展了HttpServlet ,你使用像doGetdoPost等方法。
  2. Spring MVC注释了@Controller类(是的,使用DispatcherServlet )。 有了这个,你可以使用@RequestMethod GET / POST等。

现在我的问题……

  • 你什么时候使用其中一个?
  • 使用一种方法比另一种方法有任何一般优势吗? (比如,一般推荐一种方法吗?)

[编辑] :强调关键字

如果你是一名有兴趣学习这门语言的学生,那么我现在就会坚持使用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注释validation该对象,将输入和输出映射到xml或json等等。此外,它与核心弹簧紧密集成,因此您可以轻松地接入您的服务供控制器调用。

值得注意的是,在servlet之上构建了大量竞争框架。 Spring MVC是最流行的之一,因此它不是一个糟糕的选择。

Servlet和Spring MVC Controller可用于执行相同的操作,但它们在Java应用程序的不同级别上运行

servlet是J2EE框架的一部分,每个Java应用程序服务器(Tomcat,Jetty等)都是为运行servlet而构建的。 Servlet是J2EE堆栈中的“低级”层。 您不需要servlet.jar来运行您的应用程序,因为它已预先打包了应用程序服务器

Spring MVC控制器是一个基于servlet构建的库,可以使事情变得更容易。 Spring MVC提供了更多内置function,例如表单参数到控制器方法参数映射,更容易处理二进制表单提交(即表单可以上传文件)。 您需要将所需的jar打包到您的应用程序,以便运行Spring MVC Controller

当你需要“低级别”时,你应该使用一个servlet,例如可能是出于性能原因。 Spring MVC表现不错但是如果它有一些开销,如果你需要从应用程序服务器中挤出所有内容(并且你已经调整了其他层,比如db),请使用servlet。 如果要了解J2EE Web规范的基础(即用于教育目的),可以选择servlet

在所有其他情况下,您可以/应该选择Web框架。 Spring MVC就是其中之一; 使用Spring MVC,您不需要重新发明轮子(即二进制表单管理,表单参数到bean转换,参数validation等)。 Spring MVC的另一个好处是,在一个类中,您可以轻松地管理来自不同URL和方法的输入,在servlet中执行相同操作是可能的,但代码更复杂,可读性更低。 我的观点是Spring MVC有利于构建rest服务和管理简单的应用程序(即简单forms的Web应用程序)。 如果您需要使用Ajax管理非常复杂的表单,嵌套表单以及具有会话和页面状态的应用程序,我的建议是切换到基于组件的框架(例如apache wicket )。

JSF和JSP以及Spring MVC在Servlets上构建。 这个问题,servlet不是很“好”,因为你必须编写直接的HTML。

如果您能够使用现代Web技术,我会在需要直接http输出的位置使用servlet,例如将数据从数据库写入http。

使用与Dipatcherservlet或FacesServlet一起使用的SpringMVC或JSF更快更有趣。 它们解析您的文件并通过servlet发送。