Jetty 嵌入式 HelloWorld

简介

Jetty 是一个开源的项目,提供 HTTP 服务端、HTTP 客户端和 javax.servlet 容器。下面看如何利用 Jetty 的 API 快速开发嵌入式代码。

下载 Jar 包

Jetty 被分解很多 jar 包和依赖包,通过选择 jar 包的最小集合达到占用最小空间的目的。通常,最好使用像 Maven 一样的工具管理 jar 包,但本例中使用包含 Jetty 所有类的聚合 jar 包。可以用 curl 命令或者浏览器手动下载 jetty-all.jar

像下面这样使用 curl 命令:

1
2
3
mkdir Demo
cd Demo
curl -o jetty-all-uber.jar http://central.maven.org/maven2/org/eclipse/jetty/aggregate/jetty-all/9.3.7.v20160115/jetty-all-9.3.7.v20160115-uber.jar

HelloWorld

Jetty 官方文档中的 嵌入 Jetty一章有很多通过 Jetty API 编写的实例。本教程用只包含一个 Main 方法的简单 HelloWorld 处理器运行服务器。HelloWorld.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
package org.eclipse.jetty.embedded;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;

public class HelloWorld extends AbstractHandler {

@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html; charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println("<h1>Hello World</h1>");
baseRequest.setHandled(true);
}

public static void main(String[] args) throws Exception {
Server server = new Server(8080);
server.setHandler(new HelloWorld());
server.start();
server.join();
}
}

编译 HelloWorld

下面的命令编译 HelloWorld 类:

1
2
mkdir classes
javac -d classes -cp jetty-all-uber.jar HelloWorld.java

运行处理器和服务器

下面的命令运行 HelloWorld 实例:

1
java -cp classes:jetty-all-uber.jar org.eclipse.jetty.embedded.HelloWorld

在浏览器地址栏输入:http://localhost:8080 查看 HelloWorld 页面。