以编程方式创建、配置和运行Tomcat服务器

2025/03/28

1. 概述

在这篇简短的文章中,我们将以编程方式创建、配置和运行Tomcat服务器

2. 设置

在开始之前,我们需要通过向pom.xml添加以下依赖来设置我们的Maven项目:

<dependencies>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-catalina</artifactId>
        <version>${tomcat.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>${apache.httpclient}</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

这是Maven Central链接,其中包含项目中使用的依赖的最新版本。

3. 初始化并配置Tomcat

我们先来谈谈初始化和配置Tomcat服务器所需的步骤。

3.1 创建Tomcat

我们可以通过以下简单的操作来创建一个实例:

Tomcat tomcat = new Tomcat();

现在我们有了服务器,让我们来配置它。

3.2 配置Tomcat

我们将重点介绍如何启动并运行服务器,并添加Servlet和过滤器。

首先,我们需要配置端口、主机名和appBase(通常是Web应用)。为了达到我们的目的,我们将使用当前目录:

tomcat.setPort(8080);
tomcat.setHostname("localhost");
String appBase = ".";
tomcat.getHost().setAppBase(appBase);

接下来,我们需要设置一个docBase(此Web应用程序的上下文根目录):

File docBase = new File(System.getProperty("java.io.tmpdir"));
Context context = tomcat.addContext("", docBase.getAbsolutePath());

至此,我们的Tomcat几乎可以正常运行。

接下来,我们将添加一个Servlet和一个过滤器并启动服务器以查看它是否正常运行。

3.3 将Servlet添加到Tomcat上下文

接下来,我们将向HttpServletResponse添加一个简单的文本,这是我们访问此Servlet的URL映射时将显示的文本。

首先让我们定义Servlet:

public class MyServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setStatus(HttpServletResponse.SC_OK);
        resp.getWriter().write("test");
        resp.getWriter().flush();
        resp.getWriter().close();
    }
}

现在我们将这个Servlet添加到Tomcat服务器:

Class servletClass = MyServlet.class;
Tomcat.addServlet(context, servletClass.getSimpleName(), servletClass.getName());
context.addServletMappingDecoded("/my-servlet/*", servletClass.getSimpleName());

3.4 向Tomcat上下文添加过滤器

接下来我们定义一个过滤器并将其添加到Tomcat:

public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) {
        // ...
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        httpResponse.addHeader("myHeader", "myHeaderValue");
        chain.doFilter(request, httpResponse);
    }

    @Override
    public void destroy() {
        // ...
    }
}

将过滤器添加到上下文需要做更多的工作:

Class filterClass = MyFilter.class;
FilterDef myFilterDef = new FilterDef();
myFilterDef.setFilterClass(filterClass.getName());
myFilterDef.setFilterName(filterClass.getSimpleName());
context.addFilterDef(myFilterDef);

FilterMap myFilterMap = new FilterMap();
myFilterMap.setFilterName(filterClass.getSimpleName());
myFilterMap.addURLPattern("/my-servlet/*");
context.addFilterMap(myFilterMap);

此时,我们应该已经将一个Servlet和一个过滤器添加到了Tomcat。

剩下要做的就是启动它并获取“test”页面并检查日志以查看过滤器是否有效。

4. 启动Tomcat

这是一个非常简单的操作,之后我们应该看到Tomcat正在运行:

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

一旦启动,我们可以访问http://localhost:8080/my-servlet并查看测试页面:

如果我们查看日志,我们会看到类似这样的内容:

这些日志表明Tomcat开始监听端口8080,并且我们的过滤器运行正常。

5. 总结

在本教程中,我们介绍了Tomcat服务器的基本程序设置。

我们研究了如何创建、配置和运行服务器,还研究了如何以编程方式向Tomcat上下文添加Servlet和Filter。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章