Java 何时使用Servlet或@Controller

Java 何时使用Servlet或@Controller,java,spring,model-view-controller,Java,Spring,Model View Controller,我需要把一些事情弄清楚。我一直在寻找这个问题的答案,但对于我的具体问题,我似乎找不到一个好的答案(例如,这个问题蚕食了答案:) 据我所知,在“面向MVC”的web应用程序中,可以采用不同的方法实现“请求处理”,即“控制器”,其中两种方法是: 特定于Java的Servlet(即,通过单击新建-> Servlet(例如在eclipse中),用作“控制器”。这个 扩展HttpServlet,使用doGet和doPost等方法 Spring MVC注释的@Controller类(是的,使用Dispatc

我需要把一些事情弄清楚。我一直在寻找这个问题的答案,但对于我的具体问题,我似乎找不到一个好的答案(例如,这个问题蚕食了答案:)

据我所知,在“面向MVC”的web应用程序中,可以采用不同的方法实现“请求处理”,即“控制器”,其中两种方法是:

  • 特定于Java的Servlet(即,通过单击新建-> Servlet(例如在eclipse中),用作“控制器”。这个 扩展
    HttpServlet
    ,使用
    doGet
    doPost
    等方法
  • Spring MVC注释的
    @Controller
    类(是的,使用
    DispatcherServlet
    )。使用此方法,您可以使用
    @RequestMethod
    GET
    /
    POST
  • 现在回答我的问题

    • 您何时使用其中一种?
    • 使用一种方法比使用另一种方法有什么普遍优势吗?(比如,一般情况下是否推荐一种方法优于另一种方法?)

    [编辑]:强调关键词

    JSF和JSP以及基于servlet构建的Spring MVC。这个问题说明servlet不是很好处理,因为您必须编写直接html

    如果您能够使用现代web技术,我只会在需要直接http输出的位置使用servlet,比如将数据库中的图像写入http


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

    如果你是一个对学习这门语言感兴趣的学生,那么我现在就坚持使用servlet。只使用servlet编写web应用程序是可能的,但在实践中,您可能也希望了解JSP

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

    至少对servlet和JSP有一个基本的了解是很重要的。SpringMVC是许多构建在servlet之上的框架之一,这些框架试图使编写web应用程序的任务变得更简单。基本上,所有请求都映射到DispatcherServlet,它充当一个代理

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


    值得注意的是,在servlet之上构建了大量相互竞争的框架。Spring MVC是最受欢迎的应用程序之一,因此这是一个不错的选择。

    Servlet和Spring MVC控制器可以用来做同样的事情,但它们作用于Java应用程序的不同级别

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

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

    当您需要进入“低级别”时,您应该使用servlet,而示例可能是出于性能原因。SpringMVC的性能很好,但是如果它有一些开销,如果您需要从应用程序服务器中挤出所有可以使用的资源(并且您已经调整了其他层,比如db),那么就使用servlet。如果您想了解J2EE Web规范(即教育目的)

    的基础,您可以选择servlet。 在所有其他情况下,您可以/应该选择web框架。SpringMVC就是其中之一;使用SpringMVC,您不需要重新发明轮子(即二进制表单管理、表单参数到bean的转换、参数验证等等)。 SpringMVC的另一个优点是,在一个类中,您可以轻松地管理来自不同URL和方法的输入,在servlet中也可以这样做,但代码更复杂,可读性更低。
    我的观点是,SpringMVC对于构建rest服务和管理简单应用程序(即具有简单表单的web应用程序)非常有用。如果您需要使用Ajax管理非常复杂的表单、嵌套表单以及同时具有会话和页面状态的应用程序,我的建议是切换到基于组件的框架(例如)。

    JPA与servlet无关。servlet通常与JSP结合使用,就像SpringMVC控制器一样。我指的是JSP,我指的是JSP时总是写JPA。对不起。@Templar谢谢你的回答!不过我还是有点困惑。您将使用
    @Controller
    (Spring MVC)开发什么样的应用程序?您将使用“常规servlet”开发什么样的应用程序?我不需要编写的所有内容都直接指向httpstream->@Controller将图像等资源写入httpstream->ServletNice解释!我对事物如何单独工作有一个基本的理解,只是我不能真正确定何时使用这两种方法。你解释了它们之间的区别