3

如果我编写一个简单的 servlet 应用程序,在我的 servlet 类中我扩展 http servlet。这让容器知道我的类是一个 servlet,它将管理 servlet 的“生命周期”。init、doget()、destroy() 等

但是 Spring MVC framweork 控制器类没有扩展任何 servlet 类。它只是一个带有自己自定义方法的 POJO。现在我可以使用 Requestmapping 单独调用这些方法。

但是这个 spring 控制器类会被容器以与管理 servlet 生命周期相同的方式“管理”吗?

4

1 回答 1

3

但是这个 spring 控制器类会被容器以与管理 servlet 生命周期相同的方式“管理”吗?

不是直接的。那么 Spring MVC 应用程序的入口点通常是DispatcherServlet*. 此类扩展(不是直接扩展,而是通过继承)HttpServlet。您可以像声明任何其他 一样声明它Servlet,通常在web.xml.

但是,您不会自行声明它。您提供了一个 Spring ApplicationContextDispatcherServlet可以从中获取@Controller用于处理请求的带注释的类。

DispatcherServlet处理程序堆栈非常大。涉及的组件很多。官方的 Spring MVC 是一个很好的文档。你应该阅读它。

*我说通常是因为 Spring 提供了其他处理程序,HttpRequestHandler例如。


补充阅读:

  1. Spring MVC 和 Servlets 3.0 - 你还需要 web.xml 吗?
  2. 在 Eclipse 之外将 Spring MVC 应用程序部署到 tomcat 的幕后会发生什么?
  3. Spring 中的@Component、@Repository 和@Service 注解有什么区别?
  4. Spring MVC:<context:component-scan> 和 <annotation-driven /> 标签之间的区别?
  5. <context:annotation-config> 与 <context:component-scan> 之间的区别
  6. ContextLoadListener 和 DispatcherServlet
于 2013-10-07T23:21:05.120 回答