Version: 9.2.14.v20151106
 Jetty : 开发文档

jetty的官网:http://www.eclipse.org/jetty/

Jetty : 开发文档

目录
I. jetty起步
1。介绍jetty服务器
Jetty是一个开源的项目,他提供的功能有:Http服务器,Http客户端和servlet容器。
2.我应该使用什么版本的jetty服务器?
到目前为止,jetty9是最新的版本,并且拥有比以前版本jetty很多很强大的功能,然而还有很多人仍然在使用更老版本的jetty服务器,我们郑重推荐你使用jetty9,因为他是jetty版本中的代表,并且官方目前活跃在jetty9,并且会为jetty9维护很多年。
                                                                                                 jetty 版本的明细表:
Version Year Home JVM Protocols Servlet JSP Status
9.3 2014 Eclipse 1.7 HTTP/1.1, HTTP/2 RFC2616,javax.websocket, SPDY v3 3.1 2.3 Experimental
9.2 2014 Eclipse 1.7 HTTP/1.1 RFC2616,javax.websocket, SPDY v3 3.1 2.3 Stable
8 2009- Eclipse/Codehaus 1.6 HTTP/1.1 RFC2616, WebSocket RFC 6455, SPDY v3 3.0 2.2 Mature
7 2008- Eclipse/Codehaus 1.5 HTTP/1.1 RFC2616, WebSocket RFC 6455, SPDY v3 2.5 2.1 Mature
6 2006-2010 Codehaus 1.4-1.5 HTTP/1.1 RFC2616 2.5 2.0 Venerable
5 2003-2009 Sourceforge 1.2-1.5 HTTP/1.1 RFC2616 2.4 2.0 Deprecated
4 2001-2006 Sourceforge 1.2, J2ME HTTP/1.1 RFC2616 2.3 1.2 Ancient
3 1999-2002 Sourceforge 1.2 HTTP/1.1 RFC2068 2.2 1.1 Fossilized
2 1998-2000 Mortbay 1.1 HTTP/1.0 RFC1945 2.1 1.0 Legendary
1 1995-1998 Mortbay 1.0 HTTP/1.0 RFC1945 - - Mythi
jetty作为Java EE规范的轻量级服务器,对其中的重要的servlet进行了实现,而在最近的javaee平台引入Web Profile,javaee官方其实也意识到了对于大部分开发者而言,只需要Java EE许多技术中一些。
然而jetty并没有装载全部Web Profile技术,Jetty的架构被设计成你加入自己真正需要的功能的第三方实现包的一个容器。
在第四版Java EE-7规范更新了一些已有功能,同时添加了一些新的功能:
JSR Name Included with jetty-9.1.x Pluggable
JSR 340 Servlet Specification API 3.1 Yes  
JSR 344 Java Server Faces 2.2 (JSF) No Yes, Mojarra or MyFaces
JSR 245 / JSR 341 Java Server Pages 2.3/Java Expression Language 3.0 (JSP/EL) Yes Yes
JSR 52 Java Standard Tag Library 1.2 (JSTL) Yes Yes
JSR 45 Debugging Support for Other Languages 1.0 Yes (via JSP) Yes (via JSP)
JSR 346 Contexts and Dependency Injection for the JavaEE Platform 1.1 (Web Beans) No Yes, Weld
JSR 330 Dependency Injection for Java 1.0 No Yes as part of a CDI implementation, Weld
JSR 316 Managed Beans 1.0 No Yes, as part of another technology
JSR 345 Enterprise JavaBeans 3.2 Lite No  
JSR 338 Java Persistance 2.1 (JPA) No Yes, eg Hibernate
JSR 250 Common Annotations for the Java Platform 1.2 Yes Partially (for non-core Servlet Spec annotations)
JSR 907 Java Transaction API 1.2 (JTA) Yes Yes
JSR 349 Bean Validation 1.1 No Yes as part of another technology eg JSF, or a stand-alone implementation such as Hiberate Validator
JSR 339 Java API for RESTful Web Services 2.0 (JAX-RS) No  
JSR 356 Java API for Websocket 1.0 Yes No
JSR 353 Java API for JSON Processing 1.0 (JSON-P) No Yes, eg JSON-P reference implementation
JSR 318 Interceptors 1.2 No Yes as part of a CDI implementation
同时我也提供Java EE 6 Web Profile作为参考,毕竟Java EE 6目前使用最广泛。
JSR Name Included with jetty-9.0.x Pluggable
JSR 315 Servlet Specification API 3.0 Yes  
JSR 314 JavaServer Faces 2.0 (JSF) No Yes, for example, Mojarra or MyFaces
JSR 245 JavaServer Pages 2.2/Java Expression Language 2.2 (JSP/EL) Yes Yes
JSR 52 Java Standard Tag Library 1.2 (JSTL) Yes Yes
JSR 45 Debugging Support for Other Languages 1.0 Yes (via JSP) Yes (via JSP)
JSR 299 Contexts and Dependency Injection for the Java EE Platform 1.0 (Web Beans) No Yes, Weld or OpenWebBeans
JSR 330 Dependency Injection for Java 1.0 No Yes as part of a CDI implementation, Weld
JSR 316 Managed Beans 1.0 No Yes, as part of another technology.
JSR 318 Enterprise JavaBeans 3.1 No Yes, OpenEJB
JSR 317 Java Persistance 2.0 (JPA) No Yes, Hibernate
JSR 250 Common Annotations for the Java Platform Yes Partially (for non-core Servlet Spec annotations)
JSR 907 Java Transaction API (JTA) Yes Implementations are pluggable, such as Atomikos, JOTM, Jencks (Geronimo Transaction Manager)
JSR 303 Bean Validation 1.0 No Yes as part of another technology (JSF), or a stand-alone implementation such as Hiberate Validator
你使用jetty服务器有很多不同的方式,在应用程序中内嵌jetty,也可以在不同的构建系统启动他,基于JVM虚拟机的不同语言的应用,或者作为一个单独的分发包部署web应用程序。
下载jetty:
独立的jetty分发包现在在Eclipse基金会的下载的有效连接:
http://download.eclipse.org/jetty
上面提供了zip和gzip格式的文件,下载适合你系统的文件。留意以扩展名.sha或者.md5结尾的文件是校验和文件。解压在你方便的目录下面,解压后的根目录作为JETTY_HOME 或者作为 $(jetty.home)
分发包压缩包的内容目录:
Location Description
license-eplv10-aslv20.html Jetty的License文件
README.txt 有用的开始信息
VERSION.txt 版本信息
bin/ 存放帮助Jetty Unix系统上运行实用的shell脚本
demo-base/ Jetty的基本目录,用来运行在Jetty服务器示例应用程序
etc/ Jetty相关的XML配置文件目录文件
lib/ 运行Jetty相关的jar包
logs/ 请求日志的目录
modules/ 模块的目录
notice.html License信息
resources/ 此目录需要加载到classpath下额外的资源(激活配置有效)
start.d/ 存放ini文件的目录,存放有效的命令行参数(比如 start.ini)
start.ini 文件包含了参数信息
start.jar 启动jetty的可执行jar
webapps/ web应用程序的存放目录
启动 Jetty
Jetty默认是在8080端口启动,运行一下命令:
cd 你的jetty解压缩的目录
java -jar start.jar

