当前位置: 首页 > 知识库问答 >
问题:

Spring boot是否将resources templates文件夹与JSP模板一起使用,而不是webapp文件夹?

云骏奇
2023-03-14

我开始了一个Spring Boot MVC项目,意识到资源中有两个文件夹。一个叫做模板,另一个叫做静态。我真的很喜欢这个文件夹设置。

问题是我的视图使用了JSP模板。我无法将. jsp模板放在模板文件夹中并使其工作。我需要做的是在与src资源相同的级别上创建一个webapp文件夹。将我的JSP模板放在那里,然后可以找到我的视图。

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


共有3个答案

徐兴昌
2023-03-14

总而言之,到目前为止,所有建议的答案都不适合我。使用空白的Spring boot starter项目。

不知何故,Spring或Servlet内部看起来有些东西是硬连线的,因此JSP必须位于webapp(或子文件夹)中。与默认的thymeleaf模板不同,默认的thymeleaf模板在资源/模板中查找。

我尝试了各种各样的改变,真的有很多不同的配置,但无法修改这种行为。它只是产生了复杂性,无法再为JSP服务。所以,底线是,如果您使用JSP,只需将它们放在Web应用程序中即可。它还可以使用以下控制器添加零配置:

@GetMapping(“/foo”)公共字符串serveFoo(){return“webapp/foo.jsp内的相对路径”;}

另一方面,默认情况下,/webapp文件夹也将隐藏在Spring ToolSuite中,因此您必须手动将其配置为“源文件夹”。

狄宪
2023-03-14

由于为Thymeleaf和FreeMarker自动配置的ResourceUrlEncodingFilter,到资源的链接在运行时在模板中重写。在使用JSP时,应该手动声明此过滤器。来源

除了REST Web服务,您还可以使用Spring MVC提供动态超文本标记语言内容。Spring MVC支持多种模板技术,包括Thymeleaf、FreeMarker和JSP。

[...]

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

[..]

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

来源

  • 使用Tomcat,如果您使用war打包,它应该可以工作,即可执行war将起作用,并且也可以部署到标准
    容器(不限于,但包括Tomcat)。
  • 由于Tomcat中的硬编码文件模式,可执行jar将无法工作。
  • 使用Jetty,如果您使用war打包,它应该可以工作,即可执行war将起作用,并且也可以部署到任何标准容器。
  • Undertow不支持JSP。
  • 创建自定义error.jsp页面不会覆盖错误处理的默认视图,应改用自定义错误页面。

来源

告诉spring boot从哪里加载JSP文件。在应用程序中。属性集

spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .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

高和通
2023-03-14

根据Maven文档,在战争中,src/main/resources将最终出现在WEB-INF/classes中。

这就完成了应用程序中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项目)。我刚刚在构建中添加了应用插件:“war”。gradle,添加/更改了下面的文件,用gradle war构建了项目,并将其部署到我的应用服务器(Tomcat 8)。

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

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

应用程序配置。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";
    }
}

指数jsp:

<html>
    <body>
        <h1>Hello World</h1>
    </body>
</html>
 类似资料:
  • 我是新春尝试简单的webapp。 使用springboot 2.1.0application.properties如下文件。我在src/main/webapp/WEB-INF/jsp中有jsp文件 我的控制器是。 当我将jsp文件放在/main/resources/META-INF/resources/WEB-INF/jsp中时,它可以正常工作,否则会出现以下错误 pom还具有tomcat嵌入ja

  • 文件:/springboot1_firstwebapp/pom.xml

  • 问题内容: 我正在尝试使用Django,并弄清楚如何设置urls.py以及URL如何工作。我已经在项目的根目录中配置了urls.py,以定向到我的博客和管理员。但是,现在我想在首页添加一个页面,所以在。 因此,我在项目根目录的urls.py中添加了以下代码: 问题是它在blog / templates / …中搜索模板, 而不是在我的根目录中搜索template文件夹。其中包含base.html。

  • 我无法让DevOps使用文件夹进行部署,它向我显示以下错误: [错误]错误:未找到具有指定模式的包:d:\a\1\a*。deploy.cmd 检查任务中提到的包是作为构建中的工件发布的,还是作为先前阶段发布并在当前作业中下载的。 Azure App Service Deploy任务文档说明了有关Package参数的以下内容: 包的文件路径,或者包含由MSBuild生成的应用服务内容的文件夹的路径,

  • 问题内容: 我对linux和svn相当陌生。我正在尝试使用此命令(在public_html中)将项目的主干文件夹检出到我的public_html目录中: waterproject目录包含解开基本安装的drupal的文件。 除了所有文件都位于而不是仅位于中,它可以很好地进行检出。 我不知道将主干的所有内容上移到public_html和rm trunk的命令,但是我认为我可以相对容易地解决这一问题。我

  • 你好,我是一个很新的一大口。问题是当我用命令“gulp”运行默认任务时,scss文件没有编译,而是复制到css文件夹这是我的gulpfile.js