本机环境
JDK 7 Maven 3.2 Jetty 8.1.9 Eclipse Lunapom.xml 配置
[...] <build> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.9.v20130131</version> </plugin> </plugins> </build> [...]
启动 & 停止
命令行方式启动 jetty mvn jetty:run。能够通过 Ctrl + C 停止 jetty 服务。或者,在 eclipse 中选中项目 --> 右键 --> Run As --> Maven build...。在 Goals 栏输入 jetty:run(与命令行方式相比,不过
少了 mvn 前缀,为方便起见,下面均以命令行方式介绍。)
假设你希望通过命令 mvn jetty:stop 运行关闭 jetty 服务。你须要像以下一样在你的 pom.xml 配置文件里加入一个特殊的port和控制键:
<configuration> [...] <stopKey>shutdown</stopKey> <stopPort>9966</stopPort> [...] </configuration>
取消文件映射缓存
jetty 默认开启了 useFileMappedBuffer。在 jetty 执行期间,页面所使用的静态文件(如 css 文件等)不同意改动。假设你尝试去改动它们,保存的时候就会出现 Save could not be completed.
本地的 maven 仓库的文件夹。另外。将 9.2.8.v20150217 换成你所使用的版本号)。用压缩工具打开它, 找到 jetty-webapp-9.2.8.v2015021
7.jar/org/eclipse/jetty/webapp/webdefault.xml,将 webdefault.xml 文件解压缩一份出来,用文本编辑器打开它,搜索找到
useFileMappedBuffer 配置的行,将 true 改成 false 以禁掉缓存。
<init-param> <param-name>useFileMappedBuffer</param-name> <param-value>false</param-value> </init-param>
才那份改动好的 webdefault.xml 文件又一次压缩进去就可以。
port配置
jetty 默认使用的port是 8080,命令行的方式改动port的命令是:mvn -Djetty.port=8081 jetty:run 。pom.xml 配置方式例如以下:
<configuration> [...] <httpConnector> <port>8081</port> </httpConnector> [...] </configuration>
自己主动热部署
在你的 pom.xml 中加入例如以下配置:
<configuration> [...] <scanIntervalSeconds>2</scanIntervalSeconds> [...] </configuration>
默认值是 0。
大于 0 的数值表示开启,0 表示关闭,单位为秒。
以配置数值为一个周期,自己主动的扫描文件检查其内容是否有变化,假设发现文件的
内容被改变。则自己主动又一次部署运用。命令行的方式:mvn -Djetty.scanIntervalSeconds=2 jetty:run 。
手动重载入
在你的 pom.xml 文件里加入例如以下配置,reload 的可选值 :[automatic|manual]
<configuration> [...] <reload>manual</reload> [...] </configuration>
默认值为 automatic,它与大于 0 的 scanIntervalSeconds 节点一起作用,实现自己主动热部署的工作。设为 manual 的优点是,当你改变文件
新载入的动作。
这样能够更加的方便调试改动。命令行的方式是:mvn -Djetty.reload=manual jetty:run 。
訪问日志
在你的 pom.xml 文件加入例如以下配置:
<configuration> [...] <requestLog implementation="org.eclipse.jetty.server.NCSARequestLog"> <filename>target/access-yyyy_mm_dd.log</filename> <filenameDateFormat>yyyy_MM_dd</filenameDateFormat> <logDateFormat>yyyy-MM-dd HH:mm:ss</logDateFormat> <logTimeZone>GMT+8:00</logTimeZone> <append>true</append> <logServer>true</logServer> <retainDays>120</retainDays> <logCookies>true</logCookies> </requestLog> [...] </configuration>
org.eclipse.jetty.server.NCSARequestLog 是 org.eclipse.jetty.server.RequestLog 的一个实现类。
filename:日志文件的名称
filenameDateFormat:日志文件的名称的日期格式,它要求日志文件名称必须含有 yyyy_mm_dd 串
logDateFormat:日志内容的时间格式
logTimeZone:时区
append:追加到日志
logServer:记录訪问的主机名
retainDays:日志文件保存的天数, 超过删除
logCookies:记录 cookies
启动 jetty 服务,在项目的 target 文件夹下会生成一个 access-2015_06_23.log 文件,该文件里的当中一条记录例如以下:
"http://localhost:8081/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/35.0.1916.153 Safari/537.36 SE 2.X MetaSr 1.0" "JSESSIONID=2gyikovul2iz168116l2afo4f"
转储快照
在你的 pom.xml 文件加入例如以下配置:
<configuration> [...] <dumpOnStart>true</dumpOnStart> [...] </configuration>
dumpOnStart 默认值为 false,假设设为 true。jetty 在启动时会把当前服务进程的内存信息输出到控制台中,但这并不会保存到文件里。
WEB上下文
最经常使用的是 contextPath,它的配置例如以下:
<configuration> [...] <webApp> <contextPath>/${project.artifactId}</contextPath> </webApp> [...] </configuration>
contextPath 的默认值的 /,${project.artifactId} 引用了 <artifactId> 节点的值,即项目的名称。
项目的静态资源文件文件夹默认是 src/main/webapp,假设静态资源文件夹有多个。或者不在默认的 src/main/webapp 文件夹下。可做例如以下配置:
<configuration> [...] <webApp> <contextPath>/${project.artifactId}</contextPath> <resourceBases> <resourceBase>${project.basedir}/src/main/webapp</resourceBase> <resourceBase>${project.basedir}/commons</resourceBase> </resourceBases> </webApp> [...] </configuration>
引用静态资源文件时,路径不包括资源文件夹的名称,如 commons/main.css,引用方式为:<link href="main.css" rel="stylesheet" />
很多其它參数信息可參考 jetty-maven-plugin.html#configuring-your-webapp完整的配置
附 pom.xml 文件里 jetty 插件的完整配置片段:
<build> [...] <plugins> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.9.v20130131</version> <configuration> <httpConnector> <port>8081</port> </httpConnector> <stopKey>shutdown</stopKey> <stopPort>9966</stopPort> <!-- <scanIntervalSeconds>2</scanIntervalSeconds> --> <reload>manual</reload> <dumpOnStart>true</dumpOnStart> <webApp> <contextPath>/${project.artifactId}</contextPath> <!-- <resourceBases> <resourceBase>${project.basedir}/src/main/webapp</resourceBase> <resourceBase>${project.basedir}/commons</resourceBase> </resourceBases> --> </webApp> <requestLog implementation="org.eclipse.jetty.server.NCSARequestLog"> <filename>target/access-yyyy_mm_dd.log</filename> <filenameDateFormat>yyyy_MM_dd</filenameDateFormat> <logDateFormat>yyyy-MM-dd HH:mm:ss</logDateFormat> <logTimeZone>GMT+8:00</logTimeZone> <append>true</append> <logServer>true</logServer> <retainDays>120</retainDays> <logCookies>true</logCookies> </requestLog> </configuration> </plugin> </plugins> [...] </build>
很多其它有关 jetty 的配置信息可參考 http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html