- 浏览: 1011097 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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的个人使用心得【转】
通常我们会在众多的J2EE标准的基础上来构建自己的Java WEB应用,比如最常见的Servlet。这样写出来的程序可以在所有符合J2EE标准的WEB服务器上运行,比如Tomcat,JBoss等等。事实上大多数Java WEB项目也正是采用这种架构,这么做有很多很多好处。但是这么做也有一些问题,J2EE标准和J2EE服务器隐藏了大部分的HTTP底层消息处理细节,如果你的应用不需要利用的众多J2EE特性,或者需要一个严苛的性能要求,又或者希望可以自己处理一些HTTP底层,那么可以考虑采用内嵌的JAVA HTTP服务器,这些Embedded Java Http Server主要包括了:
- Netty,采用NIO,它来自JBoss,部分实现了zero-copy,而且文档和例子充足;
- Grizzly,GlassFish V3的内核。
- AsyncWeb,基于Apache Mina作为底层的NIO框架,性能不错,但是好像不更新了。
Apache Mina找不到打包好的代码,你似乎只能通过SVN来获得了,svn checkout http://svn.apache.org/repos/asf/mina/asyncweb/trunk。
所有这些内嵌服务器都可以方便的嵌入到你的Java应用中,并且体积小巧,可以通过编程的方法详细的控制从Http消息的全部生存周期。更加优秀的是它们的新能,采用NIO或者Temp Selector(Grizzly),它们的处理速度已经比tomcat这种“庞然大物”高出许多,在应用中你了解并且可以控制所有底层到高层的细节,这让后期的优化更加容易。当然,代价是你必须放弃J2EE带来的许多方便的特性,比如Servlet,数据源等等。如果你用过Playframework的话,就会了解到Servlet并不是最好的Java WEB架构(最起码不是“唯一”),而且体会到摆脱那些既有的J2EE标准的好处,现在playframework采用了Netty作为它的底层HTTP服务器。
Netty
Netty比其它两个更加“易于入门”,因为它有很多的文档和充足的例子,并且经过简单的代码,你就可以立即获得一个HTTP服务器。Playframework采用了Netty作为它的底层HTTP服务器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public class NettyServer { public static int httpPort; public static int httpsPort; public static void main(String[] args) throws Exception { new NettyServer(args);//new 操作即是启动服务器的方法 } public NettyServer(String[] args) { System.setProperty("file.encoding", "utf-8"); httpPort = 8000; ServerBootstrap bootstrap = new ServerBootstrap( new NioServerSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool())); try { bootstrap.setPipelineFactory(new HttpChannelPipelineFactory());//应用的业务逻辑接入点 bootstrap.bind(new InetSocketAddress(httpPort)); } catch (ChannelException e) { Logger.error("Could not bind on port " + httpPort, e); System.exit(-1); } } } |
Grizzly
Grizzly宣称自己的框架性能最好,它也是GlassFish的Http引擎(不过GlassFish我用着到不怎么好…)。
下面这个是Playframework grizzly module的一个例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public class Server { final GrizzlyWebServer ws; public Server(File applicationDir) { Properties p = Play.configuration; int httpPort = 80; httpPort = Integer.parseInt(System.getProperty("http.port")); ws = new GrizzlyWebServer(httpPort); ws.useAsynchronousWrite(true); ws.addGrizzlyAdapter(new PlayGrizzlyAdapter());//PlayGrizzlyAdapter是应用业务逻辑接口 try { ws.start();//启动服务器,监听Http请求 } catch (IOException e) { Logger.error("Could not bind on port " + httpPort, e); ws.stop(); System.exit(-1); } } public static void main(String[] args) throws Exception { File root = new File(System.getProperty("application.path")); new Server(root, System.getProperty("play.id", "")); } } |
AsyncWeb
这个项目好长时间不更新了,原来playframework是用AsyncWeb作为HTTP服务器的,但是最近改成了Netty。AsyncWeb和其它两个框架最不同的地方就是它可以采用Tomcat Native APR驱动底层socket接收框架,由于APR是一种本地库,可能更加有性能优势吧(没测试)。AsyncWeb是基于著名的Java NIO框架Apache Mina的,虽然AsyncWeb的文档很少,但是Mina的文档却很充足,如果你对Mina熟悉的话,AsyncWeb那300多KB的代码很容易阅读,或者定制。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Main { public static void main(String[] args) throws Exception { SocketAcceptor acceptor = new NioSocketAcceptor();//可以选择别的acceptor,比如APR acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new HttpCodecFactory())); acceptor.setReuseAddress(true); acceptor.getSessionConfig().setReuseAddress(true); acceptor.getSessionConfig().setReceiveBufferSize(1024); acceptor.getSessionConfig().setSendBufferSize(1024); acceptor.getSessionConfig().setTcpNoDelay(true); acceptor.setHandler(new HttpProtocolHandler());//实现自己的HTTP处理类,应用的接入点 acceptor.bind(new InetSocketAddress(9012));//启动服务器,监听Http请求 } } |
采用 知识共享署名-非商业性使用 3.0 Unported许可协议 进行许可
本文标题:使用内嵌的HTTP服务器构建Java WEB应用
永久链接: http://blog.cogipard.org/articles/more-flexiable-java-web-with-embedded-server
发表评论
-
Reactor模式和NIO<转>
2013-05-27 14:20 869本文可看成是对Doug Lea Scalable IO in ... -
Netty代码分析【转】
2011-09-28 15:40 945Netty提供异步的、事件驱动的网络应用程序框架和工具,用 ... -
使用netty 作为 http服务器【转】
2011-09-22 17:45 2837netty是继mina之后一个非常受欢迎的nio网络框架(其实 ... -
netty的粘包 解包问题【转】
2011-09-22 00:16 1680view plain 1、简介 ... -
netty和 procolbuffers结合使用【转】
2011-09-22 00:14 2852ProtocolBuffer是用于结构化数据串行化的灵活、 ... -
netty的个人使用心得【转】
2011-09-22 00:13 3873Netty是由JBOSS提供的一个java开源框架。Net ... -
netty心跳代码【转】
2011-09-22 00:12 4063类:ServerNIOHandler 别看名字是server它 ... -
通过 AtomicIntegerArray 或 AtomicInteger做简单的洪流控制【转】
2011-09-22 00:00 2197在设计系统的时候,为了防止雪崩效应我们都需要加入一些洪流控 ... -
Netty服务器线程模型概览【转】
2011-09-21 23:57 2366一切从ServerBootstrap开始 ServerBoo ... -
Netty NIO 框架性能压测-短链接-对比Tomcat【转】
2011-09-21 23:51 2209压测方案 准备多个文件大小分别为 1k 10k 100k ... -
Netty NIO 框架性能压测 – 长链接【转】
2011-09-21 23:50 1823压测准备 需要将ulimit -n 改大,否则nio链接开 ... -
Netty学习笔记(一)二进制流协议【转】
2011-09-21 23:40 2936一、协议 1. 请求: 字段 ... -
Netty实现原理浅析【转】
2011-09-21 12:53 939Netty是JBoss出品的高效 ... -
Netty使用初步【转】
2011-09-21 12:52 9911、简介 Java1.4提供了NIO使开发者可以使用Jav ...
相关推荐
这本书涵盖了Java Web开发的基础知识到高级技术,旨在帮助读者掌握构建动态网页和Web应用程序的技能。 在Java Web开发中,我们首先会接触到的是Servlet和JSP(JavaServer Pages)。Servlet是Java编程语言中的一个...
内嵌式Tomcat是开发Java Web应用时常用的一种方式,它允许我们将Tomcat服务器与应用程序打包在一起,无需单独部署到外部服务器。这种方式尤其适合于快速开发、测试和演示,因为它简化了部署流程,并且便于自动化构建...
Java内嵌式Tomcat,全称为Apache Tomcat,是一款开源且免费的应用服务器,主要用于部署和运行Java Servlet和JavaServer Pages(JSP)等Web应用程序。它由Apache软件基金会开发,是Java EE生态中的一个关键组件。在...
Java中的Jetty是一个轻量级、高性能且可嵌入式的Web服务器和Servlet容器,它以其简单易用和高效性在开发社区中广受欢迎。本文将深入探讨Jetty的基本概念、特性以及如何在Java项目中使用它。 1. **Jetty简介** - ...
Java内嵌浏览器JxBrowser是一款强大的工具,它允许开发者在Java应用程序中集成Web浏览器功能,其内核基于Chromium,因此能良好地兼容大部分基于现代Web标准的前端框架,如React、Vue、Angular等。本教程将深入讲解...
Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它允许开发者将Web服务器功能直接集成到他们的Java应用程序中。这种内嵌式部署模式在开发和调试阶段尤其有用,因为它提供了灵活的控制和快速的反馈循环。...
此外,现代Java Web开发往往使用框架如Spring Boot,它极大地简化了配置过程,并提供了大量的开箱即用的功能,如自动配置、内嵌的Web服务器、安全管理和数据访问支持。 总的来说,"Java Web从入门到精通光盘17-2"是...
标题中的“Java Web 平台”指的是使用 Java 语言进行 Web 开发的环境,包括服务器端技术和客户端技术。Spring Boot 提供了一个强大的后端支持,可以与各种前端技术(如 Thymeleaf、React、Angular 等)结合,实现...
【标题】中的“基于 Spring Boot 构建的 Java Web 平台企业级单体应用快速开发框架”指的是一种利用Spring Boot技术构建的用于开发企业级Web应用程序的框架。Spring Boot是Spring框架的一个扩展,旨在简化Java Web...
H2虽然是一个嵌入式数据库,但运行速度很快,功能也很完善,支持标准SQL和JDBC,支持事务和并发,支持内嵌模式、服务器模式和集群等多用应用模式,还提供有方便的Web控制台用于管理和操作数据库文件。 嵌入Java Web...
### WEB服务器和应用服务器之间的区别 #### 一、概述 在现代互联网技术中,服务器扮演着至关重要的角色,尤其在企业级应用开发中,WEB服务器和应用服务器的区别尤为重要。这两种服务器各自承担着不同的职责,相互...
内嵌服务器的概念指的是将Tomcat集成到应用程序内部,而不是作为独立的服务运行。这种方式使得开发和测试过程更加便捷,同时也方便了分布式部署。 【描述】:虽然描述中没有具体信息,但可以推断出该博客可能详细...
Tomcat服务器是常用的Java Web应用服务器,默认监听8080端口。在XML文档中定义元素属性时,有四种声明方式:#REQUIRED表示属性必需,#IMPLIED表示属性可选,未指定则默认可选,还有提供默认值的声明方式。 第3章...
本项目提供了一套基于Java实现的轻量级RESTful Web框架及内嵌服务器设计源码,共计27个文件,其中包含25个Java源文件、1个Markdown文档和1个XML配置文件。该框架旨在替代JMX实现跨语言通信,适用于构建高效的Web服务...
Spring Boot的核心特性包括内嵌式Web服务器(如Tomcat或Jetty)、健康检查、应用指标和外部化配置。使用Spring Boot开发Web应用,我们通常会涉及到以下概念: - **MVC架构**:模型-视图-控制器设计模式,用于分离...
【标题】中的“基于java web构建的简单酒店管理系统”表明这是一个使用Java Web技术开发的用于管理酒店业务的应用程序。在Java Web开发中,通常会利用Servlet、JSP、JSTL等技术来处理HTTP请求,展示动态内容。SSM...
### Java Web 应用程序设计讲义知识点梳理 #### 第1章:JavaWeb编程基础 ##### 学习目标与导航 - **理解Web应用的基本概念**:包括Web应用的工作流程、组成部分及其工作原理。 - **熟悉JavaWeb编程的入门知识**:...
通过在POM.xml中配置相关插件,我们可以使用命令行工具`mvn tomcat7:run`来启动一个内嵌的Tomcat服务器,实时查看和调试应用。 在开发过程中,Maven的`clean`生命周期可以帮助清理项目,删除目标目录中生成的临时...
Java Web技术是构建互联网应用程序的一种核心方式,它涵盖了服务器端编程、动态网页生成以及与数据库交互等多个方面。在这个“java web 及 IO 的一些代码”压缩包中,我们可以期待找到一些关于Java Web基础和输入/...
5. **Spring Boot**: 简化了Spring应用的启动和配置,通过内嵌的Tomcat服务器,可以快速构建独立运行的Web应用。 6. **微信小程序**: 这是基于微信生态的应用开发,可以让用户在微信内部直接访问和使用商铺租赁服务...