用Java实现HTTP Multipart的服务端和客户端
今天简单介绍一下如何用Java支持HTTP Multipart的request和response。 整个项目的代码可以在https://github.com/mcai4gl2/multi下载。
在这个程序里,我们的业务场景很简单。在服务端有一个随机数生成器,可以生成随机的Integer和Guid,客户端通过服务,可以请求一个或多个随机数。同时,客户端可以向服务端发送一个或多个随机数,这些随机数会被加入到一个队列中,被其他的客户端通过请求获得。以下是我们的随机数Bean的定义:
@Override public RandNumber[] getRandomNumbers(int num) { HttpGet httpGet = new HttpGet(getMultipleUrl); httpGet.setHeader("MAX_NUM_NUMS", Integer.toString(num)); try { HttpResponse httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { ByteArrayDataSource source = new ByteArrayDataSource(httpResponse.getEntity().getContent(), "multipart/mixed"); MimeMultipart multipart = new MimeMultipart(source); List<RandNumber> numbers = new ArrayList<RandNumber>(); for (int index = 0; index < multipart.getCount(); index++) { numbers.add(randomNumberSerializer.deserializeRandomNumber(multipart.getBodyPart(index).getInputStream())); } return numbers.toArray(new RandNumber[numbers.size()]); } else { HttpEntity httpDataEntity = httpResponse.getEntity(); EntityUtils.consumeQuietly(httpDataEntity); return null; } } catch (Exception ex) { log.error("Failed to get multiple random numbers", ex); return null; } }除了代码,我还添加了Maven打包配置和发布到local tomcat的脚本。整个Maven项目会被打包成两个文件,一个JAR和一个WAR。JAR打包包含了一个Jetty的服务端程序入口,和一个SampleClient的程序入口。而另一个WAR包可以直接发布到Tomcat上进行调试。这些都是为了我们可以更方便的在本地进行代码调试,在tomcat的启动脚本中,我还打开了JPDA端口,这样我们可以通过IDE对部署在Tomcat上的服务端进行调试。
这些基本的配置,可以大大提高我们编程调试的效率。这也是我写这篇文章的另一个原因。希望这些配置,可以帮到有需要的朋友。