我需要清理一些事情。我一直在寻找这个问题的答案,但我似乎无法找到我的具体问题的好答案(例如,这个问题正在蚕食答案:Difference between servlet and web service)。
据我了解,有一些不同的方法可以在“面向MVC”的Web应用程序中实现“请求处理”,即“控制器”,其中两个是:
HttpServlet
并使用doGet
和doPost
等方法@Controller
类(是的,使用DispatcherServlet
)。有了这个,您可以使用@RequestMethod
GET
/ POST
等。现在我的问题......
[编辑] :强调关键字
答案 0 :(得分:20)
如果你是一名有兴趣学习这门语言的学生,那么我现在就会坚持使用servlet。只使用servlet编写Web应用程序是可能的,但实际上你可能也想看看JSP。
JSP是一种编写servlet的便捷方式,它允许您将html与脚本元素混合使用(尽管建议在jsp中避免使用Java代码而使用标记和el表达式)。在封面下,它将被编译为servlet,但它避免了你必须使用大量凌乱的打印语句。至少要对servlet和JSP有一个基本的了解。 Spring MVC是构建在servlet之上的众多框架之一,旨在使编写Web应用程序的任务变得更加容易。基本上所有请求都映射到DispatcherServlet,它充当front controller。
然后,DispatcherServlet将调用其注释与传入请求匹配的控制器。这比在web.xml中自己编写这些映射更简洁(尽管使用servlet 3.0,您现在可以注释servlet)。但是你也可以使用许多其他好处,例如将表单字段映射到对象,使用jsr303注释验证该对象,将输入和输出映射到xml或json等等。此外,它与核心弹簧紧密集成,因此您可以轻松地接入您的服务供控制器调用。值得注意的是,在servlet之上构建了大量竞争框架。 Spring MVC是最流行的之一,因此它不是一个糟糕的选择。
答案 1 :(得分:12)
Servlet和Spring MVC Controller可用于执行相同的操作,但它们在Java应用程序的不同级别上运行
servlet是J2EE框架的一部分,每个Java应用程序服务器(Tomcat,Jetty等)都是为运行servlet而构建的。 Servlet是"低级" J2EE堆栈中的层。您不需要servlet.jar来运行您的应用程序,因为它已经预先打包了应用程序服务器
Spring MVC控制器是一个基于servlet构建的库,可以使事情变得更容易。 Spring MVC提供了更多内置功能,例如表单参数到控制器方法参数映射,更容易处理二进制表单提交(即表单可以上传文件时)。您需要将所需的jar打包到您的应用程序才能运行Spring MVC Controller
当你需要去低水平"时,你应该使用一个servlet,例如可能是出于性能原因。 Spring MVC表现不错,但是如果它有一些开销,如果你需要从应用服务器中挤出所有内容(并且你已经调整了其他层,比如db),请使用servlet。如果要了解J2EE Web规范的基础(即用于教育目的),可以选择servlet
在所有其他情况下,您可以/应该选择一个Web框架。 Spring MVC就是其中之一;使用Spring MVC,您不需要重新发明轮子(即二进制表单管理,表单参数到bean转换,参数验证等)。 Spring MVC的另一个优点是,在一个类中,您可以轻松地管理来自不同URL和方法的输入,在servlet中执行相同操作是可能的,但代码更复杂且可读性更低。 我的观点是Spring MVC有利于构建休息服务和管理简单的应用程序(即简单形式的Web应用程序)。如果您需要使用Ajax管理非常复杂的表单,嵌套表单以及具有会话和页面状态的应用程序,我的建议是切换到基于组件的框架(例如apache wicket)。
答案 2 :(得分:5)
JSF和JSP以及Spring MVC在Servlets上的构建。这个问题就是servlet不是很“好”,因为你必须直接编写html。
如果您能够使用现代Web技术,我会在需要直接http输出的位置使用servlet,例如将数据从数据库写入http。
使用与Dipatcherservlet或FacesServlet配合使用的SpringMVC或JSF更快更有趣。它们解析您的文件并通过servlet发送。