- 浏览: 1012668 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
以 jetty7 作为分析目标, Jetty 是由一个或多个 connector 核心组件以及一些列 handler 组件和一个线程池组成,看一下结构图:
Connector 负责监听接收客户连接请求,而 handler 组件则负责处理请求并给予响应,前面两个组件工作所需要的线程资源都直接从线程池 ThreadPool 中获取。 Jetty Server 可以有多个 connector 在不同的端口上监听客户请求,而每个 connector 根据具体的使用场景不同可以有不同的实现,例如采用非阻塞 NioConnector 、阻塞 SocketConnector 等等,而对于请求处理的 handler 组件,也根据具体需要可以使用不同的 handler ,此种设计提高了 jetty 的灵活性,需要 servlet ,则可以使用 servletHandler ,需要 session ,则再增加一个 sessionHandler ,也就是说我们完全可以不使用 servlet 或者 session ,只要不配置这个 handler 就行了。
要启动和协调上诉核心组件工作, Jetty 提供了一个 Server 类来做这个事情 , 也就是说 Server 是应用的起始点,他负责创建并初始化 connector 、 handler 、 ThreadPool 组件,然后调用 start 方法启动他们,让所有组件都处于待命状态,因此 Server 类是一个比较重要的 Façade, 值得注意的 Server 类本身也是一个 handler.
一、 组件生命周期
对于 jetty 来说,每个组件都有其生命周期, jetty 采用了统一的 LifeCyle 接口来控制,我们来看下,类图结构:
connector,handler 等组件全部都直接或间接实现了 LifeCyle 接口,刚才说了 Server 也是 Handler ,同时他也是启动或协调组件工作的类,也就是说 Server 可以通过 LifeCyle 接口控制其他组件的生命周期,通过 start 方法可以启动 server, 通过 stop 则关闭了 server 。
二、 Connector 组件
Connnetor 在实现上有NIO 、BIO 两种实现方式,并且支持AJP 协议、和SSL 。
三、 Handler 组件
所有的 handler 组件都实现了 Handler 接口,可以看到, Handler 是可以以链表的形式相互组合的, Server 作为服务入口,本身也是 handler ,他继承了 HandlerWrapper 接口,我们看以看到他带了一个 handler 的引用变量,我们可以注入 ServletHandler 支持 servlet, 注入 WebAppContext 则支持我们的 webapp 应用。
四、 启动过程
先看下 jetty 的目录结构
看几个主要目录的含义,
Bin 目录定义了启动 jetty 需要的 sh 文件,主要用在 linux 中, windows 中可以直接 java start.jar 启动服务器,
Contexts 目录主要放置跟应用相关的 context 配置文件,跟应用相关
etc 目录放置跟服务器相关的配置文件,其中会定义 contexts 目录所在的位置
lib 是服务器所需要的 jar 包
webapps 是放置应用程序的位置,当然也可以通过在 contexts 中或者 etc 中自定义
我们从外部启动一个 jetty 服务器的过程:
首先从 Start.jar 开始,这个 jar 定义了解析命令行的 Main 这个类, Main 主要负责解析 start.ini 配置文件 ,start.ini 中定义了 JVM 需要的参数以及 etc 目录中用到的 xml 配置文件,如下图:
然后由 Config 类解析出 stat.ini 中 OPTIONS 选项指定的模块的包的位置用来加入到 classpath 中,这些模块的包都定义在 start.config 文件中 ( 该文件可以在 start.jar 包中找到 ) ,截取一个片段给大家看下:
这个文件的配置是需要有一定的语法在里面的,有兴趣的可以研究一下,也就是说,通过在 start.ini 中定义 OPTIONS 以及在 start.config 中定义模块路径就可以确定把哪些 jar 加入到环境变量中。
以上准备工作做完之后,就可以真正开始服务器的处理了,这时你有两种选择,第一种是在本进程中通过反射方式启动,但是缺点是 start.ini 中配置的 JVM 参数就形同虚设了,因为 java 进程已经起来了,不能再按照新的堆参数等重新设置了;第二种方式就是重新启动一个进程,就可以重新设置参数,前面说了, start.ini 中得到了启动参数, start.config 中有了 MainClass 和 Classpath 需要的 jar 包,则可以直接用 java xxx 方式启动了,要使用这种方式启动,只需要在 start.ini 中配置 –exec 参数即可。
MainClass 默认是 XmlConfigration 类,当然自定义的话,可以在 start.config 中去更改, XmlConfigration 做几件事情: 1 、根据 start.ini 中的定义的配置文件进行解析 , 例如 etc/jetty.xml 等 2 、通过自己的 IOC 将这些服务组件组装在一起 3 、最后调用 start 方法启动这些组件。
==========================
未完待续.....
发表评论
-
调试jdk中的源码,查看jdk局部变量
2013-06-15 23:30 1050调试jdk中的源码,查看jdk局部变量 2012-04 ... -
Eclipse快捷键 10个最有用的快捷键<转>
2013-04-11 23:28 1072Eclipse中10个最有用的快捷键组合 一个Eclip ... -
Lucene 3.6 中文分词、分页查询、高亮显示等
2012-12-09 23:35 18151、准备工作 下载lucene 3.6.1 : htt ... -
Maven实战(九)——打包的技巧(转)
2012-10-12 00:41 934“打包“这个词听起 ... -
基于Maven的web工程如何配置嵌入式Jetty Server开发调试环境(转)
2012-10-12 00:28 9231、首先在web工程的POM文件里添加依赖jar包如下: ... -
轻轻松松学Solr(1)--概述及安装[转]
2012-09-18 14:59 993概述 这段时间对企 ... -
分析Netty工作流程[转]
2012-09-04 19:02 886下面以Netty中Echo的例 ... -
让eclipse在ubuntu下面好看一点
2012-03-27 10:17 917<p> </p> <h1 cla ... -
zookeeper安装和应用场合(名字,配置,锁,队列,集群管理)[转]
2012-01-12 17:59 1647安装和配置详解 本文 ... -
Jakarta-Common-BeanUtils使用笔记[转]
2012-01-10 14:13 1154Jakarta-Common-BeanUtils ... -
一个关于Java Thread wait(),notify()的实用例【转】
2012-01-07 16:05 1020///// // ProducerConsume ... -
Java基础:Java中的 assert 关键字解析【转】
2012-01-06 19:50 1057J2SE 1.4在语言上提供了 ... -
一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发[转]
2012-01-06 15:02 1264六种异常处理的陋习 ... -
如何解决HP QC(Quality Center)在Windows 7下不能工作的问题
2011-12-26 10:48 1581HP QC(Quantity Center) 是一款不错的测 ... -
JAVA读写文件,中文乱码 【转】
2011-12-19 23:43 2117最近在做HTML静态生成,需要从硬盘上把模版文件的内容读出来。 ... -
Java 6 JVM参数选项大全(中文版)【转】
2011-12-19 19:51 969Java 6 JVM参数选项大全(中文版) 作者 ... -
使用assembly plugin实现自定义打包【转】
2011-12-13 01:58 968在上一篇文章中,讨论到在对maven的机制不熟悉的情况下,为了 ... -
使用maven ant task实现非标准打包[转]
2011-12-13 01:56 1046maven很强大,但是总有些事情干起来不是得心应手,没有使用a ... -
Java日期转换SimpleDateFormat格式大全【转】
2011-12-08 20:22 131124小时制时间 显示: public clas ... -
使用Spring的表单标签库
2011-11-22 20:08 107013.9. 使用Spring的 ...
相关推荐
与许多其他Web服务器不同,Jetty没有采用多层架构,而是采用了基于事件驱动的单线程模型,这使得它在处理高并发请求时表现出色。每个连接都由一个单独的线程负责,避免了线程上下文切换带来的开销,提高了系统性能。...
- Jetty服务器的安装非常简单,通常只需将下载的压缩包(如`jetty-distribution-7.6.5.v20120716`)解压到任意目录即可。解压后的目录包含了所有运行所需文件,包括启动脚本和配置文件。 - 部署Web应用时,只需将...
1. **Jetty服务器基础**:了解Jetty的基本架构和功能,包括它如何处理HTTP请求和响应,以及如何加载和执行Servlet。 2. **内嵌Jetty的实现**:学习如何通过Java代码创建并启动一个内嵌的Jetty服务器,这通常涉及...
#### 四、Jetty服务器架构 Jetty采用了层次分明的架构设计,便于扩展和维护。其核心架构图如下所示: - **Server**:顶层容器,管理所有组件。 - **Handler**:处理特定的请求。 - **Connectors**:负责建立网络...
Jetty 8.0是Java应用服务器的一种,主要用于托管Web应用程序。它是一个开源项目,以其轻量级、高效和易于...用户可以通过遵循read-Me.text中的指南来设置和运行Jetty服务器,然后将他们的Web应用部署到这个服务器上。
1. **Jetty服务器核心**:包含了运行Jetty服务器所需的基本组件。 2. **Servlet容器**:支持Servlet 3.1规范,可以处理HTTP请求并分发到对应的Servlet。 3. **配置文件**:如`start.ini`或`jetty.xml`,用于配置...
#### 二、Jetty架构分析 - **总括**:Jetty的核心设计理念在于其简洁高效的架构设计,使得开发者能够在短时间内轻松搭建起Web应用环境。 - **主要组成部分**:Jetty可以大致分为四个主要部分——`HttpServer`、`...
Jetty服务器的架构设计使其可以轻松地与其他Java库集成,例如Spring框架,这使得开发者能够在不增加太多复杂性的情况下构建复杂的Web应用。它的模块化特性意味着你可以根据需要选择安装和配置特定的服务,如...
为了方便管理和调试,Jetty提供了一些工具,如`jetty-maven-plugin`,它可以将Maven项目直接部署到Jetty服务器上。此外,还有`jetty-admin`和`jetty-console`等工具,用于远程管理和监控Jetty实例。 ### 《Jetty6_...
这个jar文件包括了Jetty服务器的基本架构,如服务器启动、线程池管理、HTTP连接器、请求处理等。此外,它还支持WebSocket、Continuation和 Comet编程模型,这些都是现代Web应用中的重要特性。 其次,jetty-...
为了在Jetty服务器上部署WebSocket应用,可以将WebSocket端点类打包到一个Java Web应用程序中,并通过Jetty的Web应用部署机制(如`web.xml`配置或使用Jetty的`Server`和`WebAppContext`类)进行部署。 标签"jetty...
综上所述,Android平台i-Jetty服务器在智能家居中的应用研究是一个涉及嵌入式技术、无线通信技术、计算机网络和数据处理等多个领域的综合性技术课题。通过将Android和i-Jetty这样的轻量级Web服务器结合起来,可以...
本实战项目旨在帮助初学者快速掌握Jetty的嵌入式使用方法,通过实例化和配置Jetty服务器,实现Web应用的快速启动和运行。 1. **Jetty简介** - Jetty是一个开源的HTTP服务器和Servlet容器,它遵循Java Servlet和JSR...
总的来说,Jetty 6.1.26虽然相对较老,但它体现了Jetty服务器的核心设计理念和优势,如轻量级、高性能和灵活性。尽管现代开发可能更倾向于使用更新的版本,但对于了解Jetty的历史和原理,以及在某些场景下部署旧项目...
4. **jetty-distribution-9.4.9.v20180320.zip**:这是Jetty 9.4.9的完整发行版,包含了运行Jetty服务器所需的所有组件和库。解压后,用户可以找到启动脚本、配置文件以及示例应用程序,帮助快速开始使用Jetty。 在...
【标题】"jetty-distribution-9.1.0.v20131115"指的是Jetty服务器的一个发行版本,这个版本发布于2013年11月15日。Jetty是一个开源的、轻量级的Java Web服务器和HTTP服务器,它主要被设计用于快速开发和部署Web应用...
在"run-jetty-run"插件中,它会描述如何将Jetty集成到Eclipse的工作流中,比如创建和管理Jetty服务器实例的菜单项和快捷方式。 2. **icons**: 此目录包含了插件在Eclipse界面中使用的图标,例如启动、停止Jetty...
内置 Jetty 服务器是 Spring Boot 的一个重要特性,允许开发者快速启动和运行 web 应用,而无需手动配置服务器。Jetty 是一个轻量级、高性能的开源 HTTP 服务器和 Java Servlet 容器,它被广泛用于各种类型的 web ...
i-jetty是一款基于Java语言实现的轻量级Web服务器和Servlet容器,它在Google Code上可以找到。这个源码库包含了i-jetty项目的版本3.1,提供了对HTTP协议的支持以及对Servlet规范的实现。本文将深入探讨i-jetty的核心...
在描述中提到的"lib"目录是Jetty的库文件夹,包含了运行Jetty服务器所需的各种依赖JAR文件。这些JAR文件涵盖了Jetty的核心组件、Servlet API、HTTP协议实现、以及其他支持性库,如JSP引擎、WebSocket实现等。理解lib...