然后在浏览器中输入http://localhost:8080进行访问。

在Jetty 9.1之后,jetty分发包里面是不带任何示例的web应用程序,所以为了查看有趣的web示例应用程序,你应该在demo-base目录下面运行下面的命令:

> cd jetty解压缩文件夹/demo-base/
> java -jar ../start.jar

2016-02-24 13:56:35.939:WARN::main: demo test-realm is deployed. DO NOT USE IN PRODUCTION!
2016-02-24 13:56:35.943:INFO:oejs.Server:main: jetty-9-demo
2016-02-24 13:56:35.976:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/user/jetty-distribution-9/demo-base/webapps/] at interval 1
2016-02-24 13:56:36.240:INFO:oejpw.PlusConfiguration:main: No Transaction manager found - if your webapp requires one, please configure one.
2016-02-24 13:56:36.732:WARN::main: async-rest webapp is deployed. DO NOT USE IN PRODUCTION!
[...]
2016-02-24 13:56:38.572:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@2757052e{/,file:/home/user/jetty-distribution-9/demo-base/webapps/ROOT/,AVAILABLE}{/ROOT}
2016-02-24 13:56:38.579:INFO:oejs.ServerConnector:main: Started ServerConnector@19e0cb78{HTTP/1.1}{0.0.0.0:8080}

同样在浏览器中输入http://localhost:8080进行访问,将会显示欢迎页面和几个demo/test的应用。

