Spring启动使用资源模板文件夹与JSP模板而不是webapp文件夹?

xet*_*a11 17 spring templates jsp spring-mvc spring-boot

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

问题是我在我的视图中使用JSP模板.我无法.jsptemplates文件夹中放置模板并使其工作.我需要做的是创建一个webappsrc和相同级别的文件夹resources.将JSP模板放在那里,然后找到我的视图.

我需要重新配置以在其中的templates文件夹中实际使用我的JSP模板resources

Fra*_*ner 14

根据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
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢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;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新完整的示例

此示例基于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
Run Code Online (Sandbox Code Playgroud)

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

DemoController.java:

@Controller
public class DemoController {

    @RequestMapping("/")
    public String index() {
        return "index";
    }
}
Run Code Online (Sandbox Code Playgroud)

的index.jsp:

<html>
    <body>
        <h1>Hello World</h1>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)


oak*_*oak 6

官方信息:

资源处理:

借助为Thymeleaf和FreeMarker自动配置的ResourceUrlEncodingFilter,可以在运行时在模板中重写资源链接.您应该在使用JSP时手动声明此过滤器. 资源

支持的模板引擎

除REST Web服务外,您还可以使用Spring MVC来提供动态HTML内容.Spring MVC支持各种模板技术,包括Thymeleaf,FreeMarker和JSP.

[...]

如果可能,应该避免使用JSP,将它们与嵌入式servlet容器一起使用时有几个已知的限制.

[..]

当您使用其中一个模板引擎和默认配置时,您的模板将自动从src/main/resources/templates中获取.

资源

Spring启动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
Run Code Online (Sandbox Code Playgroud)

资源

使用JSP进行Spring引导示例

如果你想使用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

  • 我认为这个答案在灌木丛中肆虐.问题不是使用/显示JSP.OP明确表示他已经可以做到这一点.它是将Spring配置为使用标准的`templates`文件夹来查找JSP而不是通过使用`webapp/WEB-INF`来"绕过"查找机制.从你的答案来看,我仍然不清楚如何这样做.第一个例子从`webapp`目录中取出它们,第二个例子使用特殊的`META-INF` /`WEB-INF`组合.它与OP已经做的类似.如何从`templates`直接获取它们仍然没有答案. (3认同)