Java springboot嵌入式tomcat和tomcat嵌入式jasper
我有时会在pom.xml中看到以下声明Java springboot嵌入式tomcat和tomcat嵌入式jasper,java,tomcat,spring-boot,Java,Tomcat,Spring Boot,我有时会在pom.xml中看到以下声明 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
....
org.springframework.boot
SpringBootStarterWeb
javax.servlet
jstl
org.apache.tomcat.embed
汤姆卡特·贾斯珀
假如
....
正如您所看到的,SpringBootStarterWeb也被声明了
就像tomcat嵌入jasper一样
spring boot starter web不是已经有了嵌入式tomcat吗?
为什么一些开发人员仍然声明tomcat嵌入jasper和boot starter web?或者有什么原因吗?正如您所说,
spring boot starter web
包括spring boot starter tomcat
。你可以查一下
springbootstarter-tomcat
包括tomcat嵌入式内核
。你可以查一下
但是,似乎tomcatembeddedcore
不包括tomcatembeddedjasper
。事实上,是tomcatembeddedjasper
谁将依赖项包含在tomcatembeddedcore
中。检查一下
无论如何,tomcat-embed-jasper
被标记为provided
,因此表示您希望JDK或容器在运行时提供依赖关系。此范围仅在编译和测试类路径上可用,并且不可传递
总之,springbootstarterweb
包含tomcat嵌入式依赖项,但不包含jasper嵌入式依赖项,因此应该单独声明它
另外,请记住,使用SpringIO平台作为父级,您可以轻松地管理依赖关系。想知道更多关于这个你
希望能有所帮助,引自jcgarcia的回答 即使提供了它,但当您构建为war时,spring boot maven插件还将包括两个jar: ecj-3.12.3.jar
tomcat-embed-jasper-8.5.23.jar值得补充的是,开发人员之所以要添加
tomcat-embed-jasper
(据我所知,这是问题的一部分),通常是因为他们希望他们的嵌入式tomcat能够编译jsp文件。因为贾斯珀就是这么做的spring boot starter web
不包括tomcat embed jasper
,因此必须单独声明。这也解释了依赖关系。嵌入式Tomcat不需要jasper就可以工作,您仍然可以使用servlet或其他web过滤器。但是jasper当然需要一个容器来编译jsp文件。谢谢你的回答,但是我遵循了你提到的层次结构,但是对我来说,“tomcat嵌入jasper”没有标记为“提供”。请帮助我理解这一点。请注意,SpringBoot建议避免使用JSP作为模板引擎,尽管它支持JSP。有一些已知的JSP限制。请检查并确认。@AshishBurnwal所提供的,他的意思是它被标记为问题本身所提供的。不在链接中引用的实际POM中。