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 |
Servlet Specification API 3.1 | Yes | | |
Java Server Faces 2.2 (JSF) | No | ||
Java Server Pages 2.3/Java Expression Language 3.0 (JSP/EL) | Yes | Yes | |
Java Standard Tag Library 1.2 (JSTL) | Yes | Yes | |
Debugging Support for Other Languages 1.0 | Yes (via JSP) | Yes (via JSP) | |
Contexts and Dependency Injection for the JavaEE Platform 1.1 (Web Beans) | No | Yes, Weld | |
Dependency Injection for Java 1.0 | No | Yes as part of a CDI implementation, Weld | |
Managed Beans 1.0 | No | Yes, as part of another technology | |
Enterprise JavaBeans 3.2 Lite | No | | |
Java Persistance 2.1 (JPA) | No | Yes, eg Hibernate | |
Common Annotations for the Java Platform 1.2 | Yes | Partially (for non-core Servlet Spec annotations) | |
Java Transaction API 1.2 (JTA) | Yes | Yes | |
Bean Validation 1.1 | No | Yes as part of another technology eg JSF, or a stand-alone implementation such as Hiberate Validator | |
Java API for RESTful Web Services 2.0 (JAX-RS) | No | | |
Java API for Websocket 1.0 | Yes | No | |
Java API for JSON Processing 1.0 (JSON-P) | No | Yes, eg JSON-P reference implementation | |
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 |
Servlet Specification API 3.0 | Yes | | |
JavaServer Faces 2.0 (JSF) | No | ||
JavaServer Pages 2.2/Java Expression Language 2.2 (JSP/EL) | Yes | Yes | |
Java Standard Tag Library 1.2 (JSTL) | Yes | Yes | |
Debugging Support for Other Languages 1.0 | Yes (via JSP) | Yes (via JSP) | |
Contexts and Dependency Injection for the Java EE Platform 1.0 (Web Beans) | No | Yes, Weld or OpenWebBeans | |
Dependency Injection for Java 1.0 | No | Yes as part of a CDI implementation, Weld | |
Managed Beans 1.0 | No | Yes, as part of another technology. | |
Enterprise JavaBeans 3.1 | No | Yes, OpenEJB | |
Java Persistance 2.0 (JPA) | No | Yes, Hibernate | |
Common Annotations for the Java Platform | Yes | Partially (for non-core Servlet Spec annotations) | |
Java Transaction API (JTA) | Yes | Implementations are pluggable, such as Atomikos, JOTM, Jencks (Geronimo Transaction Manager) | |
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服务器的端口
1 > cd $HOME/jetty-distribution-9/demo-base
2 > java -jar ../start.jar jetty.port=8081
另外,属性值可以在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
2013-09-06 13:52:43.326:INFO:oejs.Server:main: jetty-9...
如果--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-9/demo-base
> java -jar ../start.jar https.port=8444
另外该属性值可以在 start.ini
文件和 start.d/*.ini
文件中进行配置. 如果你使用 --add-to-startd命令开启https, 然后你可以编辑该属性值在 start.d/https.ini
文件中。 如果你指定-add-to-start命令, 你需要在 start.ini中进行配置。
更多关于start.jar命令
start.ja的工作是解释这些命令参数的
, start.ini
和start.d在类路径下面并且配置信息和属性定义文件符合Jetty的Xml的配置机制,
start.jar
的配置有很多选项已经被记录,你能够使用一下命令进行查看相关的语法:
> java -jar start.jar --help