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

引用来源

Jetty7/8 的Maven插件配置:http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugincss

Jetty9 最新的Maven插件配置:http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html 或者 最新RELEASE版配置html

Jetty 各个版本的限制:http://wiki.eclipse.org/Jetty/Starting/Jetty_Version_Comparison_Tableweb

Jetty 7 必须 Jdk 1.5+,Servlet 2.5,相似于 Tomcat 6,文章编写时的 Release 版本:eclipse

<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 版本:maven

<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 做为案例。ui

 

单独使用HTTP

步骤一

在项目的 pom.xml 里面添加以下配置:spa

<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>

配置说明:.net

  • 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>
相关文章
相关标签/搜索