默认情况下,嵌入式Tomcat软件包(在springboot中用于创建可执行jar)不包含JSP,因此我们还必须添加该模块
“org.apache.tomcat.embed:tomcat-embed-jasper”,这就是我们
tomcat-embed-jasper在springboot
中添加为依赖项的原因,以便可以使用jstl标记在jsp中。
当将springboot
*jar用作打包时,springboot无法与jsp作为视图解析器一起正常工作的主要原因是由于 Tomcat 中使用
了硬编码的文件模式 。问题是,当您
java-*.jar用于部署springboot应用程序时,jsp文件不会出现在嵌入式tomcat中,并且在尝试满足请求时,您将获得 404 PAGE NOT
FOUND 。这是因为jar打包,所以不会从
WEB-INF文件夹中复制jsp文件。如果
meta-INF/resources使用jar打包时将jsp文件保留在文件夹下,则应该可以。
Thymeleaf允许将模板用作原型,这意味着可以将它们视为静态文件并放在
resources/templates文件夹中以供spring使用。但是jsp文件将具有jstl标记等,在呈现之前需要jasper对其进行编译,因此无法将其设置为据我所知静态文件。
使用 WAR (Web应用程序归档文件)时,打包将自动从以下项目结构中获取资源:
|-- pom.xml `-- src `-- main |-- java | `-- com | `-- example |`-- projects | `-- SampleAction.java |-- resources | `-- images | `-- sampleimage.jpg `-- webapp |-- WEB-INF | `-- web.xml |-- index.jsp `-- jsp `-- websource.jsp
在jsp中使用springboot的指南和官方样本:Guide,示例仓库
WAR打包结构坚持将jsp文件保存在
webapp/文件夹下,并且它将按预期工作。maven war目标会将文件从webapp文件夹复制到
WEB-INF,所有资源文件(如jsp)将位于war包装的根目录。从此处开始,maven-repackage目标或spring boot重新包装将负责制作jar
/ war可执行文件,因此,如果这些文件存在于原始war中,它也将位于可执行文件中。springboot 可执行war结构 如下所示:
example.war | +-meta-INF | +-MANIFEST.MF +-org | +-springframework | +-boot | +-loader |+-<spring boot loader classes> +-WEB-INF +-classes | +-com | +-mycompany | +-project |+-YourClasses.class +-lib | +-dependency1.jar | +-dependency2.jar +-lib-provided +-servlet-api.jar +-dependency3.jar
因此,对于评论:
如果将jsp文件放在文件夹中
src/main/resources,则
WEB-INF/classes根据 WAR
文档,该目录中的所有内容都将自动复制到。
因此,如果将jsp文件保存在src / main /
resources下并在yml或属性文件中配置以下内容,则该文件应可用于WAR存档。我还没有尝试过,所以不确定。
spring.mvc.view.prefix = /WEB-INF/classes/templatesspring.mvc.view.suffix = .jsp



