到处都写着Spring boot不支持jsp视图。在其官方文件中有三个原因
对于第一项,“使用可执行jar时不支持JSP”。但当我添加对tomcat的引用时,嵌入jasper并在应用程序中设置正确的资源路径。属性,也可以很好地呈现jsp文件。
我想这可能意味着SpringBoot在不涉及其他引用库(如TomcatEmbedJasper)的情况下不支持jsp。
但对于百里香,我们还必须进口Spring启动百里香。为什么我们可以说Spring boot支持包含额外LIB的Lif。
那么我如何理解文档中的第一项呢?
如果您选择使用JSP。事实证明,Java servlet容器(包括嵌入式Tomcat和Jetty容器)通常在/WEB-INF下的某个位置查找JSP。但如果您将应用程序构建为可执行JAR文件,则无法满足该要求。因此,只有将应用程序构建为WAR文件并将其部署在传统servlet容器中时,JSP才是一个选项。如果您正在构建一个可执行的JAR文件,那么必须选择Thymeleaf、FreeMarker或其他选项之一
谢谢罗宾·孙,
我加入了pomorg。阿帕奇。公猫嵌入:tomcat嵌入jasper
并编译。war
和我的docker图像可以识别我的JSP
嵌入式Tomcat包(在springboot中用于创建可执行jar)默认情况下不包含JSP,我们还必须添加模块org.apache.Tomcat.embed:Tomcat-embed-jasper“。这就是我们在springboot中添加tomcat嵌入jasper
作为依赖项的原因,这样我们就可以在jsp中使用jstl标记。
当使用*jar
作为打包时,springboot不能正确使用jsp作为视图解析器的主要原因是Tomcat中的硬编码文件模式。问题是,当您使用java-*。jar
要部署springboot应用程序,jsp文件将不会出现在嵌入式tomcat中,并且在尝试为请求提供服务时,您将得到一个找不到的404页面。这是因为jar打包,jsp文件没有从WEB-INF
文件夹中复制。如果在使用jar作为打包时将jsp文件保存在META-INF/resources
文件夹下,它应该可以工作。
Thymeleaf允许使用模板作为原型,这意味着它们可以作为静态文件查看,并放入resources/templates
文件夹中供spring拾取。但是jsp文件将具有jstl标记等,需要在呈现之前由jasper进行传输,因此据我所知,它们不能设置为静态文件。
当使用WAR(WebApplication归档)时,打包将自动从以下项目结构中获取资源:
|-- 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的指南和官方示例:指南,示例Repo
WAR打包结构坚持将jsp文件保存在webapp/
文件夹下,它将按预期工作。maven war目标将文件从webapp文件夹复制到WEB-INF
,所有资源文件(如jsp)都将位于war打包的根目录下。从这里开始,maven重新打包目标或spring boot重新打包负责使jar/war可执行。因此,如果文件出现在原始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
,则放入此目录的任何内容都将根据WAR文档自动复制到WEB-INF/classes
。
因此,如果您将jsp文件保存在src/main/resources下,并在yml或属性文件中配置以下内容,那么它应该适用于WAR归档。我还没试过,所以不确定。
spring.mvc.view.prefix = /WEB-INF/classes/templates
spring.mvc.view.suffix = .jsp
我已经为Android开发了几个月了,这个问题一次又一次地出现:在没有标准SDK中提供的情况下,添加全新特性(API)来支持库的动机是什么? 示例: FragmentTabHost API仅可通过使用。大多数情况下都很好,但是如果您想同时使用碎片嵌套和PreferenceFragment,您就会陷入困境--嵌套需要您切换到(用于支持4.2以下的版本),但是在这个支持库中没有PreferenceFr
本文向大家介绍Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?相关面试题,主要包含被问及Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?时的应答技巧和注意事项,需要的朋友参考一下 Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加 载,association 指的就是一对一,collection 指的就是一对多查询
Python中的字符串是不可变的,这意味着该值不能更改。但是,在以下示例中,当附加到字符串时,由于id保持不变,看起来原始字符串内存被修改了: 相反,在以下示例中,id更改:
我要求在JSF2.2页面上输入2个输入值。我们正在使用Primefaces控件。然后通过h:command按钮将这些值提交给托管bean方法。 然后,基于这些值,我想将同一JSF页面上的一个单独的输出字段设置为一个特定的值。 因此,我目前的问题是尝试连接一个托管bean,以便它将一个值返回到我的JSF页面上的字段,在本例中,字段名是mgrs。主要的问题是,我要处理的是生成返回值的第三方库,我不确定
本文向大家介绍topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?相关面试题,主要包含被问及topic的分区数可不可以增加?如果可以怎么增加?如果不可以,那又是为什么?时的应答技巧和注意事项,需要的朋友参考一下 可以增加 bin/kafka-topics.sh --zookeeper localhost:2181/kafka --alter --topic topic-co