Jetty 9嵌入式开发
官方网址: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包中有那些可用处理器。