我总是自己构建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
它返回这个:
这当然是一个意想不到的结果。
我想出了如何使它工作。我必须在我的macOS上安装maven,然后运行以下命令以删除目标文件夹、编译代码并打包它(在我的例子中是JAR格式)。
mvn clean package spring-boot:repackage
在此之后,我可以使用以下命令执行JAR文件:
java -jar target/file_name.jar
此时(如果一切顺利的话),我的网络应用程序现在正在localhost:8080上运行。我仍然不知道如何让它在IntelliJ上工作,因为这样我就不知道如何调试它。