`
ipjmc
  • 浏览: 707610 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Handler(嵌入Jetty学习二)

阅读更多

    一个Jetty Server可以看成由一下几部分组成,其中Connector负责接收客户端的HTTP请求,请求的处理是由Handler来完成的。在上一个例子中HelloHandler的作用就是处理用户请求,并输出结果。

          Image:JettyUML1.png

    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

http://wiki.eclipse.org/Jetty/Howto/Write_Jetty_Handler

http://wiki.eclipse.org/Jetty/Reference/Jetty_Architecture

6
2
分享到:
评论

相关推荐

    Jetty入门学习资料

    【Jetty入门学习资料】 Jetty是一个轻量级、高性能的开源Servlet容器,它由Java编写,以JAR包形式提供API,便于开发者将其轻松集成到Java应用中。Jetty自1995年创立以来,已被众多知名项目如Apache Geromino、JBoss...

    jetty嵌入Web编程多种实现方式案例

    使用Jetty Server API是最基础的嵌入方式,通过创建Server对象,配置Connector(连接器)来监听端口,然后添加Handler(处理器)来处理请求。例如,可以创建一个简单的HTTP服务器,监听8080端口: ```java ...

    jetty嵌入项目实战

    - 嵌入Jetty意味着将Jetty服务器作为应用程序的一部分来运行,无需独立的服务器进程。 - 使用`org.eclipse.jetty.server.Server`类创建服务器实例,并配置监听端口、处理请求的Handler等。 - 配置Servlet容器,...

    Jetty使用总结

    启动Jetty可以通过命令行方式执行Jetty安装目录下的启动脚本(如`start.jar`),或者通过编程的方式在Java应用程序中嵌入Jetty服务器。具体方法可以根据实际情况选择。 #### 五、总结 通过上述步骤,我们可以轻松...

    Jetty内嵌服务器实例

    2. **内嵌Jetty的实现**:学习如何通过Java代码创建并启动一个内嵌的Jetty服务器,这通常涉及导入相关的Jetty库,创建Server对象,配置Connector(如HTTP或HTTPS)和Handler(如WebAppContext)。 3. **Servlet容器...

    jetty6 嵌入到 javaproject中

    1. 简化部署:通过嵌入Jetty,开发者可以直接在Java应用程序中运行Web服务,无需额外配置独立的服务器实例。 2. 快速启动:Jetty设计为快速启动和响应,这对于开发和测试环境尤其有用。 3. 动态更新:在嵌入式模式下...

    实战 Jetty--让你快速速学会jetty

    嵌入Jetty到应用程序中也十分简便。以下是一个简单的示例代码片段,展示了如何创建一个监听8080端口的Server对象,设置一个默认Handler,并使用XML配置文件(如`jetty.xml`)初始化和启动服务器: ```java public ...

    jetty6 指南书

    7. **类加载器**、**Jetty Connector的SSL配置**、**虚拟主机**、**管理服务器**、**JNDI配置**、**会话与集群**、**性能优化**、**异步Servlet、Ajax和Comet**以及**嵌入Jetty**等内容,都是指南中详细阐述的主题,...

    jetty指南书

    18. **嵌入Jetty**:展示了如何将Jetty直接集成到应用程序中,实现自定义的web服务。 19. **安全**:探讨了Jetty的安全配置,如身份验证和权限管理。 20. **FAQ**:提供了常见问题解答,帮助读者解决在使用Jetty...

    Jetty权威指南.pdf

    - **易于集成**:Jetty可以很容易地嵌入到其他Java应用中,作为内部服务器使用。 - **开源免费**:Jetty是开源软件,遵循Eclipse Public License协议,用户可以自由使用、修改和分发。 **1.3 Jetty项目历史和现状**...

    jetty 6 指南书

    15. **Embedding Jetty**:如何将Jetty嵌入到应用程序中,实现轻量级部署。 16. **JEE服务器整合**:指导如何与Java EE服务器集成。 17. **开发环境中的Jetty**:推荐的开发环境配置和使用方法。 18. **安全**:...

    jetty指导书

    Jetty提供了多种Handler类型,每种Handler都有其特定的功能和使用场景。例如: - **ContextHandler**: 负责处理特定上下文路径的请求。 - **ServletContextHandler**: 提供Servlet容器的功能。 - **ResourceHandler...

    jetty 8 嵌入web 及Jsoup测试

    - **构建与部署**:使用Maven的`war`插件可以打包Web应用为WAR文件,然后可以嵌入到Jetty中运行,或者部署到独立的Web服务器。 5. **实际应用示例** - 创建一个简单的Servlet,处理GET请求并返回HTML。 - 使用...

    jetty 嵌入式开发源码

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它允许开发者将Web服务器直接嵌入到他们的应用中,从而提供了极大的灵活性和控制权。Jetty被广泛应用于各种项目,从小型微服务到大型分布式系统,都有其...

    JAVA里使用Jetty作为轻量级嵌入式的Web容器

    Java中的Jetty是一个轻量级、高性能且可嵌入式的Web服务器和Servlet容器,它以其简单...在学习和使用过程中,可以进一步研究压缩包中的jetty包,了解其内部结构和工作原理,这将有助于提升对Jetty的理解和应用能力。

    jetty所需jar包

    11. **jetty-proxy.jar**:如果你需要使用Jetty作为反向代理或负载均衡器,这个jar包包含了相关实现。 12. **jetty-client.jar**:如果你的应用需要作为HTTP客户端发送请求,这个jar包提供了客户端API。 13. **...

    Jetty6_指南书

    此外,书中还涉及了异步Servlet、Ajax、Comet的实现,如何嵌入Jetty到其他应用中,以及Jetty与JEE服务器的整合。对于开发环境的使用,安全问题的处理,以及常见问题解答(FAQ),作者也给出了相应的指导。 总的来说...

    在嵌入式jetty环境下运行struts2Annotation项目

    接下来,我们将探讨如何在Jetty中运行使用Struts2 Annotation的项目: ### 1. 配置和依赖 确保你的项目已经包含了以下依赖: - Jetty服务器库(例如`jetty-server`, `jetty-webapp`, `jetty-servlet`) - Struts2...

    jetty-6.1.9 jspweb 服务器

    作为嵌入式服务器使用代码实例: Java代码 //代码:以嵌入模式启动Jetty import org.mortbay.http.HttpContext; import org.mortbay.http.HttpServer; import org.mortbay.http.SocketListener; import org.mortbay...

    jetty使用文档

    18. **嵌入Jetty**:将Jetty直接嵌入到Java应用程序中,简化部署流程。 19. **JEE服务器整合**:Jetty可与EJB容器配合,实现完整的Java EE功能。 20. **开发环境使用**:Jetty适合开发和调试,快速部署和更新应用...

Global site tag (gtag.js) - Google Analytics