如何在没有Controller的情况下使用SpringMVC,使用ViewControllerRegistry和addViewController()等等?

时间:2018-04-13 08:51:31

标签: java spring spring-mvc spring-boot redirect

我正在阅读以下文章:

https://www.concretepage.com/spring-4/spring-4-mvc-without-controller-using-viewcontrollerregistry-with-addviewcontroller-addredirectviewcontroller-and-addstatuscontroller-example

提供了映射配置:

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/home").setViewName("myhome");
    registry.addViewController("/hello").setViewName("helloworld");
    registry.addRedirectViewController("/home", "/hello");
    registry.addStatusController("/detail", HttpStatus.BAD_REQUEST);        
} 

作者写道:

  
      
  1. 当我们访问URL / hello时,helloworld.jsp将运行。
  2.   
  3. 当我们访问URL / home时,helloworld.jsp将运行,因为它将被重定向到URL / hello。
  4.   
  5. 当我们访问网址/详细信息时,我们将获得包含400个HTTP状态代码的标头响应。
  6.   

因此行

registry.addViewController("/home").setViewName("myhome");

没用?

另外在其他教程中,我发现了以下配置:

 @Override
 public void addViewControllers(final ViewControllerRegistry registry) {
     super.addViewControllers(registry);
     registry.addViewController("/")
            .setViewName("forward:/index");
     registry.addViewController("/index");
     registry.addViewController("/securedPage");
 }


registry.addViewController("/")
                .setViewName("forward:/index");

这条线很清楚。这意味着如果我尝试访问root url应用程序retuns index.jsp

的含义是什么
registry.addViewController("/index");
registry.addViewController("/securedPage");

1 个答案:

答案 0 :(得分:2)

是的,重定向将覆盖

的原始映射
registry.addViewController("/home").setViewName("myhome");

对于没有设置明确视图名称的视图控制器,他们将(尝试)分别显示index.jspsecuredPage.jsp

来自ViewControllerRegistration.setViewName(String viewName)

  

设置要返回的视图名称。可选的。

     

如果未指定,视图控制器将返回null作为   查看名称,在这种情况下配置RequestToViewNameTranslator   将选择视图名称。 DefaultRequestToViewNameTranslator为。{1}}   示例将“/ foo / bar”翻译为“foo / bar”。

因此RequestToViewNameTranslator会将/securedPage转换为securedPage,而ViewResolver(在本例中为JSP InternalResourceViewResolver)将基于此找到JSP