基本管理
最后修改于 2024 年 1 月 27 日
Jetty 教程的这部分介绍了 Jetty 的基本管理和配置。
首先,我们需要设置好基本的 Jetty 环境变量。环境变量在系统范围的 /etc/environment
文件或用户的 .profile
或 .bashrc
(Bash shell) 文件中设置。
$ echo $JETTY_HOME /home/janbodnar/bin/jetty $ echo $JETTY_BASE /home/janbodnar/prog/jetty/my-base
现在,我们可以在命令中引用 Jetty 主目录和 Jetty 基础目录这两个变量。
Jetty 基础目录
Jetty 基础目录是我们自定义的 Jetty 环境,我们在此放置自己的配置文件、日志,以及部署目录。部署目录的默认名称是 webapps
。
要创建 Jetty 基础目录,我们创建一个新目录,并使用 start.jar
命令启用必要的模块。然后从该目录启动 Jetty。或者,我们将 jetty.base
属性指定为命令行选项。
$ cd $JETTY_BASE $ java -jar $JETTY_HOME/start.jar
这两个命令从 Jetty 基础目录启动 Jetty。Jetty 会自动加载位于该目录的配置文件 — start.ini
文件,以及可选的位于 resources
、modules
和 etc
子目录中的文件。
$ java -jar $JETTY_HOME/start.jar jetty.base=$JETTY_BASE
如果我们不在 Jetty 基础目录中,可以通过指定 jetty.base
命令行选项来启用 Jetty 基础环境。
start.jar 命令
位于 Jetty 主目录中的 start.jar
工具用于启动 Jetty、提供信息以及执行一些配置设置。
$ java -jar $JETTY_HOME/start.jar --help
--help
选项会打印当前命令行选项列表和一些基本用法帮助。
$ ls -l $JETTY_BASE total 0 $ cd $JETTY_BASE $ java -jar $JETTY_HOME/start.jar --add-to-start=deploy,http INFO: deploy initialised in ${jetty.base}/start.ini (appended) MKDIR: ${jetty.base}/webapps INFO: webapp initialised transitively INFO: servlet initialised transitively INFO: security initialised transitively INFO: server initialised transitively INFO: http initialised in ${jetty.base}/start.ini (appended) INFO: server initialised transitively $ ls start.ini webapps
Jetty 是一个高度模块化的系统。--add-to-start
选项通过将 Jetty 模块追加到 ${jetty.base}/start.ini 文件中来启用它们。该命令启用了 deploy 和 HTTP 模块,以及它们所依赖的模块。该命令还创建了 start.ini
文件和 webapps 部署目录。start.ini
文件在启动时被 Jetty 加载。
$ java -jar $JETTY_HOME/start.jar --list-modules ... Jetty Active Module Tree: ------------------------- + Module: server [enabled] + Module: http [enabled] + Module: security [enabled] + Module: servlet [enabled] + Module: webapp [enabled] + Module: deploy [enabled] ...
这里我们看到 --list-modules
选项的部分输出。它列出了所有可用的 Jetty 模块 — 活动的和非活动的。
$ java -jar $JETTY_HOME/start.jar --list-config ... Jetty Active XMLs: ------------------ ${jetty.home}/etc/jetty.xml ${jetty.home}/etc/jetty-http.xml ${jetty.home}/etc/jetty-deploy.xml
--list-config
选项会列出配置设置,包括 Java 和 Jetty 环境、JVM 参数、属性、Server 类路径以及 XML 配置文件。部分输出显示了 Jetty 加载的活动 XML 配置文件。
部署目录
部署目录是我们部署 WAR 文件的目录。该目录的默认名称是 webapps。该目录位于 Jetty 主目录和 Jetty 基础目录中。
... <Set name="monitoredDirName"><Property name="jetty.base" default="." />/ <Property name="jetty.deploy.monitoredDirName" default="webapps"/></Set> ...
默认部署目录的名称在 $JETTY_HOME/etc/jetty-deploy.xml
文件中指定。
$ java -jar $JETTY_HOME/start.jar jetty.deploy.monitoredDirName=webapps2
我们可以在命令行上设置属性值。
$ cat start.ini # # Initialize module deploy # --module=deploy ## DeployManager configuration # Monitored Directory name (relative to jetty.base) jetty.deploy.monitoredDirName=webapps3
另一种可能性是在 start.ini
文件中的 deploy 模块部分设置部署目录名称。
$ cat myjetty.properties jetty.deploy.monitoredDirName=webapps4 $ java -jar $JETTY_HOME/start.jar myjetty.properties
部署目录可以设置在传递给 start.jar
工具的属性文件中。
我们已经展示了设置部署目录的四个位置。如果存在冲突,则从优先级最高的选项中获取值。优先级顺序如下:(a) Java 属性文件;(b) 命令行选项;(c) Jetty 基础目录的 start.ini
文件;(d) 位于 Java 主目录 etc
目录中的 jetty-deploy.xml
文件。
Jetty XML 文件
Jetty 可以通过 XML 配置文件进行配置。jetty.xml
是默认的 Jetty 配置文件。它配置了 server 类、ThreadPool、连接器、handler 结构、部署管理器、登录服务和请求日志。jetty-web.xml
是一个可以与特定 Web 应用程序捆绑的 Jetty 配置文件。jetty-env.xml
是一个可选的 Jetty 配置文件,用于为单个 Web 应用程序配置 JNDI 资源。webdefault.xml
配置文件在 Web 应用程序自己的 web.xml
文件之前应用。它用于避免 Web 应用程序在其自身的 web.xml
文件中定义大量 housekeeping 和容器特定元素。override-web.xml
是一个 Web 应用程序配置文件,在应用程序自己的 web.xml
文件之后应用。
应用程序上下文
上下文路径 是 URL 路径的一部分,用于选择将传入请求路由到的 Web 应用程序。上下文路径可以通过方法调用(在嵌入式 Jetty 中)、从 WAR 文件名派生、在 deployer XML 文件或 jetty-web.xml
中指定。下一个示例将使用 jetty-web.xml
文件设置应用程序的上下文路径。该文件位于 WEB-INF
目录内。
$ tree . ├── build.xml └── src ├── com │ └── zetcode └── web ├── index.html └── WEB-INF └── jetty-web.xml 5 directories, 3 files
我们列出了项目的目录结构。
<!DOCTYPE html> <html> <body> Simple page. </body> </html>
这是一个简单的 HTML 文件。
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/myapp</Set> <Get class="org.eclipse.jetty.util.log.Log" name="rootLogger"> <Call name="warn"><Arg>Web application is deployed</Arg></Call> </Get> </Configure>
在 jetty-web.xml
文件中,我们将上下文设置为 /myapp
。我们还在部署时记录一条消息。
<?xml version="1.0" encoding="UTF-8"?> <project name="AppContext" default="archive"> <property name="name" value="appcontext"/> <property environment="env"/> <property name="src.dir" value="src"/> <property name="web.dir" value="${src.dir}/web"/> <property name="dist.dir" location="dist"/> <property name="deploy.path" location="${env.JETTY_BASE}/webapps"/> <target name="init"> <mkdir dir="${dist.dir}"/> </target> <target name="archive"> <war destfile="${dist.dir}/${name}.war" needxmlfile="false"> <fileset dir="${web.dir}"/> </war> <echo>Archive created</echo> </target> <target name="clean" depends="init"> <delete dir="${dist.dir}"/> <echo>Cleaning completed</echo> </target> <target name="deploy" depends="archive"> <copy file="${dist.dir}/${name}.war" overwrite="true" todir="${deploy.path}"/> <echo>Archive deployed</echo> </target> </project>
这是 Ant 构建文件。
<property environment="env"/>
environment 属性设置了使用 OS 环境变量的 prefix。
<property name="deploy.path" location="${env.JETTY_BASE}/webapps"/>
我们使用 JETTY_BASE
环境变量来定义部署路径。
$ curl localhost:8080/myapp/ <!DOCTYPE html> <html> <body> Simple page. </body> </html>
我们使用选定的上下文路径连接到 Web 应用程序。如果我们没有显式指定上下文文件,它将从 WAR 文件名派生,该文件名在 build.xml
文件的第三行给出。
部署描述符
部署描述符是用于部署 Web 应用程序的 XML 文件。XML 文件的名称必须与 WAR 文件的名称匹配。如果部署目录中同时存在 WAR 文件和 XML 文件,则使用 XML 文件进行部署。
我们使用前面的示例代码。
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/myapp2</Set> <Set name="war">/home/janbodnar/prog/jetty/appcontext/dist/appcontext.war</Set> </Configure>
在部署描述符中,我们设置了上下文路径并使用绝对路径指定了 WAR 文件。
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <!-- <Set name="contextPath">/myapp</Set> --> <Get class="org.eclipse.jetty.util.log.Log" name="rootLogger"> <Call name="warn"><Arg>Web application is deployed</Arg></Call> </Get> </Configure>
jetty-web.xml
在所有其他配置应用于 Web 应用程序之后被调用。因此,我们注释掉了指定上下文路径的行。
$ curl localhost:8080/myapp2/ <!DOCTYPE html> <html> <body> Simple page. </body> </html>
修改后的上下文路径有效。
在本章中,我们展示了 Jetty 服务器的一些基本管理操作。
作者
列出所有Java教程。