如何从Java中的自定义netty HTTP服务器发送文本和二进制数据?

时间:2013-06-12 23:42:43

标签: java http netty

基于netty 3.6我在我的Java桌面应用程序中实现了一个小型HTTP服务器。到目前为止,我已经成功创建了基本的HTTP服务器布局,我可以将各种基于文本的文件发送到基于浏览器的客户端。

在我的netty服务器管道工厂中,我创建了新的通道管道,如下所示:

pipeline.addLast("decoder", new HttpRequestDecoder());
pipeline.addLast("aggregator", new HttpChunkAggregator(1048576));
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("handler", new HttpServerHandler());

在我的HttpServerHandler课程中,我将文本数据发送给客户端,如下所示:

HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
response.setHeader(CONTENT_TYPE, contentType + "; charset=UTF-8");
response.setHeader(PRAGMA, "no-cache");
response.setContent(ChannelBuffers.copiedBuffer(responseText, CharsetUtil.UTF_8));

if(keepAlive)
{
    response.setHeader(CONTENT_LENGTH, response.getContent().readableBytes());
    response.setHeader(CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
}

ChannelFuture future = e.getChannel().write(response);

好。现在我还想将二进制数据(例如图像)发送给我的客户端。由于我没有找到关于如何实现这一点的在线示例,我有两个问题:

  1. 如何修改渠道管道以便能够将文本和二进制数据发送给我的客户?
  2. 如何修改HttpServerHandler类以便将二进制文件发送到客户端?

1 个答案:

答案 0 :(得分:0)

我认为上下文或二进制文件之间不存在任何差异。我认为你需要做的是正确设置内容类型。然后浏览器知道如何处理它。

如果要将png文件发送到浏览器,请将content-type设置为“image / png”。