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

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

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

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

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

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

创建一个返回hello world的程序

maven依赖



    4.0.0
    com.zetcode
    EmbeddedTomcatEx
    1.0-SNAPSHOT
    jar
    
        UTF-8
        1.8
        1.8
        9.0.0.M6
    
    
        
            javax.servlet
            javax.servlet-api
            3.1.0
                 
        
            org.apache.tomcat.embed
            tomcat-embed-core
            ${tomcat.version}
        
        
            org.apache.tomcat.embed
            tomcat-embed-logging-juli
            ${tomcat.version}
        
        
        
        
            
                org.codehaus.mojo
                appassembler-maven-plugin
                1.1.1
                
                    target
                    
                        
com.zetcode.embedded.EmbeddedTomcatEx
                            webapp
                        
                    
                
                
                    
                        package
                        
                            assemble
                        
                    
                
            
            
    

这个 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)