@Override
	public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
			throws Exception {
		HttpRequest request = (HttpRequest) e.getMessage();

		//打印头部信息
		printHeaders( request );
		
		// 不是POST方法也不是GET方法，返回。
		if ((request.getMethod() != GET) && (request.getMethod() != POST)) {
			sendError(ctx, METHOD_NOT_ALLOWED);
			return;
		}
		System.out.println("请求的URL = " + request.getUri());

		// 是否请求的UploadFile
		if (request.getUri().equalsIgnoreCase("/Uploadfile")) {
			if (request.getMethod() != POST) { // 不是请求的方法，返回 method_not_allowed
				sendError(ctx, METHOD_NOT_ALLOWED);
				return;
			}

			// 取得报文头部的长度字段。
			int len = (int) request.getContentLength();

			System.out.println("报文头部字段 Content-Length: = " + len);

			// 读出文件内容
			if (len > 0) { // 长度大于0
				// e 本身就已经包含了内容，直接转换为 ChannelBuffer
				Object msg = e.getMessage();
				if (msg instanceof HttpMessage) {// 是否 上个pipeline的返回结果。

					ChannelBuffer buffer = ((HttpMessage) msg).getContent();// ChannelBuffers.dynamicBuffer();
																			// //长度可变的buffer

					if (buffer.readable()) { // 含有内容
						int size = buffer.readableBytes(); // 可读取的字节数目
						byte[] dst = new byte[size];
						buffer.getBytes(0, dst);

						System.out.println(new String(dst)); // 输出后面的内容。
					}
				}
				else{
					System.out.println("不能处理的消息内容!");
				}
			}
		}

		// 如果请求的URL是 /, 则返回index.htm的内容
		if (request.getUri().equalsIgnoreCase("/")) {
			// ...
		}
		String strOut = "Hello,world! my netty server!";
		HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
		response.setHeader(CONTENT_TYPE, "text/html; charset=UTF-8"); // 设置响应的
																		// 编码：
																		// UTF-8
		setContentLength(response, strOut.getBytes().length);

		// 将内容写入缓存中
		ChannelBuffer buff = ChannelBuffers.buffer(strOut.getBytes().length);
		buff.writeBytes(strOut.getBytes());

		// 取得和客户端连接的 Channel
		Channel ch = e.getChannel();

		// Write the initial line and the header.
		ch.write(response); // Channel写入报文头部
		ChannelFuture writeFuture = ch.write(buff); // Channel中写入报文内容

		// Decide whether to close the connection or not.
		if (!isKeepAlive(request)) { // 如果http不需要保持连接的话，则关闭连接。
			// Close the connection when the whole content is written out.
			writeFuture.addListener(ChannelFutureListener.CLOSE);
		}
	}