Jetty 9嵌入式开发

jj 2014-11-19

官方网址:http://www.eclipse.org/jetty/

下载地址:http://download.eclipse.org/jetty/stable-9/dist/

文档网址:http://www.eclipse.org/jetty/documentation/

当前Jetty网址上推荐使用的稳定版本:Jetty9.0。

介绍

      Jetty9内容位于http://www.eclipse.org/jetty/documentation

      直接链接:

http://www.eclipse.org/jetty/documentation/current/embedding-jetty.html

      Jetty有一个标语,“不要部署你的应用在Jetty上,部署Jetty在你的应用中”。这意味着可选择使用Jetty捆绑你的应用作为一个标准WAR进行部署。Jetty设计成一个软件组件,可以实例化并且使用在Java程序中,例如:如何POJO。但是另外一种方法,以嵌入式模式运行Jetty,这意味着把HTTP模块放入到你的应用中,而不是把你的应用放入到HTTP服务中。

      本教程引导你逐步从最简单的Jetty服务实例到使用标准部署描述运行多个Web应用。大部分示例的源代码是标准Jetty项目的一部分。

      在学习该教程之前,完成一个HelloWorld教程是值得的。该教程可以在“嵌入式Jetty网络研讨会记录”中找到。

      Jetty版本:本教程的代码来自于Jetty7,但是也应该在Jetty 8中可以使用。对于最新的稳定版本,参考最新发行版的链接代码。可能与本教程中给出的代码例子有稍微的不同。

概述

      为了嵌入Jetty服务,通常执行下面的步骤:

      1)创建一个服务

      2)添加和配置连接器

      3)添加和配置处理器

      4)添加和配置Servlet、Webapp到处理器

      5)启动服务

      6)等待(join服务防止主线程退出)

创建一个服务

      下面的代码来自于SimplestServer.jar,实例化和运行一个最简单的Jetty服务

http://download.eclipse.org/jetty/stable-9/xref/org/eclipse/jetty/embedded/SimplestServer.html

public class SimplestServer

{

   public static void main(String[] args) throws Exception

    {

       Server server = new Server(8080);

       server.start();

       server.join();

    }

}

      在端口8080上运行一个HTTP服务。这不是非常有用的服务,因为它不处理,对于每个请求只是返回一个404错误。

编写处理器

      为了生成请求的响应,Jetty要求在服务上设置一个Handler。一个处理器可能:

1)  检查和修改HTTP请求

2)生成完整的HTTP详情

3)调用其他的处理器(参见HandlerWrapper)

4)选择一个或者多个处理器调用(参考HandlerCollection)

http://download.eclipse.org/jetty/stable-9/xref/org/eclipse/jetty/server/handler/HandlerWrapper.html

Hello world处理器:

下面代码基于HelloHandler.java,显示一个简单的Helloworld处理器。

public classHelloHandler extends AbstractHandler

{

    public void handle(String target,RequestbaseRequest,HttpServletRequest request,HttpServletResponse response)

        throws IOException, ServletException

    {

        response.setContentType("text/html;charset=utf-8");

       response.setStatus(HttpServletResponse.SC_OK);

        baseRequest.setHandled(true);

       response.getWriter().println("<h1>HelloWorld</h1>");

    }

}

传递给handle方法的参数包括:

1)  target - 请求的目标,它可以是一个URI或者命名分发器的名称

2) baseRequest – Jetty可变请求对象,它总是解包的

3)  request - 不可变的请求对象,它可能已经被封装

4) response - 响应,它可能已经被封装

处理器设置请求的状态,内容类型,在使用writer生成请求体之前标注请求已经处理(后续就不再处理)。

下面的代码来自于OneHandler.java,显示Jetty服务如何使用该处理器。

public staticvoid main(String[] args) throws Exception

{

    Server server = new Server(8080);

    server.setHandler(new HelloHandler());

 

    server.start();

    server.join();

}

现在你知道基于Jetty编写一个HTTP服务所需要了解的所有东西。然而,复杂的请求处理通常使用多处理器构建。我们在后面章节中看看它是如何组合处理器的。你能查看Jetty的org.eclipse.jetty.server.handler包中有那些可用处理器。

相关推荐