Jetty入门(1-4)

使用Gradle来进行Java Web应用开发项目管理,可以十分便利地解决包依赖等问题。

war插件的出现,让项目部署成为一个复制粘贴的过程,那有没有办法让Java web应用的部署,就像windows下安装软件,双击一下就可以呢?又或者Java web应用开发过程中,有没有办法自动检测项目变化,自动编译与加载呢?

gretty支持热部署、HTTPS、转发、调试、自动化运行环境等诸多特性,让开发和部署变得更加简单。

本文将介绍gretty插件的最常用的几种特性和使用方法,适合对使用过Java web和Gradle的童鞋。

1.安装gretty


1

2

3

4

5

6

7

8

9

10

11

12

// JDK6+,Gradle 1.10+

// build.gradle

buildscript {

    repositories {

         jcenter()

    }

    dependencies {

         classpath ‘org.akhikhl.gretty:gretty:+‘

    }

}

apply plugin: ‘org.akhikhl.gretty‘


1

apply from: ‘https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin‘

2.常用命令

2.1 gradle appRun

  • 编译当前项目
  • 不依赖于war任务
  • 另有appRunWar、appRunDebug、appRunWarDebug

2.2 gradle appStart

  • 编译当前项目
  • 使用新java线程开启服务,监听端口,等待HTTP请求
  • 不依赖于war任务
  • 不主动关闭服务,即一直在运行,需用gradle appStop关闭
  • 另有appStartWar、appStartDebug、appStartWarDebug

2.3 gradle jetty* / gradle tomcat*

  • 包含Start、Run、Stop等,与2.1-2.2用法一致

3.核心特性

3.1 选择servlet 容器


1

2

3

4

5

6

7

8

gretty {

    // 端口默认8080

    // serlvetContainer 支持 jetty7/8/9,tomcat7/8

    // contextPath 设置根路径,默认为项目名称

    port = 8081

    serlvetContainer = ‘jetty9‘

    contextPath = ‘/‘

}

3.2 热部署(Gretty 1.1.5+)

常用属性

  • scanInterval:监视周期,单位为秒,设置为0等于完全关闭热部署
  • scanDir:需要监视的文件夹
  • recompileOnSourceChange:监视源码变动,自动编译
  • reloadOnClassChange:编译的类发生改变,自动加载
  • reloadOnConfigChange:WEB-INF或META-INF发生改变
  • reloadOnLibChange:依赖发生改变

Gretty默认如下

  • scanInterval 设置为1,每秒扫描改动1次
  • scanDir默认为下 :

    ${projectdir}/src/main/java
    ${projectdir}/src/main/groovy
    ${projectdir}/src/main/resources
    ${projectdir}/build/classes/main
    ${projectdir}/build/resources/main

  • recompileOnSourceChange、reloadOnClassChange、reloadOnConfigChange 和 reloadOnLibChange默认为true

3.3 快速加载

  • fastReload属性,默认为true,监听webapp/中的内容,文件发生改变,无需重启。

3.4 添加新的资源目录


1

2

3

4

5

6

7

// 除了src/main/webapp外,可另外指定资源目录

gretty{

    // ...

    extraResourceBase ‘dir1‘,

    extraResourceBases ‘dir2‘,‘dir3‘

    // ...

}

3.5 HTTPS 支持

  • 生成自签名证书,仅在开发时使用


    1

    2

    3

    4

    5

    gretty {

    httpsEnabled = true

    // httpEnabled = false 禁用http

    // httpsPort = 443 httpsPort默认为 8443

    }

    certificate → "${project.buildDir}/ssl/cert"
    key-store → "${project.buildDir}/ssl/keystore"
    key-store and key-manager passwords→"${project.buildDir}/ssl/properties"
    key-store → 配置HTTPS连接

  • 手动配置

    1

    2

    3

    4

    5

    6

    7

    gretty {

    sslKeyStorePath = ‘/some/path/keystore‘

    sslKeyStorePassword = ‘someKeystorePassword‘

    sslKeyManagerPassword = ‘someKeyManagerPassword‘

    sslTrustStorePath = ‘/another/path/trust_keystore‘

    sslTrustStorePassword = ‘someTrustStorePassword‘

    }

