spring-boot-starter-tomcat vs spring-boot-starter-web

时间:2015-10-29 16:32:46

标签: spring tomcat spring-boot

我正在尝试学习Spring启动,我注意到有两种选择。

  1. spring-boot-starter-web - 根据文档提供对全栈Web开发的支持,包括Tomcat和web-mvc

  2. 弹簧引导起动的Tomcat

  3. 由于#1支持Tomcat,为什么要使用#2?

    有什么区别?

    谢谢

2 个答案:

答案 0 :(得分:25)

  

由于#1支持Tomcat,为什么要使用#2?

spring-boot-starter-tomcat包含spring-boot-starter-tomcat。如果不需要spring mvc,则可以单独使用spring-boot-starter-web(包含在spring-boot-starter-web中)。

以下是spring-boot-starter-web的依赖关系层次结构:

enter image description here

  

有什么区别?

spring-boot-starter-tomcat包含spring web依赖项(包括spring-boot-starter):

jackson
spring-core
spring-mvc
spring-boot-starter-tomcat
spring-boot-starter-tomcat

core包含与嵌入式tomcat服务器相关的所有内容:

el
logging
websocket
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>

如果你想在没有嵌入式tomcat服务器的情况下使用spring mvc会怎样?

只需将其从依赖项中排除:

import QtQuick 2.4
import QtQuick.Window 2.2

Window {
    visible: true
    width: 500
    height: 500

    ListModel {
        id: myModel

        ListElement {
            color: "red"
            text: "some interesting information"
        }
        ListElement {
            color: "blue"
            text: "not so interesting information"
        }
        ListElement {
            color: "green"
            text: "and some more information"
        }
    }

    ListView {
        anchors.fill: parent
        interactive: false

        model: myModel
        delegate: Rectangle {
            width: parent.width
            height: 30
            color: model.color
            TextEdit {
                anchors.centerIn: parent
                text: model.text
                selectByMouse: true
            }
        }
    }
}

答案 1 :(得分:5)

一个简单的答案是,并非所有Web应用程序都是SpringMVC应用程序。例如,如果您希望使用JaxRS,或许您有使用RestTemplate的客户端应用程序,并且您喜欢它们如何交互,那么它并不意味着您不能使用spring boot或嵌入式tomcat

以下是使用spring-boot-starter-tomcat但不使用spring-boot-starter-web

的示例应用程序

使用spring-boot-starter-tomcat

在春季启动时使用简单的Jersey应用程序
  

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-jersey

记住tomcat不是Spring引导中嵌入式servlet容器的唯一选择也很重要。使用码头也很容易上手。使用spring-boot-starter-tomcat可以轻松地将所有模块排除在一个模块中,而如果它们只是spring-web的一部分,则排除tomcat库以引入spring-boot-starter-jersey而不是

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

我在这里从另一个SO问题复制了这段代码。

  

How to configure Jetty in spring-boot (easily?)