在服务器上搭建 Java 项目:Tomcat 与 Jetty 配置详解

在 Java 开发领域,Servlet 容器扮演着至关重要的角色。Tomcat 和 Jetty 是两种广泛使用的轻量级和重量级 Servlet 容器,它们能够帮助开发者快速部署和运行 Java Web 应用。本文将深入探讨如何在服务器上搭建 Java 项目,并通过配置 Tomcat 和 Jetty 来实现应用的运行。我们将从环境搭建、项目配置、服务器设置等多个角度进行详细解析,力求为读者提供一套完整且实用的解决方案。

环境准备与依赖管理

在开始搭建之前,我们需要确保服务器环境已经具备运行 Java Web 应用的基本条件。首先,我们需要安装 Java 运行环境(JRE)和 Java 开发工具包(JDK)。可以通过以下命令在 Linux 系统中检查 Java 是否已经安装:

java -version

如果尚未安装,可以从 Oracle 官网下载并安装适合服务器的 JDK 版本。安装完成后,我们还需要配置环境变量 JAVA_HOME 并将其添加到 PATH 中,确保命令行能够识别 javajavac 命令。

接下来,我们需要一个 Java 项目。这里我们以一个简单的 Servlet 应用为例,使用 Maven 作为项目构建工具。在创建项目时,需要在 pom.xml 文件中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </dependency>
</dependencies>

Tomcat 配置详解

Tomcat 是一个开源的 Servlet 容器,被广泛应用于各种 Java Web 应用中。以下是如何在服务器上配置 Tomcat 的详细步骤:

安装与启动 Tomcat

首先,从 Apache Tomcat 官网下载适合服务器的版本,并解压到指定目录。例如:

wget https://downloads.apache.org/tomcat/tomcat-9.0.41/bin/apache-tomcat-9.0.41.tar.gz
tar xzvf apache-tomcat-9.0.41.tar.gz
mv apache-tomcat-9.0.41 /opt/tomcat

启动 Tomcat 服务:

cd /opt/tomcat
./bin/startup.sh

默认情况下,Tomcat 会监听 8080 端口。可以通过 curl 命令检查服务是否正常运行:

curl http://localhost:8080

配置 Tomcat

Tomcat 的核心配置文件是 server.xml,位于 /opt/tomcat/conf 目录下。我们可以通过修改此文件来调整服务器设置,例如:

  1. 修改端口号

    <Connector port="8081" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443" />
  2. 添加 SSL 支持

    <Connector port="8443" protocol="HTTP/1.1"
              clientAuth="false"
              sslProtocol="TLS" />
  3. 设置 JVM 参数

    <Package writeArgs="true" debug="0" stderr="true">
       <ClassPath> каталог 加入 一些类库</ClassPath>
       <Session>
           <Timeout>30</Timeout>
           <DataStore>
               <Type>memory</Type>
           </DataStore>
       </Session>
       <Logger className="org.apache.catalina.session.DocumentedStandardLogger"
               showSessions="false"
              _Valores_0="false"
               showThread="false"/>
       <Loader className="org.apache.catalina.loader.StandardLoader" debug="0"/>
       <Service name="Catalina"/>
       <Connector className="org.apache.catalina.connector.Connector"
                  port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                  maxThreads="150" SSLEnabled="true" acceptCount="100"
                  connectionTimeout="20000" redirectPort="8444"/>
       <Engine name="Catalina" defaultHost="localhost">
           <Host name="localhost" appBase="webapps"
               unpackWARs="true" autoDeploy="true">
               <Context path="/" docBase="/opt/myapp" reloadable="true"/>
           </Host>
       </Engine>
    </Service>
  4. 部署应用

    将编译后的 WAR 包复制到 webapps 目录下,Tomcat 会自动部署并启动应用。

Jetty 配置详解

Jetty 是另一个高性能的 Servlet 容器,具有丰富的 API 和灵活的配置选项。以下是如何在服务器上配置 Jetty 的详细步骤:

