文档章节

Eclipse下通过Maven的Jetty插件运行Web工程的配置,包括启动https

cokolin
 cokolin
发布于 2015/05/02 23:49
字数 975
阅读 43363
收藏 53

引用来源

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 配置表示工程的虚拟目录名

 

步骤二

使用Eclipse的Maven Build运行,Goals配置,如图:

这个配置表示 jetty 运行时的端口号。

jetty:run -Djetty.port=9080

另外,截图的绿色部分是因为我的Web应用的 log4j.xml 中使用了 ${sys:catalina.base} 这个Tomcat的环境变量,在启动 Jetty 时会报错,添加了 catalina.base 这个配置后就可以解决这个问题了。还有一个问题是,这个配置必须配置到 Parameter 中,成为启动参数。

以上方案配置完成之后,第一次运行时,Maven会自动去下载插件依赖,编译并运行Web应用,成功之后就可以愉快的通过HTTP的形式访问亲的网站了。

 

混合使用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的步骤二 相似,但可以去掉 -Djetty.port=9080 这个配置。

以上配置完成后,运行,就可以通过 http 和 https 两种形式访问亲的网站了

 

总结

Jetty 的定时重载代码的实现比 Tomcat 的好很多,使用 Tomcat 的 onreload 经常修改几下就整个应用在重启,而且经常排队,非常耗时。

Jetty 的配置对 pom.xml 的侵入比较大,尤其是 http 和 https 的混合配置更是需要在 pom.xml 中配置固定的端口号,让代码看起来不够干净。

我对 Jetty 的尝试还非常粗浅,希望看到这篇博客的同学能够多多赐教。

补充

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>

 

© 著作权归作者所有

共有 人打赏支持
cokolin
粉丝 13
博文 17
码字总数 5514
作品 0
广州
程序员
私信 提问
加载中

评论(6)

Skqing
Skqing
跟 单独使用HTTP的步骤二 相似,但可以去掉 -Djetty.port=9080 这个配置。这个没看懂
啦啦啦拉拉
啦啦啦拉拉
好像能热替换了0
J
Jack_Ruin

引用来自“许雷神”的评论

感谢
-Djetty.port=9080
J
Jack_Ruin

引用来自“许雷神”的评论

感谢
不写
x
xiao_小夭
Thank you
许雷神
许雷神
感谢
idea/eclipse下Maven工程集成web服务(tomcat、jetty)

idea/eclipse下Maven工程集成web服务 转载请注明出处:http://www.cnblogs.com/funnyzpc/p/8093554.html   应用服务器最常用的一般有这哥仨:tomcat、jetty、webLogic ,前两者开源属轻量级...

€5è¬þxãÍ
2017/12/23
0
0
IntelliJ IDEA + Maven + Jetty +JRebel 热部署 配置

前置条件: 确定目前已经安装JDK/IDEA/Maven; 可以正常运行的WEB工程 1.安装JRebel插件 打开的IntelliJ IDEA开发工具,并打开你自己的web工程; 在工程目录选择 File->Setting 或者快捷键C...

kfc_oschina
2016/11/12
1K
0
在eclipse中启动AppFuse应用

本文是根据官方教程中IDE部分,通过实际测试 eclipse导入appfuse生成的maven工程 前提:eclipse装maven插件,可在Help > Eclipse Marketplace里搜索关键字“maven”找到对应一堆插件,我安装...

银月光海
2013/06/19
0
0
maven笔记三:常用maven命令

maven库地址一:https://repository.sonatype.org/index.html#welcome maven库地址二:http://mvnrepository.com/ maven库地址三:http://maven.oschina.net/index.html#welcome 下面是常用命......

xiejunbo
2015/02/25
0
0
Jetty嵌入式Web容器攻略

Jetty是一个用 Java 实现、开源、基于标准的,并且具有丰富功能的 Http 服务器和 Web 容器。Jetty中应用最广泛的一项功能就是可以作为嵌入式Web容器。

binhu
2016/06/15
257
0

没有更多内容

加载失败,请刷新页面

加载更多

【58沈剑 架构师之路】选redis还是memcache,源码怎么说

memcache和redis是互联网分层架构中,最常用的KV缓存。不少同学在选型的时候会纠结,到底是选择memcache还是redis。 画外音:不鼓励粗暴的实践,例如“memcache提供的功能是redis提供的功能的...

张锦飞
6分钟前
0
0
不要依赖于线程调度器(72)

多个线程可运行时, 线程调度器决定哪些线程将会被运行、以及运行多长时间 任何操作系统在处理该问题时,会 尽力做到公正,但是策略却大相径庭 编写良好的程序不要依赖这种策略细节,否则程序...

Java搬砖工程师
9分钟前
0
0
路由器AP、路由、中继、桥接模式之间的区别

在TP-Link迷你无线路由器上一般有AP(接入点)模式、Router(无线路由)模式、Repeater(中继)模式、Bridge(桥接)模式、 Client(客户端)模式;已经属于模式很全的路由了,尽管仅仅只是一个小...

吴伟祥
9分钟前
0
0
初识kafka的zookeeper

最近项目中,使用redis进行消息的分发与订阅。这种模式就是一种多播的方式,但是随着消息的不断增加,消费端来不及处理所有的数据。在没有持久化的功能下,很多数据丢失了。当然,也可以使用...

孟飞阳
11分钟前
0
0
赋能时空云计算,阿里云数据库时空引擎Ganos上线

随着移动互联网、位置感知技术、对地观测技术的快速发展,时空信息已从传统GIS行业渗透到大众应用及各行各业。从静态POI(兴趣点)到APP位置信息,从导航电子地图到车辆行驶轨迹,从卫星影像...

阿里云官方博客
12分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部