当前位置: 首页 > 知识库问答 >
问题:

Spring Boot无法正确渲染Thymeleaf视图

汤洋
2023-03-14

我正在学习这本Spring Security指南,我已经读到了“创建一个不安全的web应用程序”一节。在该节末尾,声明如下:

此时,您可以直接使应用程序可执行并运行应用程序,而无需登录任何内容。

创建基本的简单web应用程序后,您可以为其添加安全性。

我试图按照“使应用程序可执行”中描述的步骤,创建应用程序的不安全版本。但是,这些视图没有得到正确处理
例如,如果我导航到http://localhost:8080/home我得到了这个错误:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Thu Jan 14 20:49:56 ART 2016
There was an unexpected error (type=Not Found, status=404).
No message available

我发现这个问题说我应该添加Thymeleaf的依赖项,另一个问题说我应该添加jasper和jslt,但它们都不起作用。然后,我发现了这个问题,说我应该把我的资源从src/main/resources/templates复制到src/main/resources/static
这样做会有一点变化:导航到<代码>http://localhost:8080/home.html呈现html,但不会处理视图,因此不会生成链接。

这是我的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.github.juanmougan.samples</groupId>
    <artifactId>spring-security</artifactId>
    <!-- <packaging>jar</packaging> -->
    <version>1.0-SNAPSHOT</version>
    <name>spring-security</name>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.1.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>

我的MVC配置类:

package com.github.juanmougan.samples;

import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * Configures Spring MVC and sets up view controllers to expose the templates.
 * 
 * @author juanma
 *
 */
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/hello").setViewName("hello");
        registry.addViewController("/login").setViewName("login");
    }

}

和模板:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
    <head>
        <title>Hello World!</title>
    </head>
    <body>
        <h1>Hello world!</h1>
    </body>
</html>

知道为什么模板没有被正确处理吗?
提前感谢

编辑:添加缺少的应用程序类。

package com.github.juanmougan.samples;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) throws Throwable {
        SpringApplication.run(Application.class, args);
    }

}

共有2个答案

燕文昌
2023-03-14

您不需要tomcat或javax。在pom中的servlet。xml将其取出并替换为

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

这将引入嵌入式tomcat实例并为您自动配置MVC内容。

然后添加一个带注释的类,并设置一个请求映射

@Controller
public class IndexController {

    @RequestMapping("/")
    public String index() { 
        return "redirect:/home";
    }

    @RequestMapping("/home")
    public String home() {  
        return "home";
    }

    @RequestMapping("/login")
    public String login() { 
        return "login";
    }

}

此外,作为一个#protip,当您遇到这样的白标签错误时,请转到eclipse(或STS,无论您使用什么),并查看控制台上的输出。它通常会转储一个完整的堆栈跟踪,其中包含更明确的错误消息,您可以确定问题所在。

勾俊
2023-03-14

您应该添加@Configuration注释,以便在加载配置时考虑MvcConfig类

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter{
...
}
 类似资料:
  • 在控制台上获取以下第一行: 35026:1978749]CoreText注意:客户端请求的名称“.SFNS-Regular”,它将获得Times-Roman而不是预期的字体。所有系统UI字体访问都应通过适当的API,如CTFontCreateUIFontForLanguage()或[NSFont systemFontOfSize:]。2021 06月09日00:00:46.808 java[350

  • 我正在创建Spring boot web Application。出于模板目的,我使用了thymeleaf。我正在创建单独的html页面片段,并从这些片段创建两个不同的布局。但是,当我连接内容页面时,我没有得到正确的输出。 请检查代码片段/ 视图解析器 目录结构 应用布局。html 页脚片段footer.html 使用此方法创建不同的片段。 主方法类aka startup 欢迎html 现在,当我

  • 我现在正在尝试学习自由Gdx。但是,我遇到了一个非常非常奇怪的问题。经过一番谷歌搜索,我开始认为我是唯一一个。基本上,每当我运行应用程序时,它都会开始在屏幕上快速闪烁随机图像 奇怪的是,当渲染方法什么都不做时,它也会这样做。我尝试从其中删除所有代码,但仍然得到相同的输出。 以下是呈现方法中发生的情况: 另一件奇怪的事情是Gdx.graphics。getDeltaTime()总是为我返回0。

  • 我在android上使用libgdx时遇到字体问题。当我第一次打开应用程序时,它们工作得很好。但是,当我暂停应用程序然后继续时,字体呈现不正确。 下面是我如何创建字体的。 我的暂停/恢复方法中没有任何内容,不确定是否应该有什么内容。 这是它之前/之后的样子。

  • 在我的主类下面,我试图从搅拌机渲染一个obj. obj文件,在将其重新格式化为(据称)为我的渲染工作后,它会出现错误。我如何解决这个问题? 主要类: OBJLoader类: 类别模型: 类面: 对不起,如果这是过度的,我知道错误来自第85行,但我似乎不知道如何修复它。 OBJ文件示例(精简):

  • 对于使用Box2DDebugRenderer进行渲染Box2D调试,我有一些问题。我有两个正交摄像机,一个用于渲染世界(名为Cam),另一个用于HUD(healthBar,Armor,…)(名为hudCam)。 我试图渲染: > b2dr。渲染(世界,凸轮组合)- 我找不到一种方法来渲染Box2D完全像凸轮,看到所有机构的边缘。 如果有人理解我的问题,请帮助我! 谢谢。