一个Jetty Server可以看成由一下几部分组成,其中Connector负责接收客户端的HTTP请求,请求的处理是由Handler来完成的。在上一个例子中HelloHandler的作用就是处理用户请求,并输出结果。
Handler在Jetty中是一个非常重要的东西,Jetty内部实现了一些Handler,可以分为一下几类:
1.协调Handler:负责将request路由到其他Handler的Handler(如:HandlerConnection, ContextHandlerConnection)
2.过滤Handler:负责向request中设置一些参数,然后再把请求转交给其他Handler(如:HandlerWapper, ContextHandler, SessionHandler)
3.生成Handler:负责生成响应的内容(如:ResourceHandler, ServletHandler)
Handler的接口是这样的:
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
在自定义Handler的时候,必须要实现这个方法,可以直接输出响应,也可以对Request做一些包装再把它交给下一个Handler。
Handler的强大的地方是可以为Jetty Server设置若干Handler,每个Handler完成自己的功能,Handler的处理过程如下:
HandlerList和HandlerConnection内部都可以设置若干Handler, Handler按顺序一个接一个的执行。对于HandlerList而言,只要有一个Handler将请求标记为已处理,或抛出异常,Handler的调用就到此结束。而HandlerConnection则不会结束,一直调用到最后一个Handler。
下面以一个具体的例子来说明,需要注意HandlerList和HandlerConnection的区别,代码里有注释:
public class ManyHandlers { public static void main(String[] args) throws Exception { Server server = new Server(8080); // create the handlers Handler param = new ParamHandler(); HandlerWrapper wrapper = new HandlerWrapper() { @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { request.setAttribute("welcome", "Wylazy"); super.handle(target, baseRequest, request, response); } }; Handler hello = new HelloHandler(); wrapper.setHandler(hello); Handler dft = new DefaultHandler(); //HandlerList会依次调用每一个Handler,直到某个Handler将请求标记为已处理,即setHandled(true); HandlerList list = new HandlerList(); list.setHandlers(new Handler[] { param, wrapper, dft }); RequestLogHandler log = new RequestLogHandler(); log.setRequestLog(new NCSARequestLog(File.createTempFile("demo", "log").getAbsolutePath())); //HandlerCollection会依次调用每一个Handler,即使请求已经被处理了 HandlerCollection handlers = new HandlerCollection(); handlers.setHandlers(new Handler[] { list, log }); server.setHandler(handlers); server.start(); server.join(); } public static class ParamHandler extends AbstractHandler { public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { Map params = request.getParameterMap(); if (params.size() > 0) { response.setContentType("text/plain"); response.getWriter().println(new JSONObject(params)); ((Request) request).setHandled(true); } } } }
参考:
http://zldeng1984.iteye.com/blog/1368376
相关推荐
【Jetty入门学习资料】 Jetty是一个轻量级、高性能的开源Servlet容器,它由Java编写,以JAR包形式提供API,便于开发者将其轻松集成到Java应用中。Jetty自1995年创立以来,已被众多知名项目如Apache Geromino、JBoss...
使用Jetty Server API是最基础的嵌入方式,通过创建Server对象,配置Connector(连接器)来监听端口,然后添加Handler(处理器)来处理请求。例如,可以创建一个简单的HTTP服务器,监听8080端口: ```java ...
- 嵌入Jetty意味着将Jetty服务器作为应用程序的一部分来运行,无需独立的服务器进程。 - 使用`org.eclipse.jetty.server.Server`类创建服务器实例,并配置监听端口、处理请求的Handler等。 - 配置Servlet容器,...
启动Jetty可以通过命令行方式执行Jetty安装目录下的启动脚本(如`start.jar`),或者通过编程的方式在Java应用程序中嵌入Jetty服务器。具体方法可以根据实际情况选择。 #### 五、总结 通过上述步骤,我们可以轻松...
2. **内嵌Jetty的实现**:学习如何通过Java代码创建并启动一个内嵌的Jetty服务器,这通常涉及导入相关的Jetty库,创建Server对象,配置Connector(如HTTP或HTTPS)和Handler(如WebAppContext)。 3. **Servlet容器...
1. 简化部署:通过嵌入Jetty,开发者可以直接在Java应用程序中运行Web服务,无需额外配置独立的服务器实例。 2. 快速启动:Jetty设计为快速启动和响应,这对于开发和测试环境尤其有用。 3. 动态更新:在嵌入式模式下...
嵌入Jetty到应用程序中也十分简便。以下是一个简单的示例代码片段,展示了如何创建一个监听8080端口的Server对象,设置一个默认Handler,并使用XML配置文件(如`jetty.xml`)初始化和启动服务器: ```java public ...
7. **类加载器**、**Jetty Connector的SSL配置**、**虚拟主机**、**管理服务器**、**JNDI配置**、**会话与集群**、**性能优化**、**异步Servlet、Ajax和Comet**以及**嵌入Jetty**等内容,都是指南中详细阐述的主题,...
18. **嵌入Jetty**:展示了如何将Jetty直接集成到应用程序中,实现自定义的web服务。 19. **安全**:探讨了Jetty的安全配置,如身份验证和权限管理。 20. **FAQ**:提供了常见问题解答,帮助读者解决在使用Jetty...
- **易于集成**:Jetty可以很容易地嵌入到其他Java应用中,作为内部服务器使用。 - **开源免费**:Jetty是开源软件,遵循Eclipse Public License协议,用户可以自由使用、修改和分发。 **1.3 Jetty项目历史和现状**...
15. **Embedding Jetty**:如何将Jetty嵌入到应用程序中,实现轻量级部署。 16. **JEE服务器整合**:指导如何与Java EE服务器集成。 17. **开发环境中的Jetty**:推荐的开发环境配置和使用方法。 18. **安全**:...
Jetty提供了多种Handler类型,每种Handler都有其特定的功能和使用场景。例如: - **ContextHandler**: 负责处理特定上下文路径的请求。 - **ServletContextHandler**: 提供Servlet容器的功能。 - **ResourceHandler...
- **构建与部署**:使用Maven的`war`插件可以打包Web应用为WAR文件,然后可以嵌入到Jetty中运行,或者部署到独立的Web服务器。 5. **实际应用示例** - 创建一个简单的Servlet,处理GET请求并返回HTML。 - 使用...
Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它允许开发者将Web服务器直接嵌入到他们的应用中,从而提供了极大的灵活性和控制权。Jetty被广泛应用于各种项目,从小型微服务到大型分布式系统,都有其...
Java中的Jetty是一个轻量级、高性能且可嵌入式的Web服务器和Servlet容器,它以其简单...在学习和使用过程中,可以进一步研究压缩包中的jetty包,了解其内部结构和工作原理,这将有助于提升对Jetty的理解和应用能力。
11. **jetty-proxy.jar**:如果你需要使用Jetty作为反向代理或负载均衡器,这个jar包包含了相关实现。 12. **jetty-client.jar**:如果你的应用需要作为HTTP客户端发送请求,这个jar包提供了客户端API。 13. **...
此外,书中还涉及了异步Servlet、Ajax、Comet的实现,如何嵌入Jetty到其他应用中,以及Jetty与JEE服务器的整合。对于开发环境的使用,安全问题的处理,以及常见问题解答(FAQ),作者也给出了相应的指导。 总的来说...
接下来,我们将探讨如何在Jetty中运行使用Struts2 Annotation的项目: ### 1. 配置和依赖 确保你的项目已经包含了以下依赖: - Jetty服务器库(例如`jetty-server`, `jetty-webapp`, `jetty-servlet`) - Struts2...
作为嵌入式服务器使用代码实例: Java代码 //代码:以嵌入模式启动Jetty import org.mortbay.http.HttpContext; import org.mortbay.http.HttpServer; import org.mortbay.http.SocketListener; import org.mortbay...
18. **嵌入Jetty**:将Jetty直接嵌入到Java应用程序中,简化部署流程。 19. **JEE服务器整合**:Jetty可与EJB容器配合,实现完整的Java EE功能。 20. **开发环境使用**:Jetty适合开发和调试,快速部署和更新应用...