HttpClient网络接口交互

来源:互联网 发布:网络映射如何做 编辑:程序博客网 时间:2024/05/01 18:34

在我之前的工作经历中有使用HttpClient直接进行的网络数据的传输,然后在这里我就将这个的过程以及相关的代码记录一下以防之后可能会使用到。

在这里我们简单的记录使用Httpclient进行接口的服务提供以及服务调用的两个方面的过程

服务端

在使用Httpclient进行数据交互的时候服务端的要求比较简单,一个servlet即可,在其中的部分数据的获取可能存在某些特殊的步骤,但是总体来说还是一个简单的servlet.

我们这就直接创建工程以及servlet(详细过程掠过)



具体的服务类的代码如下


package httpTest;import java.io.BufferedInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class service extends HttpServlet {public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("xxxxxxxxxxxxxxxxxxxxxxx");try {//准备存放数据的byte数组byte[] bufSource = null;//获取到输入流InputStream ins = request.getInputStream();    //准备缓冲读取流BufferedInputStream inStream = new BufferedInputStream(ins);//准备缓冲输出流ByteArrayOutputStream byteOut = new ByteArrayOutputStream();byte[] b = new byte[1024];int read = 0;//每次读取1024进行转存while ((read = inStream.read(b)) > 0) {byteOut.write(b, 0, read);}//写入到数组中bufSource = byteOut.toByteArray();//关闭流byteOut.close();inStream.close();ins.close();//流转字符串   字符集自选String strRequest = new String(bufSource, "GBK");System.out.println("strRequest  = "+strRequest);try {//获取输出流ServletOutputStream out = response.getOutputStream();response.setContentType("text/plain:charset=GBK");response.addHeader("Content-Disposition","inline; filename=\"temp.xml\"");response.reset();out.print(" zhengfang.sun response");out.flush();} catch (Exception ie) {throw ie;} finally {}} catch (Exception e) {}}}

然后我们将我们这个servletweb.xml里面注册一下


<servlet><servlet-name>test</servlet-name><servlet-class>httpTest.service</servlet-class></servlet><servlet-mapping><servlet-name>test</servlet-name><url-pattern>/test/*</url-pattern></servlet-mapping>

然后我们直接启动Tomcat就直接能够看到我们的结果了

客户端

我们有了服务端关键还是需要能够在其他应用中调用到这个服务才行,在服务端的例子中我们就简单的使用一个java工程来进行网络接口的调用,方便我们能够直观的看到我们的结果

新建一个java工程,然后写一个测试使用的类

package localhost.webserviceTest.test;import java.io.InterruptedIOException;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.params.HttpClientParams;import org.junit.Test;public class Httptest {  @Testpublic void communicate() throws Exception {byte[] bufSource = null;String serviceUrl = "";// HTTPConnection connection = null;PostMethod method = null;try {serviceUrl = "http://localhost:8080/HttpServicePro/test/x";String strSend = "zhengfang.sun requesting";//新建连接类HttpClient client = new HttpClient();//新建连接属性类HttpClientParams clientParams = new HttpClientParams();int soTimeout = 1000;// 返回超时时间int connectionManagerTimeout = 1000;// 连接超时时间//设置各个属性clientParams.setSoTimeout(soTimeout);clientParams.setConnectionManagerTimeout(connectionManagerTimeout);clientParams.setContentCharset("GBK");client.setParams(clientParams);client.getHttpConnectionManager().getParams().setConnectionTimeout(connectionManagerTimeout);method = new PostMethod(serviceUrl);//在这里我们将我们的请求信息(一般来说是XML或者是JSON的报文)放入到PostMethod中method.setRequestBody(strSend);//设置调用时候的头信息method.setRequestHeader("Content-type", "text/xml; charset=GBK");//执行调用int status = client.executeMethod(method);} catch (Exception e1) {throw new Exception(" 系统连接失败! ", new InterruptedIOException());}// 取得接受返回消息bufSource = method.getResponseBody();System.out.println("response ===== "+new String(bufSource,"GBK"));method.releaseConnection();}}


然后我们就能通过调用我们之前的那个servlet进行简单的测试了





0 0