java - 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
它返回这个:
这当然是一个意想不到的结果。
解决方案
我想出了如何让它工作。我必须在我的 macOS 上安装 maven,然后运行以下命令以删除目标文件夹、编译代码并将其打包(在我的情况下为 JAR 格式)。
mvn clean package spring-boot:repackage
在此之后,我可以使用以下命令执行 JAR 文件:
java -jar target/file_name.jar
此时(如果一切顺利)我的 Web 应用程序现在正在 localhost:8080 上运行。我仍然不知道如何让它在 IntelliJ 上工作,因为这样我不知道如何调试它。
推荐阅读
- c# - 在方法中有返回内容的定义的方法中不返回任何内容
- laravel - 如何使用 if 条件计算 v-for 对象
- php - 将数据保存到多态关系laravel中的问题
- flutter - 如何将MD5转换回图像?
- javascript - 在 switch JS Google Chart 中使用输入值
- r - 选择数据框中的特殊行
- flutter - DropdownButtonFormField 没有得到重建
- entity-framework - 从数据库更新模型不更新元数据
- asp.net-mvc - 如何从get中获取数据并将其发布?手柄输入电台类型
- reactjs - 从另一个 ActionCreator 调用一个 ActionCreator