sun.net.www.protocol.http.HttpURLConnection:http://localhost:8080/WEB/servlet/Test java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read1(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source) at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at java.net.HttpURLConnection.getResponseCode(Unknown Source) at cn.imrobin.catcher.UrlCatcher.main(UrlCatcher.java:19)
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class UrlConnectionServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public UrlConnectionServlet() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("gbk");
String name = request.getParameter("name");
String age = request.getParameter("age");
ServletOutputStream out = response.getOutputStream();
response.setContentType("text/plain");
out.print("GET:name=" + name + ":age=" + age);
out.flush();
} protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("gbk");
response.setCharacterEncoding("gbk");
String name = request.getParameter("name");
String age = request.getParameter("age");
ServletOutputStream out = response.getOutputStream();
response.setContentType("text/plain");
out.print("POST:name=" + name + ":age=" + age);
out.flush();
}
}客户端调用如下:import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;public class UrlConnection { public static void main(String[] args) throws IOException {
Student student = new Student("张三", 20);
String url = "http://localhost:8080/web/UrlConnectionServlet";
String charset = "gbk";
String getResp = httpGet(student, url, charset);
System.out.println(getResp);
String postResp = httpPost(student, url, charset);
System.out.println(postResp);
}
private static String httpGet(Student student, String address, String charset)
throws IOException {
// GET 请求直接将参数放到 URL 中去
URL url = new URL(student.toUrlString(address, charset));
HttpURLConnection httpConnection = null;
try {
httpConnection = (HttpURLConnection)url.openConnection();
int responseCode = httpConnection.getResponseCode();
System.out.println("请求响应: " + responseCode);
InputStream in = httpConnection.getInputStream();
return read(in, charset);
} finally {
if(httpConnection != null) {
httpConnection.disconnect();
}
}
}
private static String httpPost(Student student, String address, String charset) throws IOException {
// POST 请求的 URL 是一个地址,参数放在 HTTP 正文之中
URL url = new URL(address);
HttpURLConnection httpConnection = null;
try {
httpConnection = (HttpURLConnection)url.openConnection();
int responseCode = sendPostRequest(student, httpConnection, charset);
System.out.println("请求响应: " + responseCode);
InputStream in = httpConnection.getInputStream();
return read(in, "gbk");
} finally {
if(httpConnection != null) {
httpConnection.disconnect();
}
}
}
private static int sendPostRequest(Student student, HttpURLConnection httpConnection,
String charset) throws IOException {
Writer writer = null;
try {
httpConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 打开 HTTP 输出流,允许向 HTTP 写入 content
httpConnection.setDoOutput(true);
writer = new OutputStreamWriter(httpConnection.getOutputStream(), charset);
writer.write(student.toPostString(charset));
} finally {
if(writer != null) {
writer.close();
}
}
httpConnection.connect();
return httpConnection.getResponseCode();
}
private static String read(InputStream in, String charset) throws IOException {
ByteArrayOutputStream ba = new ByteArrayOutputStream();
byte[] bys = new byte[8 * 1024];
for(int n = -1; (n = in.read(bys)) != -1; ) {
ba.write(bys, 0, n);
}
return new String(ba.toByteArray(), charset);
}
}class Student implements Serializable { private static final long serialVersionUID = 5253657949062051574L;
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toUrlString(String url, String charset) {
StringBuilder sb = new StringBuilder();
sb.append(url).append("?");
sb.append("name=").append(NetUtil.urlEncode(name, "gbk"));
sb.append("&age=").append(age);
return sb.toString();
}
public String toPostString(String charset) {
StringBuilder sb = new StringBuilder();
sb.append("name=").append(NetUtil.urlEncode(name, "gbk"));
sb.append("&age=").append(age);
return sb.toString();
}
}class NetUtil {
public static String urlEncode(String str, String encoding) {
try {
return URLEncoder.encode(str, encoding);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
}
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.io.BufferedInputStream.fill(Unknown Source)
at java.io.BufferedInputStream.read1(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at cn.imrobin.catcher.UrlCatcher.main(UrlCatcher.java:19)