Java springboot嵌入式tomcat和tomcat嵌入式jasper

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>

我有时会在pom.xml中看到以下声明

   <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中。