我正在阅读以下文章:
提供了映射配置:
@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);
}
作者写道:
- 当我们访问URL / hello时,helloworld.jsp将运行。
- 当我们访问URL / home时,helloworld.jsp将运行,因为它将被重定向到URL / hello。
- 当我们访问网址/详细信息时,我们将获得包含400个HTTP状态代码的标头响应。
醇>
因此行
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");
答案 0 :(得分:2)
是的,重定向将覆盖
的原始映射registry.addViewController("/home").setViewName("myhome");
对于没有设置明确视图名称的视图控制器,他们将(尝试)分别显示index.jsp
和securedPage.jsp
。
来自ViewControllerRegistration.setViewName(String viewName)
:
设置要返回的视图名称。可选的。
如果未指定,视图控制器将返回
null
作为 查看名称,在这种情况下配置RequestToViewNameTranslator
将选择视图名称。DefaultRequestToViewNameTranslator
为。{1}} 示例将“/ foo / bar”翻译为“foo / bar”。
因此RequestToViewNameTranslator
会将/securedPage
转换为securedPage
,而ViewResolver
(在本例中为JSP InternalResourceViewResolver
)将基于此找到JSP