Jetty不仅可以拥有方便的服务器组件,也能很方便地发起Http请求。
Jetty的HttpClient组件可以用来向web服务器发起HTTP请求,解析响应内容,它有下面一些特性,比起JRE自带的要强大很多
1,默认是异步,也可以指定为同步
2,默认是非阻塞连接,也可以指定阻塞connectors
3,支持SSL协议
4,支持HTTP代理
5,支持HTTP认证机制
6,可以详细配置超时,连接数,线程池等设置
HttpClient API提供回调接口异步地处理服务器端返回,一个请求响应单元被成为exchange,HttpClient API里面有两个主要的类
org.eclipse.jetty.client.HttpClient 管理线程池,代理设置,Http认证的配置,connector类型设置,ssl以及超时等其它于特定一个交互无关的所有配置。
org.eclipse.jetty.client.HttpExchange 需要编程继承的父类,控制特定一次Http请求的所有相关内容(请求头,请求方法,响应内容等等)
package test.jetty; import java.io.IOException; import org.eclipse.jetty.client.Address; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.HttpExchange; import org.eclipse.jetty.io.Buffer; import org.eclipse.jetty.util.thread.QueuedThreadPool; public class TestClient{ public static void main(String[] args) throws Exception { HttpClient client = new HttpClient(); client.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL); client.setThreadPool(new QueuedThreadPool(50)); client.setMaxConnectionsPerAddress(10); client.setTimeout(5000); //启动之前先配置好 client.start(); HttpExchange exchange = new HttpExchange(){ @Override public void onConnectionFailed(Throwable arg0) { // TODO Auto-generated method stub System.err.println("failed to connect web server"); } @Override public void onException(Throwable arg0) { // TODO Auto-generated method stub System.err.println("unknown error"); } @Override public void onExpire() { // TODO Auto-generated method stub System.err.println("timeout"); } @Override public void onRequestCommitted() throws IOException { // TODO Auto-generated method stub System.out.println("request commited"); } @Override public void onRequestComplete() throws IOException { // TODO Auto-generated method stub System.out.println("request complete"); } @Override public void onResponseComplete() throws IOException { // TODO Auto-generated method stub System.out.println("response complete"); } @Override public void onResponseContent(Buffer arg0) throws IOException { // TODO Auto-generated method stub System.out.println("response content"); System.out.println(arg0.toString()); } @Override public void onResponseHeader(Buffer arg0, Buffer arg1) throws IOException { // TODO Auto-generated method stub System.out.println("response header"); System.out.println(arg0.toString() + " " + arg1.toString()); } @Override public void onResponseStatus(Buffer arg0, int arg1, Buffer arg2) throws IOException { // TODO Auto-generated method stub System.out.println("response status"); System.out.println(arg0.toString() + " " + arg1 + " " + arg2.toString()); } @Override public void onRetry() { // TODO Auto-generated method stub System.out.println("retry request"); } @Override public void onResponseHeaderComplete() throws IOException { // TODO Auto-generated method stub System.out.println("response header complete"); } }; exchange.setMethod("GET"); exchange.setAddress(new Address("www.baidu.com",80)); exchange.setRequestURI("/"); //client.send会立即返回,exchange会被分发给线程池去处理, client.send(exchange); System.out.println("send"); } }
运行结果
send request commited request complete response status HTTP/1.1 200 OK response header Date Sun, 23 Dec 2012 10:14:30 GMT response header Server BWS/1.0 response header Content-Length 9777 response header Content-Type text/html;charset=gbk response header Cache-Control private response header Expires Sun, 23 Dec 2012 10:14:30 GMT response header Set-Cookie BAIDUID=9E28256B347526A1BE2FA301AE032CE7:FG=1; expires=Sun, 23-Dec-42 10:14:30 GMT; path=/; domain=.baidu.com response header P3P CP=" OTI DSP COR IVA OUR IND COM " response header Connection Keep-Alive response header complete response content …content… response complete
上面的示例代码演示了异步请求,下面的代码演示如何做同步请求。
package test.jetty; import org.eclipse.jetty.client.Address; import org.eclipse.jetty.client.ContentExchange; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.util.thread.QueuedThreadPool; public class TestClient{ public static void main(String[] args) throws Exception { HttpClient client = new HttpClient(); client.setConnectorType(HttpClient.CONNECTOR_SELECT_CHANNEL); client.setThreadPool(new QueuedThreadPool(50)); client.setMaxConnectionsPerAddress(10); client.setTimeout(5000); //启动之前先配置好 client.start(); ContentExchange exchange = new ContentExchange(); exchange.setMethod("GET"); exchange.setAddress(new Address("www.baidu.com",80)); exchange.setRequestURI("/"); //client.send会立即返回,exchange会被分发给线程池去处理, client.send(exchange); System.out.println("send"); //阻塞等待 exchange.waitForDone(); System.out.println(exchange.getResponseStatus()); //System.out.println(exchange.getResponseContentBytes()); System.out.println(exchange.getResponseContent()); } }
还不知道在同步的情况下ContentExchange的哪个方法可以获取到响应头信息。。。
相关推荐
【Java HttpProxy实现详解——基于Jetty Servlet与HttpClient】 在Java开发中,有时我们需要创建一个HTTP代理服务器,以便转发客户端的HTTP请求到指定的目标服务器。本文将深入探讨如何使用Jetty Servlet容器和...
Java中的Jetty是一个轻量级、高性能且可嵌入式的Web服务器和Servlet容器,它以其简单...在学习和使用过程中,可以进一步研究压缩包中的jetty包,了解其内部结构和工作原理,这将有助于提升对Jetty的理解和应用能力。
版本号1.1.x - > Java的8,码头9.4.x 2.0.x - > Java的11,码头10.0.x 3.0.x > Java 11,Jetty 11.0.x用法普通ReactiveStreams的使用// Create and start Jetty's HttpClient.HttpClient httpClient = new ...
Java Web服务器Jetty使用手册
Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它允许开发者将Web服务器功能直接集成到他们的Java应用程序中。这种内嵌式部署模式在开发和调试阶段尤其有用,因为它提供了灵活的控制和快速的反馈循环。...
JeeSite 代码生成器的应用
在Java编程中,Apache HttpClient库提供了一个强大的工具,使得我们可以轻松地实现HTTP请求,特别是在需要与Servlet进行交互时。本篇文章将详细探讨如何使用HttpClient来访问Servlet,并阐述相关的核心知识点。 ...
这意味着使用 JDK 1.7.0_80 版本的 Java 运行时环境来启动 Jetty 服务器。 下面是 Eclipse EE 中 Jetty 的一些重要配置: 1. 服务器配置:在 Eclipse EE 中,可以在 Server 视图中配置 Jetty 服务器的启动参数,如...
而`embedded-jetty-websocket-examples_repo-moved.zip`则可能是一个包含实际源代码的归档文件,用于演示如何在Java项目中嵌入Jetty服务器并实现WebSocket功能。 让我们深入探讨一下使用Jetty实现WebSocket的基本...
在IT行业中,网络编程是构建和维护网站的关键技术之一,特别是对于ASP、PHP和JSP这三种服务器端脚本语言的环境配置,是网站开发者必须掌握的基础技能。这些语言为动态网页提供支持,使得网站能够根据用户交互或...
6. **Jetty Eclipse Plugin使用**:熟悉插件的安装和配置过程,学习如何在Eclipse中快速启动Jetty服务器、部署应用、调试Servlet和JSP,以及进行热部署和性能分析。 7. **性能调优**:了解如何通过调整Jetty的配置...
【标题】"安卓Android源码——i-jetty开源项目.zip" 涉及的主要知识点是Android平台下的网络服务器实现,具体来说就是使用Jetty作为服务器内核的开源项目。Jetty是一个轻量级、高性能的Java Web服务器和HTTP协议栈,...
本篇将详细讲解如何使用Jetty来指定一个端口,开通一个TCP服务。 首先,理解Jetty的基本结构。Jetty的核心组件包括Server、Connector和Handler。Server是整个Jetty服务器的入口点,Connector负责处理网络连接,而...
Java Jetty容器是一款轻量级、高性能的HTTP服务器和...总的来说,Java Jetty容器以其快速、轻量和灵活的特点,成为了Java Web开发中不可或缺的一部分,特别是在快速迭代和持续集成的开发流程中,它的优势尤为明显。
2. 使用bin目录下的start.jar启动Jetty,这个jar文件实际上是一个嵌入式的Java应用,包含了启动Jetty所需的所有环境。 3. 访问http://localhost:8080/(默认端口),即可看到你的Web应用。 除了基本的部署,Jetty还...
**Gradle Jetty 插件使用详解** 在Java Web开发中,Jetty是一个轻量级、高性能的HTTP服务器和Servlet容器,它支持多种部署方式,包括作为嵌入式服务器使用。Gradle,作为现代的构建工具,提供了丰富的插件生态系统...
Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。开源地址:...
- **本地调试**: 开发者可以使用i-jetty在设备上启动一个本地服务器,用于测试和调试应用的网络接口。 - **离线应用**: 应用可以在本地存储数据,并通过i-jetty提供一个本地API供用户在无网络连接时访问。 - **...
其次,由于Jetty服务器需要的Key文件类型通常是Java的keystore格式,即.jks文件,但多数服务商提供的证书是pfx或pem格式,所以需要进行格式转换。 将pfx格式证书转换为jks格式证书,可以通过Windows的CMD命令行完成...
Java Web开发是构建互联网应用程序的重要领域,它涵盖了服务器端编程、网页交互以及数据库管理等多个方面。本主题将深入探讨Java Web开发的核心基础知识,帮助你全面理解这一技术的内在机制。 一、Java Web 开发...