提示:web示例应用程序并不提供必要的安全措施,请不要发布到生产环境中。

创建一个新的Jetty Base

在Jetty 9中demo-base目录就是一个基于jetty.base机制的例子,一个jetty.base允许配置文件和相关的服务器实例在jetty分发包中单独保存。以便用最小的损失升级。Jetty默认的配置基于两个相关的属性配置。

1.jetty.home

他配置的属性有jetty本地的分发包、默认的模块、默认的xml文件(典型的有 start.jar, lib, etc)

2.jetty.base

他配置的属性有本地Jetty定义的实例,配置,日志和web应用程序(典型的有 start.ini, start.d, logs and webapps)

其中 jetty.home和jetty.base属性可以在命令行中进行配置,比如:

> cd $HOME/my-base
> java -jar $HOME/jetty-distribution-9/start.jar

以下命令被用来创建新的基本目录和设置开启web访问、发布功能

> mkdir /tmp/mybase
> cd /tmp/mybase
> java -jar $HOME/jetty-distribution-9/start.jar
WARNING: Nothing to start, exiting ... Usage: java -jar start.jar [options] [properties] [configs]
java -jar start.jar --help # for more information > java -jar $HOME/jetty-distribution-9/start.jar --add-to-startd=http,deploy
http initialised in ${jetty.base}/start.d/http.ini (created)
server initialised in ${jetty.base}/start.d/server.ini (created)
deploy initialised in ${jetty.base}/start.d/deploy.ini (created)
MKDIR: ${jetty.base}/webapps
server initialised in ${jetty.base}/start.d/server.ini > java -jar $HOME/jetty-distribution-9/start.jar
2013-09-06 14:59:32.542:INFO:oejs.Server:main: jetty-9-demo
2013-09-06 14:59:32.572:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/tmp/mybase/webapps/] at interval 1
2013-09-06 14:59:32.602:INFO:oejs.ServerConnector:main: Started ServerConnector@405a2273{HTTP/1.1}{0.0.0.0:8080}

设置Jetty的访问端口

在命令行中使用jetty.port命令进行设置jetty服务器的端口

 > cd $HOME/jetty-distribution-/demo-base
> java -jar ../start.jar jetty.port=

另外,属性值可以在start.ini和start.d目录下的ini文件进行配置,而这里的端口配置则在start.d/http.ini中进行配置

进阶:

配置属性有以下三种配置:

  • 在 start.d/http.ini文件中前提含有属性配置:--module=http并处于非注释状态。
  • 在modules/http.mod文件中指定http模块的配置路径为etc/jetty-http.xml并jetty-http.xml中进行了属性配置。

  • jetty.port属性在etc/jetty.http.xml注入到ServerConnector 实例中。

启用Https

在jetty的配置中加入HTTPS的连接器,并使其生效,你需要:

> java -jar start.jar --add-to-startd=https
https initialised in ${jetty.home}/start.d/https.ini (created)
ssl initialised in ${jetty.home}/start.d/ssl.ini (created)
server enabled in ${jetty.home}/start.ini
resources enabled in ${jetty.home}/start.ini
ext enabled in ${jetty.home}/start.ini > java -jar start.jar
-- ::43.326:INFO:oejs.Server:main: jetty-...

如果--add-to-startd命令需要配置在ini文件中,需要以下做法 :

  • 在start.d中创建https.ini文件并使用其中https连接器模块,而https模块需要在etc/jetty-https.xml中加入激活。

  • 在start.d中创建ssl.ini文件并配置其中SSL的keystore使用演示密码,而ssl模块需要在etc/jetty-ssl.xml中加入激活。

  • 检测etc/keystore 文件是否存在,如果不存在该文件,jetty会去下载一个keystore 文件。

