在java web程序开发调试阶段,我们一般都不是直接用tomcat 或 其它web容器,而是用jetty,因为他不但支持maven项目,而且支持即时编译(定时重载代码),代码修改后直接生效(注:配置文件修改后还是要重新启动),而使用 Tomcat 的 onreload 经常修改几下就整个应用在重启,而且经常排队,非常耗时。Jetty 缺点是的配置对 pom.xml 的侵入比较大,尤其是 http 和 https 的混合配置更是需要在 pom.xml 中配置固定的端口号,让代码看起来不够干净。
方法一:运用Maven的plugin:jetty来部署
Jetty7/8 的Maven插件配置:http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin
Jetty9 最新的Maven插件配置:http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html 或者 最新RELEASE版配置
Jetty 各个版本的限制:http://wiki.eclipse.org/Jetty/Starting/Jetty_Version_Comparison_Table
Jetty 7 必须 Jdk 1.5+,Servlet 2.5,类似于 Tomcat 6,文章编写时的 Release 版本:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.6.17.v20150415</version>
</plugin>
Jetty 8 必须 Jdk 1.6+,Servlet 3.0,类似于 Tomcat 7,文章编写时的 Release 版本:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.16.v20140903</version>
</plugin>
Jetty 9 必须 Jdk 1.7+,Servlet 3.0+,类似于 Tomcat 8,文章编写时的 Release 版本:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.10.v20150310</version>
</plugin>
国内很多应用也许会去升级JDK版本,但往往还在使用Servlet2.5做开发,所以本文使用 Jetty 8 作为案例。
单独使用HTTP
在项目的 pom.xml 里面添加如下配置:
<project>
....
<build>
....
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.16.v20140903</version>
<configuration>
<scanIntervalSeconds>5</scanIntervalSeconds>
<webApp>
<contextPath>/test</contextPath>
</webApp>
</configuration>
</plugin>
</plugins>
....
</build>
....
</project>
配置说明:
-
configuration.scanIntervalSeconds 配置表示新代码的扫描时间间隔(秒),值 <= 0 表示不扫描
-
configuration.webApp.contextPath 配置表示工程的虚拟目录
jetty 运行时指定端口号 jetty:run -Djetty.port=9080
混合使用HTTP和HTTPS
pom.xml 里面的配置改为如下:
<project>
....
<build>
....
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.16.v20140903</version>
<configuration>
<scanIntervalSeconds>5</scanIntervalSeconds>
<webApp>
<contextPath>/test</contextPath>
</webApp>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>9080</port>
</connector>
<connector implementation="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
<port>9443</port>
<password>changeit</password>
</connector>
</connectors>
</configuration>
</plugin>
</plugins>
....
</build>
....
</project>
说明,从配置中可以看出,添加了connectors配置,一个是http的配置,一个是https的配置。
connector.port 是端口号,这个端口号必须设置,且优先级比 -Djetty.port 高。
connector.password 是 .keystore 的密码,https 连接必须设置,当前使用了 Tomcat 一样的密钥 changeit。
.keystore 文件的创建方法请查看上一篇博客 Eclipse下通过Maven的Tomcat插件运行Web工程的配置,包括启用https
以上配置完成后,运行,亲就可以通过 http 和 https 两种形式访问亲的网站了。
补充
1: Jetty有一个问题,默认使用nio连接会把资源文件(html, css)锁定,解决方案是把nio改为bio:
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>9080</port>
</connector>
<connector implementation="org.eclipse.jetty.server.ssl.SslSelectChannelConnector">
<port>9443</port>
<password>changeit</password>
</connector>
这两个connector的配置要改为:
<connector implementation="org.eclipse.jetty.server.bio.SocketConnector">
<port>8080</port>
</connector>
<connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector">
<port>8443</port>
<password>changeit</password>
</connector>
2: 使用org.eclipse.jetty
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.0.M2</version>
<configuration>
<webAppConfig>
<contextPath>/</contextPath>
</webAppConfig>
<httpConnector>
<port>80</port>
<idleTimeout>10000</idleTimeout>
</httpConnector>
</configuration>
</plugin>
方法二:运用ide 的Jetty插件直接部署
步骤一 :
1.下载jetty,楼主使用的jetty8,地址http://download.eclipse.org/jetty/
2.下载完成后,解压缩,cd到jetty路径下,运行命令: java -jar start.jar
3.默认端口号8080,访问http://localhost:8080,出现jetty welcome界面
到此,说明jetty已经安装成功!
步骤二:
参考 : https://my.oschina.net/cokolin/blog/409164
https://www.cnblogs.com/yiwangzhibujian/p/5832597.html