`
zhaohaolin
  • 浏览: 1011097 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用内嵌的HTTP服务器构建Java WEB应用【转】

 
阅读更多

通常我们会在众多的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服务器。

JAVA
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的一个例子

JAVA
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的代码很容易阅读,或者定制。

JAVA
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请求
    }
}
--EOF--
分享到:
评论

相关推荐

    《Java Web应用开发技术实用教程》-王红-电子教案

    这本书涵盖了Java Web开发的基础知识到高级技术,旨在帮助读者掌握构建动态网页和Web应用程序的技能。 在Java Web开发中,我们首先会接触到的是Servlet和JSP(JavaServer Pages)。Servlet是Java编程语言中的一个...

    内嵌式tomcat启动web工程

    内嵌式Tomcat是开发Java Web应用时常用的一种方式,它允许我们将Tomcat服务器与应用程序打包在一起,无需单独部署到外部服务器。这种方式尤其适合于快速开发、测试和演示,因为它简化了部署流程,并且便于自动化构建...

    Java内嵌式Tomcat-TomcatDemo

    Java内嵌式Tomcat,全称为Apache Tomcat,是一款开源且免费的应用服务器,主要用于部署和运行Java Servlet和JavaServer Pages(JSP)等Web应用程序。它由Apache软件基金会开发,是Java EE生态中的一个关键组件。在...

    JAVA里使用Jetty作为轻量级嵌入式的Web容器

    Java中的Jetty是一个轻量级、高性能且可嵌入式的Web服务器和Servlet容器,它以其简单易用和高效性在开发社区中广受欢迎。本文将深入探讨Jetty的基本概念、特性以及如何在Java项目中使用它。 1. **Jetty简介** - ...

    java内嵌浏览器jxbrowser使用教程

    Java内嵌浏览器JxBrowser是一款强大的工具,它允许开发者在Java应用程序中集成Web浏览器功能,其内核基于Chromium,因此能良好地兼容大部分基于现代Web标准的前端框架,如React、Vue、Angular等。本教程将深入讲解...

    jetty内嵌到java代码启动

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它允许开发者将Web服务器功能直接集成到他们的Java应用程序中。这种内嵌式部署模式在开发和调试阶段尤其有用,因为它提供了灵活的控制和快速的反馈循环。...

    Java Web从入门到精通光盘17-2

    此外,现代Java Web开发往往使用框架如Spring Boot,它极大地简化了配置过程,并提供了大量的开箱即用的功能,如自动配置、内嵌的Web服务器、安全管理和数据访问支持。 总的来说,"Java Web从入门到精通光盘17-2"是...

    基于 Spring Boot 构建 的 Java Web 平台企业级单体应用快速开发框架.zip

    标题中的“Java Web 平台”指的是使用 Java 语言进行 Web 开发的环境,包括服务器端技术和客户端技术。Spring Boot 提供了一个强大的后端支持,可以与各种前端技术(如 Thymeleaf、React、Angular 等)结合,实现...

    基于 Spring Boot 构建 的 Java Web 平台企业级单体应用快速开发框架,适合中小型项目的应用和开发.zip

    【标题】中的“基于 Spring Boot 构建的 Java Web 平台企业级单体应用快速开发框架”指的是一种利用Spring Boot技术构建的用于开发企业级Web应用程序的框架。Spring Boot是Spring框架的一个扩展,旨在简化Java Web...

    嵌入Java Web服务的桌面应用开发技术研究.pdf

    H2虽然是一个嵌入式数据库,但运行速度很快,功能也很完善,支持标准SQL和JDBC,支持事务和并发,支持内嵌模式、服务器模式和集群等多用应用模式,还提供有方便的Web控制台用于管理和操作数据库文件。 嵌入Java Web...

    WEB服务器和应用服务器之间的区别.doc

    ### WEB服务器和应用服务器之间的区别 #### 一、概述 在现代互联网技术中,服务器扮演着至关重要的角色,尤其在企业级应用开发中,WEB服务器和应用服务器的区别尤为重要。这两种服务器各自承担着不同的职责,相互...

    Tomcat7内嵌服务器

    内嵌服务器的概念指的是将Tomcat集成到应用程序内部,而不是作为独立的服务运行。这种方式使得开发和测试过程更加便捷,同时也方便了分布式部署。 【描述】:虽然描述中没有具体信息,但可以推断出该博客可能详细...

    《Java Web程序设计任务教程》-章节习题.docx 第1章网页开发基础 2.Java Web概述等

    Tomcat服务器是常用的Java Web应用服务器,默认监听8080端口。在XML文档中定义元素属性时,有四种声明方式:#REQUIRED表示属性必需,#IMPLIED表示属性可选,未指定则默认可选,还有提供默认值的声明方式。 第3章...

    基于Java实现的轻量级RESTful Web框架及内嵌服务器设计源码

    本项目提供了一套基于Java实现的轻量级RESTful Web框架及内嵌服务器设计源码,共计27个文件,其中包含25个Java源文件、1个Markdown文档和1个XML配置文件。该框架旨在替代JMX实现跨语言通信,适用于构建高效的Web服务...

    使用Java开发CLI、Desktop(JavaFX)、Web(SpringBoot)项目.zip

    Spring Boot的核心特性包括内嵌式Web服务器(如Tomcat或Jetty)、健康检查、应用指标和外部化配置。使用Spring Boot开发Web应用,我们通常会涉及到以下概念: - **MVC架构**:模型-视图-控制器设计模式,用于分离...

    基于java web构建的简单酒店管理系统(适合毕业设计).zip

    【标题】中的“基于java web构建的简单酒店管理系统”表明这是一个使用Java Web技术开发的用于管理酒店业务的应用程序。在Java Web开发中,通常会利用Servlet、JSP、JSTL等技术来处理HTTP请求,展示动态内容。SSM...

    Java_Web应用程序设计讲义

    ### Java Web 应用程序设计讲义知识点梳理 #### 第1章:JavaWeb编程基础 ##### 学习目标与导航 - **理解Web应用的基本概念**:包括Web应用的工作流程、组成部分及其工作原理。 - **熟悉JavaWeb编程的入门知识**:...

    Maven实践-使用Maven开发Web应用

    通过在POM.xml中配置相关插件,我们可以使用命令行工具`mvn tomcat7:run`来启动一个内嵌的Tomcat服务器,实时查看和调试应用。 在开发过程中,Maven的`clean`生命周期可以帮助清理项目,删除目标目录中生成的临时...

    java web 及 IO 的一些代码

    Java Web技术是构建互联网应用程序的一种核心方式,它涵盖了服务器端编程、动态网页生成以及与数据库交互等多个方面。在这个“java web 及 IO 的一些代码”压缩包中,我们可以期待找到一些关于Java Web基础和输入/...

    基于java web+ssm的商铺租赁管理系统.zip

    5. **Spring Boot**: 简化了Spring应用的启动和配置,通过内嵌的Tomcat服务器,可以快速构建独立运行的Web应用。 6. **微信小程序**: 这是基于微信生态的应用开发,可以让用户在微信内部直接访问和使用商铺租赁服务...

Global site tag (gtag.js) - Google Analytics