Java HttpURLConnection 以数据流写数据到Servlet
***************************************************
客户器端代码,响应请求流
***************************************************
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
public class StreamPostTest {
public static final String ENCODING_REQUEST = "utf-8";
public static final String ENCODING_RESPONSE = "gb2312";
public static void main(String args[]) {
String requestString = "我们要以流发送的数据...";
HttpURLConnection httpURLConnection;
try {
//建立链接
URL gatewayUrl = new URL("http://localhost/xmlTest.do");
httpURLConnection = (HttpURLConnection) gatewayUrl.openConnection();
//设置连接属性
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setUseCaches(false);
//获得数据字节数据,请求数据流的编码,必须和下面服务器端处理请求流的编码一致
byte[] requestStringBytes = requestString.getBytes(ENCODING_REQUEST);
//设置请求属性
httpURLConnection.setRequestProperty("Content-length", "" + requestStringBytes.length);
httpURLConnection.setRequestProperty("Content-Type", "application/octet-stream");
//建立输出流,并写入数据
OutputStream outputStream = httpURLConnection.getOutputStream();
outputStream.write(requestStringBytes);
outputStream.close();
//获得响应状态
int responseCode = httpURLConnection.getResponseCode();
if (HttpURLConnection.HTTP_OK == responseCode) {
//当正确响应时处理数据
System.out.println("");
System.out.println("Http Response OK...");
System.out.println("");
StringBuffer responseBuffer = new StringBuffer();
String readLine;
BufferedReader responseReader;
//处理响应流,必须与服务器响应流输出的编码一致
responseReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(), ENCODING_RESPONSE));
while ((readLine = responseReader.readLine()) != null) {
responseBuffer.append(readLine).append("\n");
}
responseReader.close();
System.out.println("Http Response:" + responseBuffer);
}
} catch (IOException e) {
e.fillInStackTrace();
}
}
}
***************************************************
服务器段代码,响应请求流
***************************************************
//获得响应流,获得输入对象
InputStream inputStream = httpServletRequest.getInputStream();
PrintWriter out = httpServletResponse.getWriter();
//建立接收流缓冲,准备处理
StringBuffer requestBuffer = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, ENCODING_REQUEST));
System.out.println("");
System.out.println("Receive Http Request...");
System.out.println("");
//读入流,并转换成字符串
String readLine;
while ((readLine = reader.readLine()) != null) {
requestBuffer.append(readLine).append("\n");
}
reader.close();
//设置响应编码
httpServletResponse.setCharacterEncoding(ENCODING_RESPONSE);
//响应输出
out.println(requestBuffer.toString());
System.out.println("Response:" + requestBuffer.toString());