安装与启动 Jetty

首先,从 Eclipse Jetty 官网下载适合服务器的版本,并解压到指定目录。例如:

wget https://github.com/jettyopenssl/jetty/releases/downloademarks/jetty-9.4.44.v20200430/jetty-9.4.44.v20200430.tar.gz
tar xzvf jetty-9.4.44.v20200430.tar.gz
mv jetty-9.4.44.v20200430 /opt/jetty

启动 Jetty 服务:

cd /opt/jetty/bin
./startup.sh

默认情况下,Jetty 会监听 8080 端口。可以通过 curl 命令检查服务是否正常运行:

curl http://localhost:8080

配置 Jetty

Jetty 的核心配置文件是 jetty.xml,位于 /opt/jetty/etc 目录下。我们可以通过修改此文件来调整服务器设置,例如:

  1. 修改端口号

    <Set name="port"><SystemProperty name="jetty.port" value="8081"/></Set>
  2. 添加 SSL 支持

    <Connector port="8443" scheme="https" secure="true"
              proxyName="jetty.apache.org" proxyPort="80"/>
  3. 设置 JVM 参数

    <Server port="8080" handler="defaultHandler" JavaArgs="-Xms128m -Xmx1024m">
       <Configure class="org.eclipse.jetty.server.ServerConnector">
           <Set name="port"><SystemProperty name="jetty.port" value="8080"/></Set>
           <Set name="host"><SystemProperty name="jetty.host" value="localhost"/></Set>
           <Set name="clientPort"><SystemProperty name="jetty.clientPort" value="5555"/></Set>
           <Set name="maxIdleTime"><SystemProperty name="jetty.maxIdleTime" value="300000"/></Set>
           <Set name="stopTimeout"><SystemProperty name="jetty.stopTimeout" value="5000"/></Set>
           <Set name="stopAtShutdown"><SystemProperty name="jetty.stopAtShutdown" value="true"/></Set>
           <Set name="securePort"><SystemProperty name="jetty secure port" value="443"/></Set>
           <Set name="stopPort"><SystemProperty name="jetty stop port" value="9999"/></Set>
           <Set name="sendServerVersion"><SystemProperty name="jetty.sendServerVersion" value="false"/></Set>
           <Set name="parmServerTimeZone"><SystemProperty name="jetty parm server TimeZone" value="America/New_York"/></Set>
           <Set name="serverTimeZone"><SystemProperty name="jetty server TimeZone" value="America/New_York"/></Set>
           <Set name="webAppFactoryClass"><SystemProperty name="jetty webAppFactoryClass" value="org.eclipse.jetty.webappichern部署的+)//container*/</pattern>
       </Set>
    </Server>
  4. 部署应用

    将编译后的 WAR 包复制到 /opt/jetty/webapps 目录下,Jetty 会自动部署并启动应用。

对比 Tomcat 与 Jetty

虽然 Tomcat 和 Jetty 都是优秀的 Servlet 容器,但它们在某些方面存在差异:

性能

  • Tomcat 在处理高并发请求时表现优异,特别是在静态资源请求方面。
  • Jetty 在启动速度和资源占用方面更有优势,适合轻量级应用。

易用性

  • Tomcat 拥有庞大的社区支持和丰富的文档资源,学习资源丰富。
  • Jetty 配置更加灵活,但可能需要更多时间来熟悉其配置选项。

功能

  • Tomcat 提供了更完善的插件生态系统,支持多种第三方扩展。
  • Jetty 在嵌入式应用方面表现优异,可以轻松集成到其他应用中。

最佳实践与安全配置

应用安全配置

为了确保应用的安全性,我们需要对 Tomcat 和 Jetty 进行一些安全配置:

  1. 禁用已知漏洞

    • 禁用 JDBC 访问日志:
      
      <GlobalNamingResources>