所有控制器都是Java,Servlets吗?

时间:2014-03-11 16:58:25

标签: java spring-mvc servlets

这是一个两部分问题[请耐心等待]:

最近有人和我争辩说,Spring MVC注释@Controller是一个完全不同的品种,并且在任何时候都不会实现Servlet。

我一直在实施Servlets作为控制器,因为我还是个孩子,并没有遇到过类似的事情(至少与Java有关)。

问题1:@controller是否有任何指向servlet的链接?

问题2:是否有其他机制可以在没有servlet的情况下实现请求/响应?我知道JSP / JSF等,但核心是它们仍然是servlet所以不是那样的。

4 个答案:

答案 0 :(得分:2)

servlet是Servlet

@Controller注释引用控制器的概念,并且独立于javax.servlet.ServletSpring documentation非常明确(强调我的):

  

@Controller注释表示特定类充当控制器的角色。 Spring不要求您扩展任何控制器基类或引用Servlet API。但是,如果需要,您仍然可以引用特定于Servlet的功能。

从那以后,你的标题问题的答案是:不。(你也问过#34; Java和#34;中的所有控制器,但请注意Spring!=所有Java。)

关于"其他实施请求/响应的方法的问题"太模糊了,无法回答。有无限的方法来实现任何东西。如果您愿意,可以用Java编写原始HTTP服务器。您可以完全使用与HTTP不同的协议。如果这是您的要求的一部分,您可以做一些不基于网络的事情。您可以使用不是Java的不同语言/框架。更具体。

答案 1 :(得分:1)

  1. Spring mvc通过servlet发送请求和响应。使用servlet规范是很常见的,因为所有servlet容器都支持它,你可以选择你最喜欢的,如Jetty,Tomcat等。

  2. Servlet只是规范如何处理请求,响应,会话等。但这没有必要。请查看netty或类似内容。

  3. 从架构视图来看,servlet和@Controller是相似的。

答案 2 :(得分:0)

问题1:@controller是否有任何指向servlet的链接?

从你在web.xml文件中配置的名为DispatcherServlet的servlet调用控制器。

您的请求首先由Dispatcher servlet处理,调度程序servlet根据ur url映射决定应该调用哪个控制器。

答案 3 :(得分:0)

  1. 实际上springMVC正在使用Front Controller设计模式来消除代码重复问题。因此,根据前端控制器设计模式,我们不需要编写多个DispatcherServlet的servlet。但我会告诉你,每个请求都只通过DispatcherServlet。