`
kiki1120
  • 浏览: 315865 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

在应用程序中嵌入HTTP服务引擎Jetty

阅读更多

Jetty是一个非常适合用于嵌入的HTTP服务引擎,它是一个轻量级、高性能和可靠性、可嵌入的、可扩展的HTTP服务器。当然,我们还关心它的功能,Jetty支持JSP和Servlet。有这两样就已经足够应付开发一般的管理界面了。由于下载的Jetty的压缩包解压后目录不少,并且文件也都不小,为了避免第一次使用Jetty的读者感到茫然,我们将开发一个DEMO程序并将Jetty嵌入其中,同时整理出Jetty运行的最小集,也就是把不必要的文件滤去以减小文件的大小。

 

Jetty的体系结构

Jetty不仅是一个HTTP服务器且是一个遵循标准(Servlet 2.3)的Servlet容器。下图是Jetty的主要类结构图。其中类org.mortbay.http.HttpServer提供了HTTP服务的核心,而org.mortbay.jetty.Server扩展HttpServer来实现对XML配置信息以及小服务程序Servlet的支持。

 

也就是说如果你只需要支持静态页面那么就执行org.mortbay.http.HttpServer,如果需要支持JSP或者Servlet那就要使用org.mortbay.jetty.Server,在这里我们需要的是第二个类,因为只有动态的页面才对我们有用。

 

Jetty的运行结构及其所需的环境

通过对Jetty的测试和提炼发现,如果仅仅是需要一个支持JSP和Servlet的引擎,那么我们完全可以抛弃Jetty压缩包中的大部分文件。下面我们针对两种不同的应用:只支持静态页面以及支持动态JSP页面,分别给出其所需要的最小运行环境。

 

1.只支持静态页面的HTTP Server

该应用仅仅需要两个jar文件:org.mortbay.jetty.jar来自jetty压缩包中的lib目录;javax.servlet.jar来自SUN或者jetty压缩包中的lib目录。有了这两个文件即可运行一个HTTP服务器。由于Jetty把当前目录当成页面的根目录,因此我采用以下的目录结构来运行一个简单的HTTP Server:

 

httpd\         服务所在目录
\httpd\lib    库文件目录,存放jetty.jar以及servlet.jar
\httpd\html 存放静态页面的目录

转到html目录下使用如下启动HTTP Server的命令,执行完毕后可以通过浏览器访问本机的8080端口即可列出html目录下的所有文件,或者直接可以访问到某个html文件或者其他二进制文件。

 

java –Djava.ext.dirs=..\lib org.mortbay.http.HttpServer 8080

 

所需库文件大小加起来不超过700K,达到我们前面提出的“小”的要求!

2.支持JSP/Servlet的服务引擎

我们前面提到过,支持小服务程序的容器类org.mortbay.jetty.Server是从HttpServer类继承过来的,在HTTP服务的基础上提供了对JSP以及Servlet的支持。在JSP的处理上Jetty使用的是Jakarta的Jasper项目(Tomcat也是使用该项目进行JSP的处理的,可靠性可想而知),因此需要Jasper项目的库文件以及一个用于发布页面的库分别是:

 

jasper-compiler.jar 用于编译JSP文件的库
jasper-runtime.jar 用于执行JSP的库
ant.jar 用于执行自动编译和发布的库

同样的需要把这三个库文件加到我们刚才的httpd\lib目录下。小服务引擎和Http服务不仅仅是增加几个库文件,它还需要很多的参数信息,Jetty把这些参数信息放入到一个XML文件中,这个文件可以直接从Jetty的压缩包中etc目录下的jetty.xml文件复制过来做一些小改动即可,关于这个配置文件中各项参数的意思我们接下来的如何开发基于Jetty的页面程序再详细介绍。接下来需要建两个目录,一个是logs目录用来存放访问日志文件的,另外一个是webapps目录用来存放web应用程序,这两个目录名都可以通过jetty.xml来修改。为了验证服务是否正常运行,我们先创建一个最简单的只有一个测试页面的应用,在webapps目录下建目录test,然后在test目录下新建JSP文件hello.jsp内容如下:

现在可以启动并测试一个最简化的Jetty的服务了,在如上图所示的JETTY目录下执行:

 

java -Djava.ext.dirs=lib org.mortbay.jetty.Server jetty.xml

 

然后就可以使用浏览器来测试一下运行的情况,地址是:http://liudong:8080/test/hello.jsp,浏览器就会有 你好,Jetty的输出。因为Jetty需要处理xml配置信息,建议使用JDK1.4,否则你可能会收到很多类找不到的异常信息,当然你可以把xml处理的库文件拷贝到lib目录下。

 

再来看看现在我们提取出来的Jetty目录的大小:1.6兆,其中有一半以上是用来处理JSP文件的。这个大小应该也是令我们满意的。

 

如何开发基于Jetty的页面程序

“啊,这个都要讲,不是说符合J2EE的Web应用程序标准嘛?难道Jetty有什么不同吗?” 呵呵,没错,Jetty跟其他的小服务容器没有什么不同,但是这都是Jetty自己说的,为了保险起见我们还是需要验证一下,另外Jetty的一些配置以及如何发布我们自己的应用还是需要了解一下。

 

首先来看看配置方面,Jetty把所有的配置信息都集中在jetty.xml中,我们可以修改该文件来达到修改服务引擎所运行的端口、web应用程序所在的目录以及其他的一些配置。最重要的还是web应用程序所在的目录,Jetty默认的目录是当前目录下的webapps目录。找到jetty.xml中的下面这段即可根据自己的需要来修改文档的主目录。

<Set name="rootWebApp">root</Set>
  <Call name="addWebApplications">
    <Arg></Arg>
    <Arg><SystemProperty name="jetty.home" default="."/>/webapps/</Arg>
    <Arg>org/mortbay/jetty/servlet/webdefault.xml</Arg>
    <Arg type="boolean">true</Arg>
</Call>

 

根据默认的设置,我们只需要把web应用程序的目录直接拷贝到webapps目录下,或者将war文件拷贝到该目录让Jetty自动发布,不过当发布一个新的应用时需要重新启动Jetty。

 

如果发布已经没问题了,那么我们可以来验证Jetty是否支持标准的web应用程序。最简单的办法及时拷贝一个在Tomcat下运行很好的web应用到Jetty的webapps目录,我测试的是一个基于struts框架开发的开放源码的页面菜单项目struts-menu,经过测试你不会发现跟它在Tomcat下运行有什么两样。放心开发你的应用吧。

 

简单嵌入Jetty的源码

前面我们都是在介绍Jetty这个项目以及如何在它之上开发应用程序,这好像跟我们的题目相背离,真的吗?当然不是,前面的内容为了就是验证Jetty是否适合嵌入到我们的应用程序中,而真正的嵌入则是非常的简单,可以说两三行代码就可以完成的事情。人类不也是经常耗费很长的时间来验证一个看似简单的结论吗?虽然是简单我们还是给一个例子用来嵌入Jetty服务。

 

package lius.jetty.demo;

import org.mortbay.jetty.Server;

/**
 * 用于嵌入Jetty的简单例子 *
 * 
 * @author Liudong
 */
public class HttpService {
	public static void main(String[] args) {
		Server.main(new String[] { "jetty.xml" });
	}
}

 

 

天啊,这种程序我实在拿不出手啊!

 

不过这只是一个启动Jetty服务的最简单的例子,这样使得Jetty和我们自己的程序运行在同一个进程内,互相访问已经是没有问题了,至于如何实现管理功能那是你自己的事了。

 

其他注意事项

1.Jetty目前还不支持类更新重新加载
2.Jetty将编译JSP文件所生成的java文件以及class文件放置到系统临时目录中一个与web应用名称对应的目录,例如C:\Temp\Jetty__8080__struts-menu下,这个目录的内容会在Jetty关闭并重新启动成功后清除,也就是说Jetty每重新启动一次所有的web应用程序在被访问之前都要重新编译一次。

 

分享到:
评论

相关推荐

    jetty6.1.6-2

    Jetty在设计时强调了性能、可嵌入性和稳定性,使其成为开发和测试Web应用程序的理想选择。 在描述中提到的"lib"目录是Jetty的库文件夹,包含了运行Jetty服务器所需的各种依赖JAR文件。这些JAR文件涵盖了Jetty的核心...

    jetty相关所有jar包

    Jetty是一款轻量级、高性能且开源的Java Web服务器和HTTP服务器库,广泛用于嵌入式应用、测试环境以及小型到大型的Web应用程序。它支持Servlets、WebSocket、JSP等标准,并且提供了灵活的部署模型。这个压缩包文件...

    嵌入式jetty服务器开发所有的依赖jar包

    嵌入式Jetty服务器开发是Java应用程序中常用的一种轻量级Web服务器实现,它允许开发者在无需外部服务器的情况下,直接将Web服务功能嵌入到应用中。本压缩包提供了进行嵌入式Jetty开发所需的所有关键依赖jar包,极大...

    Simple 2.0 - Java HTTP 引擎

    Simple提供一个框架,并且可以嵌入到任何现有的应用程序之中。与Spring 框架结合更完美。 4.占用内存小 尽管具有很高的扩展性,但是Simple占用的内存却很小。用最近的基准来与比其他的NIO服务器(Jetty and ...

    maven构建的一个简单的spring mvc运行在jetty下的代码

    3. Jetty:Jetty是一个轻量级的开源HTTP服务器和Servlet容器,它可以直接嵌入到Java应用中,无需额外的服务器。在Spring MVC项目中,Jetty可以作为运行时环境,快速启动和部署Web应用。 4. 源码:在这个项目中,...

    jetty-distribution-9.4.9.v20180320.zip

    7. **嵌入式使用**:Jetty的一个独特之处在于其可以轻松地嵌入到其他Java应用中,这样开发者可以直接控制Web服务器的生命周期,而无需单独部署一个服务器进程。 8. **社区支持和文档**:Jetty拥有活跃的社区和详尽...

    java 嵌入技术

    Java嵌入技术是一种将Java平台的功能和特性整合到其他应用程序或系统中的技术。它允许开发者在非Java环境中利用Java的强大功能,例如在桌面应用、Web应用、移动应用甚至是硬件设备中嵌入Java代码。Java的跨平台性...

    JSP应用程序开发指南

    动态元素在服务器上执行,然后将结果嵌入到静态内容中,最终发送给客户端。**JSP语法**包括脚本元素(scriptlet、表达式、声明),它们分别用于编写Java代码、插入Java变量值和声明变量或方法。 **JSP生命周期**...

    equinox-jetty-birt:BIRT 报告简单的运行时示例

    它可以嵌入到任何Web应用中,让用户在浏览器中查看、打印和导出报表。在"equinox-jetty-birt"示例中,BIRT查看器被配置在Jetty服务器上,使得用户可以通过HTTP请求访问报表。 **示例项目结构** "equinox-jetty-birt...

    java http服务器

    Java HTTP服务器是一种轻量级的网络服务程序,它允许开发者在Java平台上构建Web应用程序,而无需依赖大型的Servlet容器如Tomcat或Jetty。描述中提到的服务器可能是一个小型、快速且易于理解的实现,适合学习和开发...

    jsp java聊天程序

    【JSP Java聊天程序】是一种基于Java技术的网络应用程序,用于实现用户间的实时交流。它结合了JavaServer Pages(JSP)和Java编程语言的优势,为用户提供了一个动态、交互式的在线聊天平台。JSP主要用于创建动态网页...

    flowable 6.2官方汉化文档带运行demo

    - 提供流程API调用,允许开发者在应用程序中嵌入和管理流程。 - 包含示例应用程序,如Flowable Modeler(流程设计器)、Flowable Admin(管理控制台)、Flowable IDM(身份管理)和Flowable Task(任务管理)。 - ...

    jetty.project:EclipseJetty:registered:-Web容器和客户端-支持HTTP2,HTTP1.1,HTTP1.0,websocket,servlet等

    Jetty是一种现代的完全异步的Web服务器,作为一种面向组件的技术,它很容易嵌入到应用程序中,同时仍为Webapp部署提供可靠的传统分发,历史悠久。 文献资料 项目文档可从Jetty Eclipse网站获得。 建造 要构建,请...

    lift-jquery-module_2-6_2.10-2.7.zip

    Jetty是一个轻量级、高性能的Java Web服务器和Servlet容器,它可以直接嵌入到Java应用程序中,无需独立部署。通过嵌入Jetty,开发者可以在应用内部直接启动HTTP服务器,这对于开发、测试和小型部署非常方便,因为它...

    apache-tomcat-7.0.55.rar

    它作为中间件,连接了前端用户界面和后端数据服务,提供了一个轻量级的平台来部署和管理Web应用程序。Tomcat 7.0.55是这个系列的一个版本,发布于2014年,包含了若干安全更新和性能改进。 Apache Tomcat的设计遵循...

    《java web程序设计》光盘全部代码-----学jsp的必看

    《Java Web程序设计》是一本深入探讨如何使用Java技术构建Web应用程序的专业书籍,其光盘包含的全部代码是学习JSP(JavaServer Pages)的重要参考资料。对于任何希望掌握Web开发的Java程序员来说,这本书和相应的...

    gradle spring-boot demo JSP打WAR包

    3. **RESTful**: REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,用于构建分布式系统。在Spring Boot中,可以通过使用`@RestController`注解来创建RESTful API,...

    jfinal 和 activiti整合例子

    Jetty是一款轻量级的Java Web服务器和Servlet容器,它可以直接嵌入到应用程序中,无需独立部署。在JFinal项目中,通过引入Jetty插件,可以方便地以Jetty方式启动项目,提高开发和测试效率。 五、实际应用示例 以一...

    birt-runtime-4_3_0.rar

    这个"birt-runtime-4_3_0.rar"压缩包包含的是BIRT运行时环境的第4.3.0版本,它是一个用于在应用程序中嵌入报表功能的关键组件。 在BIRT 4.3.0版本中,我们可以找到以下几个重要的知识点: 1. **BIRT架构**:BIRT...

    jsp程序设计指南 清华出版社

    JSP是Java平台上的一个重要组件,用于创建交互式、数据驱动的Web应用程序。它结合了HTML、Java代码和内置对象,提供了强大的服务器端脚本能力。 1. **JSP基本概念** - JSP页面结构:JSP页面由静态HTML和嵌入的Java...

Global site tag (gtag.js) - Google Analytics