美文网首页
【翻译】了解spring boot 使用的嵌入式Tomcat

【翻译】了解spring boot 使用的嵌入式Tomcat

作者: wine_5664 | 来源:发表于2019-08-06 11:35 被阅读0次

http://zetcode.com/web/embeddedtomcat/

在本教程中,我们将展示如何使用嵌入式Tomcat服务器。

Tomcat可以在嵌入式模式下运行;

  • 这意味着不需要构建一个WAR文件并将其部署到独立的Tomcat服务器中
  • spring boot 正是使用了嵌入式的Tomcat

本教程中的示例是用Maven构建的。

创建一个返回hello world的程序

maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.zetcode</groupId>
    <artifactId>EmbeddedTomcatEx</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <tomcat.version>9.0.0.M6</tomcat.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>         
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-logging-juli</artifactId>
            <version>${tomcat.version}</version>
        </dependency>
    </dependencies>    
    <build>    
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>1.1.1</version>
                <configuration>
                    <assembleDirectory>target</assembleDirectory>
                    <programs>
                        <program>
<mainClass>com.zetcode.embedded.EmbeddedTomcatEx</mainClass>
                            <name>webapp</name>
                        </program>
                    </programs>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>assemble</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>    
    </build>
</project>

这个 pom.xml 包含对嵌入式Tomcat的依赖和构建应用程序的编译插件的依赖。
它不包含JSP的maven依赖,因为我们只需要一个返回“hello world”字符串的servlet

代码示例 EmbeddedTomcatEx.java

package com.zetcode.embedded;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;

public class EmbeddedTomcatEx {

    public static void main(String[] args) throws LifecycleException,
            InterruptedException, ServletException {

        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8082);

        Context ctx = tomcat.addContext("/", new File(".").getAbsolutePath());

        Tomcat.addServlet(ctx, "Embedded", new HttpServlet() {
            @Override
            protected void service(HttpServletRequest req, HttpServletResponse resp) 
                    throws ServletException, IOException {
                
                Writer w = resp.getWriter();
                w.write("Embedded Tomcat servlet.\n");
                w.flush();
                w.close();
            }
        });

        ctx.addServletMapping("/*", "Embedded");

        tomcat.start();
        tomcat.getServer().await();
    }
}

EmbeddedTomcatEx是一个Java控制台应用程序,其中main中启动了一个嵌入式Tomcat服务器。

Tomcat tomcat = new Tomcat();
tomcat.setPort(8082);

Tomcat在端口8082上启动。

Context ctx = tomcat.addContext("/", new File(".").getAbsolutePath());

每个应用程序都映射到一个上下文。使用addContext()方法,我们创建了一个不支持JSP文件且没有web.xml文件的应用程序。我们使用根上下文路径和当前工作目录作为document base

Tomcat.addServlet(ctx, "Embedded", new HttpServlet() {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) 
            throws ServletException, IOException {
        
        Writer w = resp.getWriter();
        w.write("hello world!Embedded Tomcat servlet.\n");
        w.flush();
        w.close();
    }
});

使用addServlet()方法添加一个名为Embedded的新的servlet。servlet只是用一些ASCII文本进行响应。

ctx.addServletMapping("/*", "Embedded");

添加一个对Embedded访问映射。"/*"指访问本机8082端口中的任何url都会调用Embedded

tomcat.start();
tomcat.getServer().await();

启动Tomcat服务器。

测试

这里在终端用curl进行测试,也可以用浏览器测试

$ curl localhost:8082/

终端将会输出hello world字符串

hello world!Embedded Tomcat servlet.

相关文章

网友评论

      本文标题:【翻译】了解spring boot 使用的嵌入式Tomcat

      本文链接:https://www.haomeiwen.com/subject/enkidctx.html