提问者:小点点

Spring Boot无法正确渲染视图


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

这是项目的目录树:

我创建了一个目录webapp/WEB-INF/view,其中放置了与视图对应的jsp文件。到目前为止,我只有一个helloWords. 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);
    }
}

ApplicationCofigrerAdapter以这种方式配置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我把这些行,但我不知道我是否真的需要它们,因为它们已经存在于ApplicationConfigrerAdapter中。

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

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

它返回这个:

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


共1个答案

匿名用户

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

mvn clean package spring-boot:repackage

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

java -jar target/file_name.jar

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