嵌入式 Tomcat

来源:这里教程网 时间:2026-02-17 21:37:16 作者:

在本教程中,我们将展示如何与嵌入式 Tomcat 服务器一起使用。 Tomcat 可以在嵌入式模式下运行; 这意味着无需构建 WAR 文件并将其部署在独立的 Tomcat 服务器中。 本教程中的示例是使用 Maven 构建的。

Tomcat

Apache Tomcat 是 Java Servlet,JavaServer Pages,Java Expression Language 和 Java WebSocket 技术的开源实现。

Apache Maven 是一个软件项目管理和理解工具。 该项目在名为pom.xml的 XML 文件中描述。 它包含对其他外部模块和组件的项目依赖关系,构建顺序,目录和所需的插件。

创建一个 servlet

在下面的示例中,我们创建一个带有嵌入式 Tomcat 服务器的命令行 Java 应用。 该应用附加一个简单的 servlet。

该图显示了 NetBeans 中的项目结构。 注意,我们使用的是 Java Maven 控制台应用,而不是 Maven Web 应用。

pom.xml

<?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>

Maven pom.xml包含嵌入式 Tomcat 服务器和用于构建应用的汇编程序插件的依赖项。 由于我们只有 Servlet,因此 JSP 容器的依赖关系未包含在此应用中。

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 控制台应用,其中包括嵌入式 Tomcat 服务器。

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

Tomcat 在端口 8082 上启动。默认端口为 8080;默认端口为 8080。 NetBeans 将 8084 用于其内置的 Tomcat 服务器。 我们选择了另一个端口,以免发生冲突。

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

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

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();    }});

通过addServlet()方法添加了一个新的 servlet。 该 servlet 仅以一些 ASCII 文本作为响应。

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

servlet 映射控制如何访问名为 Embedded 的 servlet。 对于我们的示例,所有 URL 最终都会调用我们的 servlet。

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

Tomcat 服务器已启动。

$ curl localhost:8082/Embedded Tomcat servlet.

我们运行该应用并使用curl工具对其进行测试。

JSP 文件

在第二个示例中,我们使用嵌入式 Tomcat 服务器来提供 JSP 文件。

pom.xml

<?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>EmbeddedTomcatEx2</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>        <dependency>            <groupId>org.apache.tomcat</groupId>            <artifactId>tomcat-jasper</artifactId>            <version>{tomcat.version}</version>        </dependency>        <dependency>            <groupId>org.apache.tomcat</groupId>            <artifactId>tomcat-jasper-el</artifactId>            <version>{tomcat.version}</version>        </dependency>        <dependency>            <groupId>org.apache.tomcat</groupId>            <artifactId>tomcat-jsp-api</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.EmbeddedTomcatEx2</mainClass>                            <name>webapp</name>                        </program>                    </programs>                </configuration>                <executions>                    <execution>                        <phase>package</phase>                        <goals>                            <goal>assemble</goal>                        </goals>                    </execution>                </executions>            </plugin>        </plugins>        </build>    <name>EmbeddedTomcatEx2</name></project>

在此pom.xml文件中,我们还包括嵌入式 Tomcat JSP 容器的依赖项:tomcat-jasper,tomcat-jasper-el和tomcat-jsp-api。

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE html><html>    <head>        <title>JSP file</title>        <meta charset="UTF-8">    </head>    <body>        <p>            This is a simple JSP file.                    </p>    </body></html>

这是嵌入式 Tomcat 服务器提供的简单 JSP 文件。

EmbeddedTomcatEx2.java

package com.zetcode.embedded;import javax.servlet.ServletException;import java.io.File;import org.apache.catalina.LifecycleException;import org.apache.catalina.startup.Tomcat;public class EmbeddedTomcatEx2 {    public static void main(String[] args) throws LifecycleException,            InterruptedException, ServletException {        String docBase = "src/main/webapp/";        Tomcat tomcat = new Tomcat();        tomcat.setPort(8082);        tomcat.addWebapp("/", new File(docBase).getAbsolutePath());        tomcat.start();        tomcat.getServer().await();    }}

该应用提供一个 JSP 文件。 该文件位于src/main/webapp子目录中。

tomcat.addWebapp("/", new File(docBase).getAbsolutePath());

这次我们使用addWebapp()将应用添加到 Tomcat 服务器。

$ curl localhost:8082/<!DOCTYPE html><html>    <head>        <title>JSP file</title>        <meta charset="UTF-8">    </head>    <body>        <p>            This is a simple JSP file.                    </p>    </body></html>

当我们访问应用时,我们得到了这个。

这是嵌入式 Tomcat 教程。 使用嵌入式 Tomcat,我们提供了一个 servlet 和一个 JSP 文件。 我们已经使用了 Apache Tomcat,Maven 和 NetBeans。

这是嵌入式 Tomcat 教程。使用嵌入式 Tomcat,我们提供了一个 servlet 和一个 JSP 文件。 我们已经使用了 Apache Tomcat,Maven 和 NetBeans。 您可能也对以下相关教程感兴趣:Java Servlet 读取网页Java Servlet 上传文件Java Log4j 教程Java Servlet RESTful 客户端Java servlet 图像教程Java 教程

相关推荐