首页 > 解决方案 > Spring Boot 无法正确呈现视图

问题描述

我一直自己构建 Spring MVC Web 应用程序来配置它们,直到我被告知这个 Spring Boot 可以帮助您配置/初始化应用程序。所以我决定试一试,并使用 Spring Boot 创建了一个新项目。我遵循了所有步骤,以使其与主类、控制器和所有必需的依赖项一起工作。当我运行应用程序时,它会启动并响应 HTTP 请求。当我尝试返回视图时会出现问题。它只是将视图作为普通的 html 文件返回,而不呈现所有 Spring 标记。让我告诉你我做了什么:

这是项目的目录树:

在此处输入图像描述

我创建了一个目录 webapp/WEB-INF/view,在其中放置了与视图对应的 jsp 文件。到目前为止,我只有一个非常简单的 helloWord.jsp:

<!DOCTYPE html>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<html lang="en">
<body>
<div>
    <div>
        <h2>Hello ${name}</h2>
    </div>
</div>
</body>
</html>

SpringBootHelloWorldApplication是主类,包含以下代码:

@SpringBootApplication
@ComponentScan(basePackages={"com.example.springboothelloworld"})
public class SpringBootHelloWorldApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootHelloWorldApplication.class, args);
    }
}

ApplicationCofigerAdapter以这种方式配置 InternalResourceViewResolver:

@Configuration
@EnableWebMvc
public class ApplicationConfigurerAdapter extends WebMvcConfigurerAdapter{

    @Bean
    public ViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver bean = new InternalResourceViewResolver();
        bean.setViewClass(JstlView.class);
        bean.setPrefix("/WEB-INF/view/");
        bean.setSuffix(".jsp");
        return bean;
    }

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
} 

HelloWorldController是处理所有 HTTP 请求的控制器

@Controller
@RequestMapping("/home")
public class HelloWorldController {

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

    @RequestMapping("/hello/{name}")
    public String helloView(@PathVariable("name") String name, Model model){
        model.addAttribute("name", name);
        return "helloWorld";
    }
}

application.properties中我放了这些行,但我不知道我是否真的需要它们,因为它们已经存在于 ApplicationConfigurerAdapter 中。

spring.mvc.view.prefix= /WEB-INF/view/
spring.mvc.view.suffix= .jsp

当我发送这个 HTTP GET 请求时:http://localhost:8080/home/hello/Stefano

它返回这个:

在此处输入图像描述

这当然是一个意想不到的结果。

标签: javaspringspring-mvcspring-boot

解决方案


我想出了如何让它工作。我必须在我的 macOS 上安装 maven,然后运行以下命令以删除目标文件夹、编译代码并将其打包(在我的情况下为 JAR 格式)。

mvn clean package spring-boot:repackage

在此之后,我可以使用以下命令执行 JAR 文件:

java -jar target/file_name.jar

此时(如果一切顺利)我的 Web 应用程序现在正在 localhost:8080 上运行。我仍然不知道如何让它在 IntelliJ 上工作,因为这样我不知道如何调试它。


推荐阅读