Spring Boot 使用带有 JSP 模板的资源模板文件夹而不是 webapp 文件夹?

新手上路,请多包涵

我启动了一个 Spring Boot MVC 项目并意识到 resources 中有两个文件夹。一个叫做 templates 和另一个 static 。我真的很喜欢这个文件夹设置。

问题是我的视图使用 JSP 模板。我无法在 templates 文件夹中放置一个 .jsp 模板并让它工作。我需要做的是创建一个 webappsrcresources 级别相同的文件夹。将我的 JSP 模板放在那里,然后可以找到我的视图。

我需要重新配置什么才能在 resourcestemplates 文件夹中实际使用我的 JSP 模板?

原文由 xetra11 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 498
2 个回答

根据 Maven 文档 src/main/resources 将在 WAR 中以 WEB-INF/classes 结束。

这在您的 application.properties 中为 Spring Boot 提供了诀窍:

 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 构建了项目并将其部署到我的应用程序服务器。

这是此示例项目的目录树:

 \---src
    +---main
        +---java
        |   \---com
        |       \---example
        |           \---demo
        |                   ApplicationConfiguration.java
        |                   DemoApplication.java
        |                   DemoController.java
        |
        \---resources
            +---static
            \---templates
                    index.jsp

ApplicationConfiguration.java:见上文

演示应用程序.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);
    }

}

演示控制器.java:

 @Controller
public class DemoController {

    @RequestMapping("/")
    public String index() {
        return "index";
    }
}

index.jsp:

 <html>
    <body>
        <h1>Hello World</h1>
    </body>
</html>

原文由 Franz Fellner 发布,翻译遵循 CC BY-SA 3.0 许可协议

官方资料:

资源处理:

由于 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 与弹簧靴一起使用,这里有两个示例:

https://github.com/spring-projects/spring-boot/tree/v1.5.9.RELEASE/spring-boot-samples/spring-boot-sample-web-jsp

https://github.com/joakime/spring-boot-jsp-demo

原文由 oak 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题