我正在尝试做本教程-> http://spring.io/guides/gs/serving-web-content/
当我运行它时,它说“圆形视图路径” [正在问候],为什么?
在本教程中,我不了解的一件事是以下内容及其工作原理:
return "greeting";
程式码片段:
package hello;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class GreetingController {
@RequestMapping("/greeting")
public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
}
}
在学习本教程时,您可能已经跳过了一步。
我将解释为什么您会看到自己的行为,并且可以决定以后要做什么。
您可能已经启动了应用程序
SpringApplication.run(Application.class, args);
在教程Application
类的main
方法中。默认情况下,由于@EnableAutoConfiguration
(以及类路径中的其他组件)的缘故,DispatcherServlet
将为您注册a UrlBasedViewResolver
,它提供的默认值不会设置aprefix
或suffix
解析的视图。
在您的@Controller
处理程序方法中,当您执行
return "greeting";
Spring将使用UrlBasedViewResolver
来解析视图名称。在这种情况下,视图名称将仅为greeting
。通常情况下,一旦完成,它将使用Servlet
APIHttpServletRequest#getRequestDispatcher(String)
在该视图名称中传递的内容。该方法返回一个RequestDispatcher
,指向该路径的处理程序。
在我们的示例中,RequestDispatcher
Spring在获取之前,将视图名称(解析为路径)与当前请求的路径进行比较。它将发现它们都是平等的。换句话说,对的请求/greeting
将通过返回一个视图来处理,该视图/greeting
将由相同的@Controller
处理程序方法处理,并且永远返回。Spring会检测到这一点,并告诉您您有一个圆形的视图路径,即。您将无限循环。
了解如何@EnableAutoConfiguration
工作并更改配置,以便您可以定义自己的配置UrlBasedViewResolver
或InternalResourceViewResolver
适当设置前缀和后缀的配置。
您可以在Spring MVC官方文档中阅读有关视图名称解析的更多信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句