提示:

  如果单个start.ini 文件优先start.d/*.ini文件,此时选项配置--add-to-start=module 可能就是在start.ini文件中加入而不是在start.d中另外创建一个ini文件。

更改jetty的Https的端口

你可以配置SSL连接器使用https.port属性进行指定端口:

> cd $HOME/jetty-distribution-/demo-base
> java -jar ../start.jar https.port=

另外该属性值可以在 start.ini 文件和 start.d/*.ini 文件中进行配置. 如果你使用 --add-to-startd命令开启https, 然后你可以编辑该属性值在 start.d/https.ini文件中。 如果你指定-add-to-start命令, 你需要在 start.ini中进行配置。

更多关于start.jar命令

start.ja的工作是解释这些命令参数的start.inistart.d在类路径下面并且配置信息和属性定义文件符合Jetty的Xml的配置机制,start.jar 的配置有很多选项已经被记录,你能够使用一下命令进行查看相关的语法:

> java -jar start.jar --help

Jetty9开发(1)的更多相关文章

  1. WebSocket集成XMPP网页即时通讯1:Java Web Project服务端/客户端Jetty9开发初探

    Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特别频繁的应用尚能相安无事, ...

  2. Jetty使用教程(四:24-27)—Jetty开发指南

    二十四.处理器(Handler ) 24.1 编写一个常用的Handler Jetty的Handler组件用来处理接收到的请求. 很多使用者不需要编写Jetty的Handler ,而是通过使用Serv ...

  3. Jetty使用教程(四:23)—Jetty开发指南

    二十三.Maven和Jetty 这一章节将说明如何通过Maven管理Jetty和使用Jetty的Maven插件. 23.1 使用Maven Apache Maven是一个款软件项目管理工具.基于项目对 ...

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

    二十一.嵌入式开发 21.1 Jetty嵌入式开发HelloWorld 本章节将提供一些教程,通过Jetty API快速开发嵌入式代码 21.1.1 下载Jetty的jar包 Jetty目前已经把所有 ...

  5. JavaWeb学习总结-01 JavaWeb开发入门

    一 基本概念 1 Web开发的相关知识 Web,表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面): ...

  6. jersery+jetty嵌入式restful的框架开发

    随着微服务的流程,越来越多的后台服务采用了restful api风格的开放API,jersery+jetty嵌入式变成了一个很好的选择, 我自己写了一个简单的框架,https://github.com ...

  7. spark之scala程序开发(集群运行模式):单词出现次数统计

    准备工作: 将运行Scala-Eclipse的机器节点(CloudDeskTop)内存调整至4G,因为需要在该节点上跑本地(local)Spark程序,本地Spark程序会启动Worker进程耗用大量 ...

  8. spark之java程序开发

    spark之java程序开发 1.Spark中的Java开发的缘由: Spark自身是使用Scala程序开发的,Scala语言是同时具备函数式编程和指令式编程的一种混血语言,而Spark源码是基于Sc ...

  9. java集成开发环境常用操作集

    1.简单搭建maven集成开发环境 一.     Jetty安装 下载地址(包涵windows和Linux各版本,Jetty9需要JDK7):http://download.eclipse.org/j ...

随机推荐

  1. Spark任务调度流程及调度策略分析

    Spark任务调度 TaskScheduler调度入口: (1)       CoarseGrainedSchedulerBackend 在启动时会创建DriverEndPoint. 而DriverE ...

  2. cf509B Painting Pebbles

    B. Painting Pebbles time limit per test 1 second memory limit per test 256 megabytes input standard ...

  3. DP #1 Singleton Pattern线程安全问题

    单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例. 其中涉及到最主要的问题就是在多线程并发时线程安全问题. 单例模式的实现也有一个循序渐进的过程:1.最基本要求:每次从getI ...

  4. Android ListView嵌套Button,Button事件覆盖item事件解决办法

    方法就是修改item布局的xml文件: 在根布局里加上: android:descendantFocusability="blocksDescendants" 然后在按钮布局里加上 ...

  5. HDU_2046——骨牌铺放问题,递推

    Problem Description 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数. 例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:   In ...

  6. Java LinkedList 源码分析

    简介 LinkedList 是一个常用的集合类,用于顺序存储元素. LinkedList 经常和 ArrayList 一起被提及.大部分人应该都知道 ArrayList 内部采用数组保存元素,适合用于 ...

  7. 40 个重要的 HTML5 面试问题及答案

    本文将列出40个重要的HTML 5面试问题及答案,祝各位求职顺利. 目录 介绍 Canvas和SVG图形之间的区别是什么? 如何使用Canvas和SVG绘制矩形? 什么是CSS选择器? 如何使用ID值 ...

  8. Sublime Text 3配置记录

    G++ /** * 工具->编译系统->新编译系统 */ { "cmd": ["g++", "${file}", "- ...

  9. Android开发中Handler的经典总结--转载至网络

    一.Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释:当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件 ...

  10. jsonp封装

    //jsonp的封装函数 function jsonp(url,parmter,callback){ //创建script标签 var script=document.createElement('s ...