根据 Maven 文档src/main/resources
,最终会出现在WEB-INF/classes
WAR 中。
这在您的 Spring Boot 中起到了作用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)。
这是此示例项目的目录树:
\---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>
官方资料:
资源处理:
由于 ResourceUrlEncodingFilter 为 Thymeleaf 和 FreeMarker 自动配置,资源链接在运行时在模板中重写。您应该在使用 JSP 时手动声明此过滤器。来源
支持的模板引擎
除了REST Web服务,您还可以使用 Spring MVC 来提供动态 HTML 内容。Spring MVC 支持多种模板技术,包括 Thymeleaf、FreeMarker 和 JSP。
[...]
如果可能,应避免使用 JSP,将它们与嵌入式 servlet 容器一起使用时有几个已知的限制。
[..]
当您使用默认配置的这些模板引擎之一时,您的模板将自动从 src/main/resources/templates 中获取。
来源
Spring Boot JSP 限制
- 使用 Tomcat,如果您使用 war 打包,它应该可以工作,即可执行的 war 可以工作,并且还可以部署到标准
容器(不限于,但包括 Tomcat)。- 由于 Tomcat 中的硬编码文件模式,可执行 jar 将无法工作。
- 使用 Jetty,如果您使用 war 打包,它应该可以工作,即可执行的 war 可以工作,并且也可以部署到任何标准容器。
- Undertow 不支持 JSP。
- 创建自定义 error.jsp 页面不会覆盖错误处理的默认视图,应改为使用自定义错误页面。
来源
技术变化
告诉 spring boot 从哪里加载JSP files
. 在application.properties
集合
spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .jsp
来源
使用 JSP 的示例 Spring Boot
如果您确实想JSP
与 spring boot 一起使用,这里有两个示例:
https://github.com/joakime/spring-boot-jsp-demo
总而言之,到目前为止,没有一个建议的答案对我有用。使用一个空白的 Spring Boot 启动项目。
不知何故,某些东西在 Spring 或 servlet 中看起来是硬连线的,因此 JSP必须位于/webapp
(或子文件夹)中。与在/resources/templates
.
我尝试了各种更改,实际上是很多不同的配置,但无法修改该行为。它只是产生了复杂性,无法再为 JSP 提供服务。所以,最重要的是,如果您使用 JSP,只需将它们放入/webapp
. 它还可以通过使用以下控制器添加零配置来工作:
@GetMapping("/foo") public String serveFoo() { return "relative-path-inside-webapp/foo.jsp"; }
另一方面,默认情况下,该/webapp
文件夹也将隐藏在 Spring 工具套件中,因此您必须手动将其配置为“源文件夹”。