Spring MVC中的@Controller注解和控制器类

3

当我使用Spring 3.x时,使用注解时很难知道我们将获取哪种类型的控制器类,使用 @Controller。

请参考http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/mvc/Controller.html,这些是实现Controller类的。

AbstractController
AbstractUrlViewController
MultiActionController
ParameterizableViewController
ServletForwardingController
ServletWrappingController
UrlFilenameViewController
AbstractWizardFormController
SimpleFormController

然而当我们在Spring MVC程序中使用@Controller注解时,如何知道我们的@Controller注解实现了这些控制器中的任何一个,请有人给我解释一下。

@ControllerController截然不同,你不能得到它们中的任何一个,也不应该混淆使用,因为它们的行为差异很大! - M. Deinum
3个回答

3
我认为你在这里没有抓住重点。在旧时代,要注册一个控制器,你的类必须实现控制器接口并选择请求映射类型。有时您需要实现大量代码才能实现单个请求映射。
如今,我们有了注释,模型已经改变。我们可以处理每个控制器类的多个请求类型。因为在单个@Controller注释的类中,我们可以处理许多请求映射。
Controller注释是一个专门的@Component,告诉Spring在其中找到@RequestMapping处理程序。这些处理程序可用于返回Json、HTML或上传文件。
现在,与同一模块相关的逻辑可以放置在单个控制器类下,您更加灵活地实现所需功能。其次,@Controller使我们能够显著减少代码量。

如果我需要AbstractWizardFormController,那么Spring如何知道我需要它?如果我需要在一个Java代码中使用两个或更多的控制器呢? - MS Ibrahim
尝试这个教程:http://www.codejava.net/frameworks/spring/spring-mvc-form-handling-tutorial-and-example - Beri

2

2
使用 @Controller 注解,我们将获取哪种类型的控制器类?
@Controller 注解是告诉 Web 容器,这是用于请求 URI 的控制器类。如果您使用 @Controller 注解对类进行注释,则不会获取任何类,您只需要在类中提供一个请求处理程序方法并使用 @RequestMapping 进行注释即可。虽然控制器类也可以使用 @RequestMapping 进行注释,在这种情况下,类内的方法将作为请求处理程序方法。
如何知道我们的 @Controller 注解是否实现了这些控制器之一?
您提到的这些类的名称实现了 Controller 接口,而不是 @Controller 注解实现了任何内容。这些控制器类是针对特定目的而设计的,正如它们的名称所示。

好的,我同意。那么如果我需要AbstractWizardFormController,我可以使用@Controller还是实现AbstractWizardFormController? - MS Ibrahim
我会给你的,但是我目前正在使用Spring 3.0和Spring Sec 3.x。在这种情况下,我该如何使用extends AbstractWizardFormController?它抛出了ClassNotFoundException。存在版本冲突。 - MS Ibrahim
1
你可能缺少一些jar文件或使用了不同版本的jar。 - Alok Mishra
使用Spring注释时没有错误。如果我取消使用AbstractWizardFormControlle的注释,它会显示错误。 - MS Ibrahim
请描述您面临的问题是什么? @MSIbrahim - Alok Mishra
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接