java风格
① java的优势
JAVA的优势?
我来给你说一下Java的优势:
1.java的风格类似C++但不同于C++,从某种意义上讲,java是C++的一个变种;
2.java摒弃了C、C++中的容易引发错误和难以理解的指针,结构,以及内存管理等;
3.java提供了丰富的类库,很方便开发程序;
4.java是完全面向对象的语言,支持 继承,重载,多态等面向对象的特性;
5.C++是面向对象和面向过程的混合语言, C是纯面向过程的语言;
6.java是一种强类型的语言,比C/C++检查还要严格,java区分大小写字母;
7.java提供了自动垃圾回收机制gc,有效避免了C、C++的内存泄漏问题;
8.java禁止非法访问内存,因为java没有指针,内存的申请和释放;
9.跨平台,java的源代码编译成结构中立的中间格式,这种格式与机器无关,只要在安装有JVM(java虚拟机)的电脑上,都能运行这种与机器无关的中间文件;java一次编译,到处运行;
10.对于不同的操作系统,会有不同的java虚拟机,这也就决定了java的可移植性;
11.java支持多线程,简单理解,如果是单核CPU,那么会通过时间片轮转的方式,多线程执行程序,如果是多核CPU,那么就可以理解为,两个或多个线程同时运行。
web开发:
能做大型的互联网网站如,京东,淘宝,人人网、去哪儿网、美团等。
java在开发高访问、高并发、集群化的大型网站方面有很大的优势。
移动端开发:
目前手机上所有的APP后台代码及部分移动端页面java是都能够做到的。
客户端开发:
主要面向政府、事业单位和大型企业,如医疗、学校、OA、邮箱、投票、金融、考试、物流、矿山等信息方面的系统。这些应用在我们生活中其实随处可见,比如医院的挂号系统、公司的打卡系统、物流系统等。
说啦这么多那么应该如何学习Java那?
在这个里我使用脑图给大家出一个,Java的学习线路供大家参考:
评论领取欧!!!!!!!!
Java在市场中的占有率是非常之高的,希望大都成为优秀的程序员!!!
② 其 实 J A V A 是 什 么
Java,是一种可以编写跨平台应用软件的物件导向的程式语言,由升阳(太阳微电子,Sun Microsystems)公司的詹姆斯·高斯林(James Gosling)等人于1990年代初开发。它最初被命名为Oak,作为一种小家用电器的编程语言,用于解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近夭折之时,随着Inter的发展,Sun看到了Oak在电脑网络上的广阔应用前景,于是改造了Oak,在1995年5月以"Java"的名称正式发布了。Java伴随着Inter的迅猛发展而发展,逐渐成为重要的Inter程式语言。 Java程式语言的风格十分接近C++语言。Java继承了C++语言物件导向技术的核心,舍弃了C++语言中容易引起错误的指针(以引用取代)、运算符重载、多重继承(以接口取代)等成分,增加了自动垃圾收集功能用于回收不再被引用的对象所占据的记忆体空间。在J2SE1.5版本中Java又引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java不同于一般的编辑执行计算机语言和解释执行电脑语言。它首先将原始码编译成字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,这同时也在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的计算能力有了大幅提升。 与传统程序不同,Sun公司在推出Java之亏型际就将其作为一种开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互相容。“Java语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。 Sun公司对Java程式语言的解释是:Java程式语言是个简单、物件导向、分散式、解释性、健壮、安全与系统无关、可移植、高性能、多执行绪和动态的语言。 Java平台是基于Java语言的平台。这样的平台目前非常流行,因此微软公司推出了与之竞争的.NET平台以及模仿Java的C#语言。 Java名称的由来 在正式推出Java,升阳公司的工作人员正为了为这种新的程式语言取一个名称而苦恼。当时,这些软件工程师坐在充溢着香味的升阳公司总部一起边喝着爪哇咖啡一边思考。最后,大家一致同意以这种飘香的咖啡名字Java来命名这个新生的语言和技术。 早期的JAVA Oak语言的吉祥物,DukeJava平台和语言最开始只是升阳公司在1990年12开始研究的一个内部项目。升阳公司的一个叫做派屈克·诺顿的工程师被升阳自己开发的C++和C语言编译器搞得焦头烂额,因为其中的API极其难用。派屈克决定改用NeXT,同时他也获得了研究公司的一个叫做“Stealth 计划”的项目的机会。 “Stealth 计划”后来改名为“Green计划”,詹姆斯·高斯林和麦克·舍林丹也加入了派屈克的工作小组。他们和其他几个工程师一起在加利福尼亚州门罗帕克市沙丘路的一个小工作室里面研究开发新技术,瞄准下一代智能家电(如微波炉)的程序设计,升阳公司预料未来科技将在家用电器领域大显身手。团队最初考虑使用C++语言,但是很多成员包括升阳的首席科学家比尔·乔伊,发现C++和可用的API在某些方面存在很大问题。 工作小组使用的是内嵌类型平台,可以用梁薯的资源极其有限。很多成员发现C++太复杂以至很多开发者经常错误使用。他们发现C++缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多执行绪功能。最后,他们想要一种易于移植到各种设备上的平台。 根据可用的资金,比尔·乔伊决定开发一种集C语言和Mesa语言大成的新语言,在一份报告上,乔伊把它叫做“未来”,他销渣猜提议升阳公司的工程师应该在C++的基础上,开发一种物件导向的环境。最初,高斯林试图修改和扩展C++的功能,他自己称这种新语言为 C++ ++ --,但是后来他放弃了。他将要创造出一种全新的语言,被他命名为“Oak”(橡树)
以他的办公室外的树而命名。 就像很多开发新技术的秘密的工程一样,工作小组没日没夜地工作到了1992年的夏天,他们能够演示新平台的一部分了,包括Green作业系统,Oak的程式语言,类库,和其硬件。最初的尝试是面向一种类PDA设备,被命名为Star7,这种设备有鲜艳的图形界面和被称为“Duke”的智能代理来帮助用户。1992年12月3日,这台设备进行了展示。 同年11月,Green计划被转化成了“FirstPerson有限公司”,一个升阳公司的全资子公司,团队也被重新安排到了帕洛阿尔托。FirstPerson团队对建造一种高度互动的设备感兴趣,当时代华纳发布了一个关于电视机顶盒的征求提议书时(Request for proposal),FirstPerson改变了他们的目标,作为对征求意见书的响应, 提出了一个机顶盒平台的提议。但是有线电视业界觉得FirstPerson的平台给予用户过多地控制权,因此FirstPerson的投标败给了SGI。与3DO 公司的另外一笔关于机顶盒的交易也没有成功,由于他们的平台不能在电视工业产生任何效益,公司再并回升阳公司。 JAVA遭遇互联网 1994年6、7月间,在经历了一场历时三天的头脑风暴的讨论后,约翰·盖吉、詹姆斯·高斯林、比尔·乔伊、派屈克·诺顿、韦恩·罗斯因和埃里克·斯库米,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于全球资讯网。他们认为随着Mosaic浏览器的到来,互联网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,派屈克·诺顿写了一个小型全球资讯网浏览器,WebRunner,后来改名为HotJava。 同年,Oak改名为Java。商标搜索显示,Oak已被一家显示卡制造商注册,因此团队找到了一个新名字。这个名字是在很多成员常去的本地咖啡馆中杜撰出来的。名字是不是首字母缩写还不清楚, 很大程度上来说不是。 虽然有人声称是开发人员名字的组合:James Gosling(詹姆斯·高斯林)+Arthur Van Hoff(阿瑟·凡·霍夫)+Andy Bechtolsheim(安迪·贝克托克姆),或“Just Another Vague Acronym”(只是另外一个含糊的缩写)。还有一种比较可信的说法是这个名字是出于对咖啡的喜爱,所以以java咖啡来命名。类文件的前四个字节如果用十六进位阅读的话,分别为CA FE BA BE
就会拼出两个单词“CAFE BABE”(咖啡宝贝)。 1994年10月,HotJava和Java平台为公司高层进行演示。1994年, Java 1.0a版本已经可以提供下载,但是Java和HotJava浏览器的第一次公开发布却是在1995年3月23日SunWorld大会上进行的。升阳公司的科学指导约翰·盖吉宣告Java技术。这个发布是与网景公司的执行副总裁马克·安德森的惊人发布一起进行的, 宣布网景将在其浏览器中包含对Java的支持。1996年1月,升阳公司成立了Java业务集团,专门开发Java技术。 JAVA近况 在流行几年之后,Java在浏览器中的地位被逐步侵蚀。它在简单交互性动画方面的用途已经完全被Macromedia公司的Flash排挤,2005年Java倾向只被用于雅虎游戏那样的更为复杂的应用程序。Java同时遭受到来自微软的反对,他们决定在新版本的Inter Explorer和Windows中不再附带Java平台。 与此相反。在全球资讯网的服务端和手持设备上,Java变得更加流行。很多网站在前端使用JSP和其他的Java技术。 在桌面系统上,的Java程序还是相对少见,这是因为Java平台的运行开销较大,而许多人的电脑上没有安装Java,由于网络频宽在以前较小,下载Java曾经是个耗时的事情。但是随着电脑计算能力、网络频宽在10年中取得了很大的进步,同时虚拟机和编译器的质量得到了越高,许多应用程序得到了广泛的使用, 包括: zh. *** . /wiki/JAVA 2007-11-10 21:22:21 补充: zh. *** /w/index?title=Java&variant=zh-错了
Java,是一种可以编写跨平台应用软件的物件导向的程式语言,由升阳(太阳微电子,Sun Microsystems)公司的詹姆斯·高斯林(James Gosling)等人于1990年代初开发。它最初被命名为Oak,作为一种小家用电器的编程语言,用于解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近夭折之时,随着Inter的发展,Sun看到了Oak在电脑网络上的广阔应用前景,于是改造了Oak,在1995年5月以"Java"的名称正式发布了。Java伴随着Inter的迅猛发展而发展,逐渐成为重要的Inter程式语言。 Java程式语言的风格十分接近C++语言。Java继承了C++语言物件导向技术的核心,舍弃了C++语言中容易引起错误的指针(以引用取代)、运算符重载、多重继承(以接口取代)等成分,增加了自动垃圾收集功能用于回收不再被引用的对象所占据的记忆体空间。在J2SE1.5版本中Java又引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java不同于一般的编辑执行计算机语言和解释执行电脑语言。它首先将原始码编译成字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,这同时也在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的计算能力有了大幅提升。 与传统程序不同,Sun公司在推出Java之际就将其作为一种开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互相容。“Java语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。 Sun公司对Java程式语言的解释是:Java程式语言是个简单、物件导向、分散式、解释性、健壮、安全与系统无关、可移植、高性能、多执行绪和动态的语言。 Java平台是基于Java语言的平台。这样的平台目前非常流行,因此微软公司推出了与之竞争的.NET平台以及模仿Java的C#语言。 Java名称的由来 在正式推出Java,升阳公司的工作人员正为了为这种新的程式语言取一个名称而苦恼。当时,这些软件工程师坐在充溢着香味的升阳公司总部一起边喝着爪哇咖啡一边思考。最后,大家一致同意以这种飘香的咖啡名字Java来命名这个新生的语言和技术。 早期的JAVA Oak语言的吉祥物,DukeJava平台和语言最开始只是升阳公司在1990年12开始研究的一个内部项目。升阳公司的一个叫做派屈克·诺顿的工程师被升阳自己开发的C++和C语言编译器搞得焦头烂额,因为其中的API极其难用。派屈克决定改用NeXT,同时他也获得了研究公司的一个叫做“Stealth 计划”的项目的机会。 “Stealth 计划”后来改名为“Green计划”,詹姆斯·高斯林和麦克·舍林丹也加入了派屈克的工作小组。他们和其他几个工程师一起在加利福尼亚州门罗帕克市沙丘路的一个小工作室里面研究开发新技术,瞄准下一代智能家电(如微波炉)的程序设计,升阳公司预料未来科技将在家用电器领域大显身手。团队最初考虑使用C++语言,但是很多成员包括升阳的首席科学家比尔·乔伊,发现C++和可用的API在某些方面存在很大问题。 工作小组使用的是内嵌类型平台,可以用的资源极其有限。很多成员发现C++太复杂以至很多开发者经常错误使用。他们发现C++缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多执行绪功能。最后,他们想要一种易于移植到各种设备上的平台。 根据可用的资金,比尔·乔伊决定开发一种集C语言和Mesa语言大成的新语言,在一份报告上,乔伊把它叫做“未来”,他提议升阳公司的工程师应该在C++的基础上,开发一种物件导向的环境。最初,高斯林试图修改和扩展C++的功能,他自己称这种新语言为 C++ ++ --,但是后来他放弃了。他将要创造出一种全新的语言,被他命名为“Oak”(橡树)
以他的办公室外的树而命名。 就像很多开发新技术的秘密的工程一样,工作小组没日没夜地工作到了1992年的夏天,他们能够演示新平台的一部分了,包括Green作业系统,Oak的程式语言,类库,和其硬件。最初的尝试是面向一种类PDA设备,被命名为Star7,这种设备有鲜艳的图形界面和被称为“Duke”的智能代理来帮助用户。1992年12月3日,这台设备进行了展示。 同年11月,Green计划被转化成了“FirstPerson有限公司”,一个升阳公司的全资子公司,团队也被重新安排到了帕洛阿尔托。FirstPerson团队对建造一种高度互动的设备感兴趣,当时代华纳发布了一个关于电视机顶盒的征求提议书时(Request for proposal),FirstPerson改变了他们的目标,作为对征求意见书的响应, 提出了一个机顶盒平台的提议。但是有线电视业界觉得FirstPerson的平台给予用户过多地控制权,因此FirstPerson的投标败给了SGI。与3DO 公司的另外一笔关于机顶盒的交易也没有成功,由于他们的平台不能在电视工业产生任何效益,公司再并回升阳公司。 JAVA遭遇互联网 1994年6、7月间,在经历了一场历时三天的头脑风暴的讨论后,约翰·盖吉、詹姆斯·高斯林、比尔·乔伊、派屈克·诺顿、韦恩·罗斯因和埃里克·斯库米,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于全球资讯网。他们认为随着Mosaic浏览器的到来,互联网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,派屈克·诺顿写了一个小型全球资讯网浏览器,WebRunner,后来改名为HotJava。 同年,Oak改名为Java。商标搜索显示,Oak已被一家显示卡制造商注册,因此团队找到了一个新名字。这个名字是在很多成员常去的本地咖啡馆中杜撰出来的。名字是不是首字母缩写还不清楚, 很大程度上来说不是。 虽然有人声称是开发人员名字的组合:James Gosling(詹姆斯·高斯林)+Arthur Van Hoff(阿瑟·凡·霍夫)+Andy Bechtolsheim(安迪·贝克托克姆),或“Just Another Vague Acronym”(只是另外一个含糊的缩写)。还有一种比较可信的说法是这个名字是出于对咖啡的喜爱,所以以java咖啡来命名。类文件的前四个字节如果用十六进位阅读的话,分别为CA FE BA BE
就会拼出两个单词“CAFE BABE”(咖啡宝贝)。 1994年10月,HotJava和Java平台为公司高层进行演示。1994年, Java 1.0a版本已经可以提供下载,但是Java和HotJava浏览器的第一次公开发布却是在1995年3月23日SunWorld大会上进行的。升阳公司的科学指导约翰·盖吉宣告Java技术。这个发布是与网景公司的执行副总裁马克·安德森的惊人发布一起进行的, 宣布网景将在其浏览器中包含对Java的支持。1996年1月,升阳公司成立了Java业务集团,专门开发Java技术。 JAVA近况 在流行几年之后,Java在浏览器中的地位被逐步侵蚀。它在简单交互性动画方面的用途已经完全被Macromedia公司的Flash排挤,2005年Java倾向只被用于雅虎游戏那样的更为复杂的应用程序。Java同时遭受到来自微软的反对,他们决定在新版本的Inter Explorer和Windows中不再附带Java平台。 与此相反。在全球资讯网的服务端和手持设备上,Java变得更加流行。很多网站在前端使用JSP和其他的Java技术。 在桌面系统上,的Java程序还是相对少见,这是因为Java平台的运行开销较大,而许多人的电脑上没有安装Java,由于网络频宽在以前较小,下载Java曾经是个耗时的事情。但是随着电脑计算能力、网络频宽在10年中取得了很大的进步,同时虚拟机和编译器的质量得到了越高,许多应用程序得到了广泛的使用
由于你开过一些网页,网页内容需要用到 java applet,所以启动了这个 java client。 其实这个 client 是长驻的,平时即使看不见它的 icon,但它仍然是在运作中,所以个 icon 可以不理。 较新版的 client 可以选择隐藏,但如果隐藏不到的话,也没办法,reboot 后它就会回复隐藏。
③ 使用Java实现Comet风格的Web应用(一)
开始
在本文中 我将展示如何使用各种不同的 Java 技术构建一些简单的 Comet 风格的 Web 应用程序 读者对 Java Servlet Ajax 和 JavaScript 应该有一定的了解 我们将考察 Tomcat 和 Jetty 中一些支持 Comet 的特性 因此需要使用这两个产品的最新版本 本文使用 Tomcat 和 Jetty 另外还需要一个支持 Java 或更高版本的 JDK 本文使用 JDK 此外还需要看看 Jetty 的预发布版 因为它实现了 Servlet 规范 我们将在本文中研究该规范
理解 Comet
您可能已经听说过 Comet 因为它最近受到了一定的关注 Comet 有时也称反向 Ajax 或服务器端推技术(server side push) 其思想很简单 将数据直接从服务器推到浏览器 而不必等到浏览器请求数据 听起来简单 但是如果熟悉 Web 应用程序 尤其是 HTTP 协议 那么您就会知道 这绝不简单 实现 Comet 风格的 Web 应用程序 同时保证在浏览器和服务器上的可伸缩性 这只是在最近几年才成为可能 在本文的后面 我们将看看一些流行的 Java Web 服务器如何支持可伸缩的 Comet 架构 但首先我们来看看为什么要创建 Comet 应用程序 以及用于实现它们的常见设计模式
使用 Comet 的动机
HTTP 协议的成功毋庸置疑 它是 Internet 上大部分信息交换的基础 然而 它也有一些局限性 特别是 它是无状态 单向的协议 请求被发送到 Web 服务器 服务器处理请求并发回一个响应 — 仅此而已 请求必须由客户机发出 而服务器则只能在对请求的响应中发送数据 这至少会影响很多类型的 Web 应用程序的实用性 典型的例子就是聊天程序 另外还有一些例子 例如比赛的比分 股票行情或电子邮件程序
HTTP 的这些局限性也是它取得一定成功的原因 请求/响应周期使它成为了经典的模型 即每个连接使用一个线程 只要能够快速为请求提供服务 这种方法就有巨大的可伸缩性 每秒钟可以处理大量的请求 只需使用少量的服务器就可以处理很大数量的用户 对于很多经典的 Web 应用程序 例如内容管理系统 搜索应用程序和电子商务站点等等而言 这非常适合 在以上任何一种 Web 应用程序中 服务器提供用户请求的数据 然后关闭连接 并释放那个线程 使之可以为其他请求服务 如果提供初始数据之后仍可能存在交互 那么将连接保持为打开状态 因此线程就不能释放出来 服务器也就不能为很多用户服务
但是 如果想在对请求做出响应并发送初始数据之后 仍然保持与用户的交互呢?在 Web 早期 这一点常使用 meta 刷新实现 这将自动指示浏览器在指定秒数之后重新装载页面 从而支持简陋的轮询(polling) 这不仅是一种糟糕的用户体验 而且通常效率非常低下 如果没有新的数据要显示在页面上呢?这时不得不重新呈现同样的页面 如果对页面的更改很少 并且页面的大部分没有变化呢?同样 不管是否有必要 都得重新请求和获取页面上的一切内容
Ajax 的发明和流行改变了上述状况 现在 服务器可以异步通信 因此不必重新请求整个页面 现在可以进行增量式的更新 只需使用 XMLHttpRequest 轮询服务器 这项技术通常被称作 Comet 这项技术存在一些变体 每种变体具有不同的性能和可伸缩性 我们来看看这些不同风格的 Comet
Comet 风格
Ajax 的出现使 Comet 成为可能 HTTP 的单向性质可以有效地加以规避 实际上有一些不同的方法可以绕过这一点 您可能已经猜到 支持 Comet 的最容易的方式是轮询(poll) 使用 XMLHttpRequest 向服务器发出调用 返回后 等待一段固定的时间(通常使用 JavaScript 的 setTimeout 函数) 然后再次调用 这是一项非常常见的技术 例如 大多数 webmail 应用程序就是通过这种技术在电子邮件到达时显示电子邮件的
这项技术有优点也有缺点 在这种情况下 您期望快速返回响应 就像任何其他 Ajax 请求一样 在请求之间必须有一段暂停 否则 连续不断的请求会冲垮服务器 并且这种情况下显然不具有可伸缩性 这段暂停使应用程序产生一个延时 暂停的时间越长 服务器上的新数据就需要越多的时间才能到达客户机 如果缩短暂停时间 又将重新面临冲垮服务器的风险 但是另一方面 这显然是最简单的实现 Comet 的方式
现在应该指出 很多人认为轮询并不属于 Comet 相反 他们认为 Comet 是对轮询的局限性的一个解决方案 最常见的 真正的 Comet 技术是轮询的一种变体 即长轮询(long polling) 轮询与长轮询之间的主要区别在于服务器花多长的时间作出响应 长轮询通常将连接保持一段较长的时间 — 通常是数秒钟 但是也可能是一分钟甚至更长 当服务器上发生某个事件时 响应被发送并随即关闭 轮询立即重新开始
长轮询相对于一般轮询的优点在于 数据一旦可用 便立即从服务器发送到客户机 请求可能等待较长的时间 期间没有任何数据返回 但是一旦有了新的数据 它将立即被发送到客户机 因此没有延时 如果您使用过基于 Web 的聊天程序 或者声称 实时 的任何程序 那么它很可能就是使用了这种技术
长轮询有一种变体 这是第三种风格的 Comet 这通常被称为流(streaming) 按照这种风格 服务器将数据推回客户机 但是不关闭连接 连接将一直保持开启 直到过期 并导致重新发出请求 XMLHttpRequest 规范表明 可以检查 readyState 的值是否为 或 Receiving(而不是 或 Loaded) 并获取正从服务器 流出 的数据 和长轮询一样 这种方式也没有延时 当服务器上的数据就绪时 该数据被发送到客户机 这种方式的另一个优点是可以大大减少发送到服务器的请求 从而避免了与设置服务器连接相关的开销和延时 不幸的是 XMLHttpRequest 在不同的浏览器中有很多不同的实现 这项技术只能在较新版本的 Mozilla Firefox 中可靠地使用 对于 Internet Explorer 或 Safari 仍需使用长轮询
至此 您可能会想 长轮询和流都有一个很大的问题 请求需要在服务器上存在一段较长的时间 这打破了每个请求使用一个线程的模型 因为用于一个请求的线程一直没有被释放 更糟糕的是 除非要发回数据 否则该线程一直处于空闲状态 这显然不具有可伸缩性 幸运的是 现代 Java Web 服务器有很多方式可以解决这个问题
Java 中的 Comet
现在有很多 Web 服务器是用 Java 构建的 一个原因是 Java 有一个丰富的本地线程模型 因此实现典型的每个连接一个线程的模型便非常简单 该模型对于 Comet 不大适用 但是 Java 对此同样有解决的办法 为了有效地处理 Comet 需要非阻塞 IO Java 通过它的 NIO 库提供非阻塞 IO 两种最流行的开源服务器 Apache Tomcat 和 Jetty 都利用 NIO 增加非阻塞 IO 从而支持 Comet 然而 这两种服务器中的实现却各不相同 我们来看看 Tomcat 和 Jetty 对 Comet 的支持
Tomcat 和 Comet
对于 Apache Tomcat 要使用 Comet 主要需要做两件事 首先 需要对 Tomcat 的配置文件 server XML 稍作修改 默认情况下启用的是更典型的同步 IO 连接器 现在只需将它切换成异步版本 如清单 所示
清单 修改 Tomcat 的 server xml <! ThisistheusualConnector mentitoutandaddtheNIOone ><! ConnectorURIEncoding= utf connectionTimeout= port= protocol= HTTP/ redirectPort= / ><ConnectorconnectionTimeout= port= protocol= apache coyote redirectPort= />
Servlet 这显然是 Tomcat 特有的一个接口 清单 显示了一个这样的例子
lishixin/Article/program/Java/hx/201311/26770