您的位置:首页 > 理论基础 > 计算机网络

jetty服务器的研究

2015-09-09 17:52 459 查看
以下文档是对jetty7.6.X进行的分析

1)http://benni82.iteye.com/blog/844922 ----分析start.ini的用途
在命令行运行java -jar start.jar,jetty程序首先会看你的系统是否配置了JETTY_HOME系统变量如果配置了,将会其下的找start.ini文件,如果没有
就会在当前执行目录下找start.ini文件,找到了会根据此文件的配置,加载具体内容;其实start.ini中的内容可以直接写在命令行中,写在这个文件
中便于统一管理调用

2)如何禁掉jetty的http协议,只开启https协议
修改start.ini
将etc/jetty.xml给注释掉;并开启etc/jetty-ssl.xml
但是只开启jetty-ssl.xml是无法启动jetty的, 需要将jetty.xml中的一些内容copy到jetty-ssl.xml中;具体内容如下:
<Set name="handler">
<New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
</Item>
<Item>
<New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
</Item>
</Array>
</Set>
</New>
</Set>

<!-- =========================================================== -->
<!-- extra options -->
<!-- =========================================================== -->
<Set name="stopAtShutdown">true</Set>
<Set name="sendServerVersion">true</Set>
<Set name="sendDateHeader">true</Set>
<Set name="gracefulShutdown">1000</Set>
<Set name="dumpAfterStart">false</Set>
<Set name="dumpBeforeStop">false</Set>
其实就是去掉http协议对应的连接群,之所以需要添加这些内容,这与jetty的架构有关
一个jetty包含一个server,server下必须有handler,和Contexts

3)jetty的原理与架构 http://www.ibm.com/developerworks/cn/java/j-lo-jetty/ .)整个jetty的核心组件由Server和connector两个组件构成,整个Server组件是基于Handler容器
工作的,jetty中另外一个不可缺少的组件是Connector,它负责接收客户端的连接请求,并
将请求分配给一个处理队列去执行。
.) jetty组要提供了两种Handler类型,一种是 HandlerWrapper,它可以将一个 Handler 委托给另外一个类去执行,
如我们要将一个 Handler 加到 Jetty 中,那么就必须将这个 Handler 委托给 Server 去调用。配合 ScopeHandler
类我们可以拦截 Handler 的执行,在调用 Handler 之前或之后,可以做一些另外的事情,类似于 Tomcat 中的 Valve;
另外一个 Handler 类型是 HandlerCollection,这个 Handler 类可以将多个 Handler 组装在一起,构成一个 Handler 链,方便我们做扩展。

4)Jetty 的启动过程
jetty 的入口是 Server 类,Server 类启动完成了,就代表 Jetty 能为你提供服务了。它到底能提供哪些服务,就要看 Server 类启动时都调
用了其它组件的 start 方法。从 Jetty 的配置文件我们可以发现,配置 Jetty 的过程就是将那些类配置到 Server 的过程.
因为 Jetty 中所有的组件都会继承 LifeCycle,所以 Server 的 start 方法调用就会调用所有已经注册到 Server 的组件,Server 启动其它组件的顺序是:
首先启动设置到 Server 的 Handler,通常这个 Handler 会有很多子 Handler,这些 Handler 将组成一个 Handler 链。Server 会依次启动这个链上的所有 Handler。
接着会启动注册在 Server 上 JMX 的 Mbean,让 Mbean 也一起工作起来,最后会启动 Connector,打开端口,接受客户端请求,启动逻辑非常简单

5)接收请求:
.)jetty创建一个队列线程池,用于处理每个建立连接产生的任务
.)创建 ServerSocket,用于准备接受客户端的 socket 请求
.)创建一个或多个监听线程,用来监听访问端口是否有连接进来
当建立连接的环境已经准备好了,就可以接受 HTTP 请求了,当 Acceptor 接受到 socket 连接后将转入对应的server进行处理

6) jetty的很多功能是可以在start.ini中添加对应的配置文件启动了,比如开启jetty-fileserver文件服务器的功能
之所以可以这样,是通过加载不同的handler来实现的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jetty java https