关闭

jetty入门笔记(从部署到原理)

786人阅读 评论(0) 收藏 举报
分类:

原文地址: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应用的通用属性。 

类似于tomcatconfig目录

2.3  contexts用于ContextDeployer方式部署

这个目录将会被ContextDeployer类的实例扫描,受$JETTY_HOME/etc/jetty.xml 配置影响

包含多个独立的描述上下文的xml配置文件,

此文件夹支持热部署,即增删改会实时生效。

contexts目录和webapp目录两种部署方式要避免重复部署》

 

javadoc.xml

test.xml

类似于tomcatconfig/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 5websocket

l   封装上面的socket.io框架

l   Pushlet是一个开源的 Comet框架封装ajax-pollingiframe

 

 

限制:

 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/

 



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:108866次
    • 积分:1999
    • 等级:
    • 排名:千里之外
    • 原创:53篇
    • 转载:251篇
    • 译文:0篇
    • 评论:11条