3.6 转发(Gretty 1.1.7+)

  • 步骤1:在WEB-INF/web.xml中加入以下内容


    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    <filter>

      <filter-name>RedirectFilter</filter-name>

      <filter-class>org.akhikhl.gretty.RedirectFilter</filter-class>

    </filter>

    <filter-mapping>

      <filter-name>RedirectFilter</filter-name>

      <url-pattern>/*</url-pattern>

      <dispatcher>REQUEST</dispatcher>

      <dispatcher>FORWARD</dispatcher>

    </filter-mapping>

  • 步骤2:创建WEB-INF/filter.groovy,设置转发规则

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    // 根地址转发到 index.html

    filter relPath: ‘/‘, {

      forward ‘index.html‘

    }

    // 旧地址转发到新地址

    filter relPath: ‘/old/path‘, {

      redirect contextPath + ‘/new/path‘

    }

    // 地址参数转为查询参数

    filter relPath: ~‘/path/(.*)‘, { matches ->

      redirect new URIBuilder(requestURI).setPath(contextPath + ‘/anotherPath‘)

       .setQuery(matches.relPath[0][1])

    }

    // 将HTTP流量全部转发至HTTPS

    filter scheme: ‘http‘, {

      redirect new URIBuilder(requestURI).setScheme(‘https‘).setPort(httpsPort)

    }

3.7 调试(Debug)


1

2

3

4

5

// 为所有的debug命令配置参数

gretty {

  debugPort = 5005      // 默认

  debugSuspend = true   // 默认

}


1

2

3

4

5

6

7

8

9

// 仅针对appRunDebug

gretty {

  afterEvaluate {

    appRunDebug {

      debugPort = 5005

      debugSuspend = true

    }

  }

}

4.产品生成

4.1 gradle buildProduct

  • 生成安装文件
  • 生成目录位于 build/output/${project.name}
  • 结构如下
    --build/output/${project.name}
    |--conf/     => 配置文件
    |--runner/  => servlet container 所需库
    |--starter/
    |--webapps/   => java web 应用
    |--restart.bat/sh
    |--run.bat/sh
    |--start.bat/sh
    |--stop.bat/sh
  • 多应用,需在build.gradle中配置 product,例如

    1

    2

    3

    4

    5

    product {

      webapp project // include this project

      webapp ‘:ProjectA‘

      webapp ‘:ProjectB‘

    }

4.2 gradle archiveProduct

  • 打包生成的安装文件
  • 生成目录位于 build/output/${project.name}

本文同步发布在 Github,后期将不断更新,欢迎关注。

时间: 2024-08-25 03:29:59

Jetty入门(1-4)的相关文章

Jetty 入门

先下载 : http://download.eclipse.org/jetty/ 由于本人电脑安装的是JDK 1.6  ,目前只能支持jetty 1.7 下载解压到E盘E:\JStudy\jetty后: 运行: cmd E: cd  E:\JStudy\jetty java  -jar -start.jar 回车启动 Jetty http://127.0.0.1:8080/ 最后,这个确实有点太入门

Jetty入门

总述 同tomcat一样,jetty也是一个servlet引擎,jetty的神奇之处在于,jetty不仅可以作为一个web应用的容器,它甚至还可以作为一个程序中的插件来通过main函数加载web应用程序本身. Jetty 是一个 Web server/servlet container, 支持 SPDY,WebSocket, OSGi, JMX,JNDI, JAAS .Jetty非常高效而且灵活,Google App Engine 选择了Jetty,而放弃了Tomcat,或是其他的服务器. Je

Jetty入门(1-2)配置Jetty - 独立运行模式

本文详述如何安装和配置Jetty服务器,主要讲述Jetty的独立运行模式(Standalone).随后介绍它的配置选项,以及模块化的架构. Jetty有独立运行模式.嵌入运行模式和Jetty Maven插件操作模式. 本文是独立运行模式为准. 一.部署环境 两个软件: 1)Java 8u60 http://download.Oracle.com/otn-pub/Java/jdk/8u60-b27/jdk-8u60-windows-x64.exe 2)Jetty 9.3.2 http://ecli

Jetty总览

Jetty入门 基本功能介绍 配置概览-怎么配置Jetty 配置概览-需要配置什么 Jetty配置 部署到Jetty 配置上下文 配置连接器 配置安全 配置JSP支持 Jetty管理指导 启动Jetty Session管理 配置JNDI 注解 JMX SPDY ALPN NPN FastCGI支持 打包Servlets.Filters和Handlers Jetty Runner Setuid 优化Jetty Jetty日志 Jetty开发指导 Maven和Jetty Ant和Jetty Hand

Jetty使用教程(四:21-22)—Jetty开发指南

二十一.嵌入式开发 21.1 Jetty嵌入式开发HelloWorld 本章节将提供一些教程,通过Jetty API快速开发嵌入式代码 21.1.1 下载Jetty的jar包 Jetty目前已经把所有功能分解成小的jar包,用户可以根据需要选择合适的jar包,来实现需要的功能.通常建议用户使用maven等管理工具来管理jar包,然而本教程使用一个包含所有功能的合集jar包来演示,用户可以使用curl或者浏览器下载jetty-all.jar包. jetty-all.jar下载地址:http://c

Spring MVC 教程,快速入门,深入分析

资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf SpringMVC核心配置文件示例.rar 作者:赵磊 博客:http://elf8848.iteye.com 目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 六.springMVC-mvc.xml 配置文件片段讲解 七.spring mvc 如何访问到静态的文件,如j

SpringMVC_入门项目

本项目是SpringMVC的入门项目,用于演示SpringMVC的项目配置.各层结构,功能较简单 一.Eclipse中创建maven项目 二.pom.xml添加依赖 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <dependency>     <groupId>javax.servlet</groupId>     <artifactI

Spring_MVC_教程_快速入门_深入分析

Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf SpringMVC核心配置文件示例.rar 作者:赵磊 博客:http://elf8848.iteye.com 目录 一.前言 二.spring mvc 核心类与接口 三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明

Gradle用户指南(章10:Web应用程序快速入门)

Gradle用户指南(章10:Web应用程序快速入门) 本章正在完善中..... 本章介绍gradle对web应用程序的支持.Gradle为web应用程序开发提供了两个插件:War插件和Jetty插件.War插件扩展了java插件并且能为你的项目构建一个war包.Jetty插件扩展了War插件并且提供了发布你的web项目到Jetty容器中的功能. 构建一个War文件 构建War文件,你需要在项目中添加War插件. 注意:你可以在gradle发布库和源文件的samples/webApplicati