我启动了一个Spring Boot MVC项目,并意识到其中有两个文件夹resources。一个叫templates另一个static。我真的很喜欢这个文件夹设置。
resources
templates
static
问题是我在视图中使用了JSP模板。我无法将.jsp模板放在templates文件夹中并使它工作。我需要做的是建立一个webapp在同一水平上的文件夹src和resources。将我的JSP模板放在那里,然后可以找到我的视图。
.jsp
webapp
src
我需要重新配置以实际使用templates位于其中的文件夹中的JSP模板resources吗?
根据Maven文档, src/main/resources最终将出现WEB-INF/classes在WAR中。
src/main/resources
WEB-INF/classes
这为您的Spring Boot提供了诀窍application.properties:
application.properties
spring.mvc.view.prefix = /WEB-INF/classes/templates spring.mvc.view.suffix = .jsp
如果您更喜欢Java配置,则可以采用以下方法:
@EnableWebMvc @Configuration public class ApplicationConfiguration extends WebMvcConfigurerAdapter { @Bean public ViewResolver jspViewResolver() { InternalResourceViewResolver bean = new InternalResourceViewResolver(); bean.setPrefix("/WEB-INF/classes/templates/"); bean.setSuffix(".jsp"); return bean; } }
更新完整的示例
该示例基于Spring的初始化程序(具有“ Web”依赖性的Gradle项目)。我只是添加apply plugin: 'war'到build.gradle,添加/更改了以下文件,使用构建了这个项目gradle war并将其部署到了我的应用服务器(Tomcat 8)。
apply plugin: 'war'
build.gradle
gradle war
这是此示例项目的目录树:
\---src +---main +---java | \---com | \---example | \---demo | ApplicationConfiguration.java | DemoApplication.java | DemoController.java | \---resources +---static \---templates index.jsp
ApplicationConfiguration.java:参见上文
DemoApplication.java:
@SpringBootApplication public class DemoApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(DemoApplication.class); } public static void main(String[] args) throws Exception { SpringApplication.run(DemoApplication.class, args); } }
DemoController.java:
@Controller public class DemoController { @RequestMapping("/") public String index() { return "index"; } }
index.jsp:
<html> <body> <h1>Hello World</h1> </body> </html>