【问题标题】:Spring not serving html fileSpring不提供html文件
【发布时间】:2015-04-27 10:54:43
【问题描述】:

所以我正在尝试按照本指南了解如何使用 Spring 提供 html 文件: http://spring.io/guides/gs/serving-web-content/

我有完全相同的文件夹结构和完全相同的文件,但是当我运行 Spring Boot 服务器时,我的 localhost:8080/greeting 将只显示从 GreetingController 返回的字符串 greeting,就是这样,如果我看的话在页面源代码中,没有html。

我找不到任何相关的答案,因为所有类似的答案仍然使用 .xml 文件驱动的 Spring,您在 .xml 文件中声明视图。但是本指南明确指出不需要使用 .xml。它应该就是这样工作的。

映射:

@RestController
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";
    }
}

使用@Controller 会抛出错误:

2015-02-25 14:50:14.830 ERROR 2378 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Circular view path [greeting]: would dispatch back to the current handler URL [/greeting] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)] with root cause

javax.servlet.ServletException: Circular view path [greeting]: would dispatch back to the current handler URL [/greeting] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

编辑:

解决方案: a) 使用@Controller 而不是@RestController b) 在 IntelliJ 中启动应用程序时,请确保创建一个在执行 Main 类之前运行的 Gradle 任务。

【问题讨论】:

  • 仔细阅读,你会找到答案。
  • 控制器返回视图,并以 html 文件的形式显示给您
  • 在控制器中发布您的映射。和文章里的一样吗? @RequestMapping("/greeting") public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) { model.addAttribute("name", name); return "greeting"; }
  • 嗨,我也有同样的问题。如果我通过命令行运行项目,它工作正常,但使用 Intellij 时失败。在运行应用程序之前创建一个 gradle 任务是什么意思?\
  • @HaifengZhang,我卡在了同一个地方。你想清楚了吗?我不明白在应用程序启动之前要运行什么 gradle 任务。

标签: java html spring spring-mvc


【解决方案1】:

您是否在 pom.xml 中添加了以下依赖项?

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

【讨论】:

  • 为什么当我提供纯 .html 而不是 thymeleaf 模板时?
  • 您在spring.io/guides/gs/serving-web-content 引用的指南使用百里香叶,所以我假设您使用的是百里香叶模板。 thymeleaf.org">
【解决方案2】:

您使用的是@RestControllerdocumentation)而不是@Controller

一个便利的注解,它本身使用@Controller 和@ResponseBody 进行注解。

无论方法返回什么,@ResponseBody 都只是返回给调用者,在你的情况下是字符串 greeting

至于你得到的圆形视图路径异常,它可能与ViewResolvers 有关。来自 Spring Boot 文档

有许多 ViewResolver 的实现可供选择,Spring 本身并没有固执己见地决定应该使用哪些。另一方面,Spring Boot 会根据它在类路径和应用程序上下文中找到的内容为您安装一个或两个

因此,依赖项中可能缺少某些内容。是否配置了 spring-boot-starter-thymeleaf 依赖项?

【讨论】:

  • 其实这才是最重要的,因为@ResponseBody
  • 编辑了我的帖子。加载页面时使用@Controller 会引发错误。
  • 如果需要,可以提供任何其他信息。我在谷歌上找到的每一个解决方案都告诉创建一个 .xml 文件来解决这个问题,但我遵循的指南说它不需要..
  • @Kasper。该示例使用 thymeleaf 进行渲染,我希望您拥有它,您可以发布您的主类和 pom.xml 或其他构建文件吗?只是为了确保一切就绪。
猜你喜欢
  • 2013-03-06
  • 2016-05-17
  • 2016-06-14
  • 1970-01-01
  • 2019-05-26
  • 2023-03-11
  • 2013-12-28
  • 2017-01-21
  • 2015-04-06
相关资源
最近更新 更多