原文地址:http://blog.csdn.net/jiangshanjianke/article/details/7680641
第一章 部署
1.1 在Webapps目录部署
WebAppProvider定时扫描$jetty_home/webapps目录自动部署
注意如果同名则webapp会让步与contexts部署方式。
1.2 在contexts目录部署
ContextProvider定时扫描$jetty_home/contexts目录中的配置文件自动部署
1.3 Jety指定资源发布目录,并使用/根目录访问
{jettyhome}/contexts/test.xml更改如下:
第二章 目录介绍
2.1 VERSION.txt
每个版本的变更特性
2.2 etc 配置文件目录
etc/jetty.xml 默认配置文件
etc/jetty-xxx.xml该文件是为了给Jetty增加扩展应用所用的配置文件
etc/webdefault.xml:该文件是Web应用的默认配置文件,用于控制Jetty容器里所有Web应用的通用属性。
类似于tomcat的config目录
2.3 contexts用于ContextDeployer方式部署
这个目录将会被ContextDeployer类的实例扫描,受$JETTY_HOME/etc/jetty.xml 配置影响
包含多个独立的描述上下文的xml配置文件,
此文件夹支持热部署,即增删改会实时生效。
contexts目录和webapp目录两种部署方式要避免重复部署》
javadoc.xml
test.xml
类似于tomcat的config/catalina/localhost目录
2.4 contexts-available 例子而已
../contexts-available 包含了很多contexts配置的例子,可以copy到contexts目录中用于部署。
move-context.xml :演示了重定向
resourcesxml:演示了静态html和image如何部署
2.5 javadoc jetty的api说明
2.6 lib jetty依赖
2.7 logs 日志输出
2.8 overlays
2.9 resources
2.10 webapp webappprovider方式部署的扫描文件夹
第三章 启动
3.1 嵌入式servlet启动
java -cp $JETTY_CLASSPATH xxx.HelloWorld
3.2 自定义启动webapp
3.3 使用xml启动
java -cp $JETTY_CLASSPATHorg.eclipse.jetty.xml.XmlConfiguration etc/jetty.xml
3.4 使用start.jar启动
上面的方法都需要配置类路径比较麻烦。
Java –jar start.jar //这个命令的行为受到start.config配置文件的控制,此文件在start.jar包中。
3.4.1 具体做了什么
你可以通过执行java -jar start.jar --dry-run 来查看start.jar具体执行了什么等效的命令。
3.4.2 指定加载的jar包
可以通过OPTIONS参数来指定加载到classpath中的jar包,取代默认值
java -jar start.jarOPTIONS=Server,jmx,ajp,setuid
java -jar start.jar –list-options 可以查看所有OPTIONS选项,如果选择多个比如Server,servlet,webapp,jms,websocket则交叉重复的jar包在最终的classpath中只会保留1个
3.4.3 指定加载的xml包
java -jar start.jar OPTIONS=Server,jmx,ajpetc/jetty-jmx.xml etc/jetty.xml etc/jetty-ajp.xml
如果不指定默认是etc/jetty.xml
3.4.4 使用start.ini来配置默认参数
和start.jar在同一目录下,可以配置jvm参数,配置文件,OPTIONS参数等,作为java –jar start。Jar时的默认参数,注意如果让jvm的值生效则必须开放—exec
3.4.5 指定端口启动
在jetty.xml中<Set name="port"><SystemPropertyname="jetty.port" default="8080"/></Set>
启动命令:java -Djetty.port=8888 -jar start.jar
3.4.6 关闭服务
第四章 Jetty7架构
Connector :连接器,接受http连接
Handler: 处理程序,服务连接请求并产生响应
ThreadPool:线程池,提供共组哦线程
Server: 服务器,持有connector集合和Handler集合
注意:
虽然jetty的request/response都是从标准Servlet API继承的,但是标准API的全部特性只在响应的处理程序被注册的情况下可用。比如request中的session API是无效的除非request被传递给一个sessionHandler。
Jetty中Servlet概念本身是被一个servlet处理程序实现的,如果servlet不是必须的,为了减少serlvet请求响应的开销, 因此,你可以建立一个Jetty服务器,只用连接器和处理程序,而不使用servlet。
4.1 模式
Jetty组件大多实现LifeCycle接口
Jetty提供了IO 缓冲机制和NIO非阻塞机制
接口都是用抽象类。
4.2 连接器
还有AJPConnector没画
4.3 Handler
HandlerCollection对应顺序使用,HandlerWapper对应嵌套
handler可以嵌套使用也可以依次使用:依次使用时相互独立,不能严格依赖调用顺序
Handler用于处理request,大多数情况下使用传统的servlet即可,但是当你有特殊需求或者禁止使用全部的servletapi时,可以直接使用handler来直接提供动态内容。
4.3.1 分为3种
l 协调处理程序 - 处理程序,将请求路由到其他处理(HandlerCollection,ContextHandlerCollection)
l 过滤处理程序 - 处理程序,增强请求,并把它传递给其他处理(HandlerWrapper,ContextHandler中,SessionHandler)
l 生成处理器 - 处理程序产生的内容(ResourceHandler和ServletHandler)
public void handle(String target, RequestbaseRequest, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
4.4 Servlets
ServletHandler 把请求传递个任何配置的过滤器最后传递给url匹配的servlet
4.5 Context
4.6 Web applications
第五章 工作原理
http://www.ibm.com/developerworks/cn/java/j-lo-jetty/
第六章 Continuations
http://wiki.eclipse.org/Jetty/Feature/Continuations
第七章 常见问题
7.1 运行时无法编辑保存静态文件
http://wiki.eclipse.org/Jetty/
第八章 附录
8.1 基于长连接的coment服务器推技术
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/
实现方式:
l 基于 AJAX 的长轮询方式long polling ;
l 基于 iframe及 htmlfile的流方式。
l 基于 Flash的 XMLSocket (需要flash,防火墙可能阻挡)
l Html 5的websocket
l 封装上面的socket.io框架
l Pushlet是一个开源的 Comet框架封装ajax-polling和iframe
限制:
为 HTTP 1.1规范中规定,客户端不应该与服务器端建立超过两个的 HTTP连接
http 1.0 规范下服务器在处理完每个 Get/Post请求后会关闭套接口连接
http1.1 规范下服务器会保持这个连接,在处理两个请求的间隔时间里,这个连接处于空闲状态。
Java 1.4引入了支持异步 IO的 java.nio包。当连接处于空闲时,为这个连接分配的线程资源会返还到线程池,可以供新的连接使用;
它不会反馈给你。因为服务器端对每个客户端挂起的长连接做了限制
org.eclipse.jetty.webapp.WebAppContext
org.eclipse.jetty.server.handler.ContextHandler
8.2 书籍
http://www.doc88.com/p-671405123636.html
8.3 在线api
http://download.eclipse.org/jetty/stable-7/apidocs/