客户端示例1:
package client;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
public class HttpPostTest2 {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String url = "http://192.168.0.101:8080/mport/testServlet";
String charset = "UTF-8";
String param1 = URLEncoder.encode("param1", charset);
String param2 = URLEncoder.encode("param2", charset);
String query = String.format("param1=%s¶m2=%s", param1, param2);
URLConnection urlConnection = new URL(url).openConnection();
urlConnection.setUseCaches(false);
urlConnection.setDoOutput(true); // Triggers POST.
urlConnection.setRequestProperty("accept-charset", charset);
urlConnection.setRequestProperty("content-type", "application/x-www-form-urlencoded");//必须定义为text/xml、text/html、multi/form-data内容类型,如果定义为application/x-www-form-urlencoded则在request.getParamter()方法取得到数据
urlConnection.setRequestProperty("Content-Length", String.valueOf(query.length()));
OutputStreamWriter writer = null;
try {
writer = new OutputStreamWriter(urlConnection.getOutputStream(), charset);
writer.write(query); // Write POST query string (if any needed).
writer.flush();
} finally {
if (writer != null)
try {
writer.close();
} catch (IOException logOrIgnore) {
}
}
InputStream result = urlConnection.getInputStream();
int length = result.available();
byte[] bytes = new byte[length];
result.read(bytes);
System.out.write(bytes);
result.close();
// Now do your thing with the result.
// Write it into a String and put as request attribute
// or maybe to OutputStream of response as being a Servlet behind `jsp:include`.
}
}
客户端示例2:
package client;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpPostTest3 {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
InputStream input = HttpPostTest3.class.getResourceAsStream("documentTest4.xml");
byte[] data;
try {
data = new byte[input.available()];
input.read(data);
// 把XML的数据转成字符串
String str = new String(data);
System.out.println(str);
byte[] bb = str.getBytes("UTF-8");
// 请求地址
URL url = new URL("http://192.168.0.101:8080/mport/testServlet");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(5 * 1000);// 设置超时的时间
conn.setDoInput(true);
conn.setDoOutput(true);// 如果通过post提交数据,必须设置允许对外输出数据
conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");// 必须定义为text/xml内容类型,如果定义为application/x-www-form-urlencoded、multi/form-data
conn.setRequestProperty("Content-Length", String.valueOf(bb.length));
conn.connect();
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.writeBytes(str); // 写入请求的字符串
out.flush();
out.close();
// 请求返回的状态
if (conn.getResponseCode() == 200) {
System.out.println("yes++");
// 请求返回的数据
InputStream in = conn.getInputStream();
String a = null;
try {
byte[] data1 = new byte[in.available()];
in.read(data1);
// 转成字符串
a = new String(data1);
System.out.println(a);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} else {
System.out.println("no++");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服务端代码示例:
package abeop.serlvet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 2623084802650650845L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 测试是否被getParamter()方法获取到,只有在没被获取到情况下才能取得getInputStream()
System.out.println("param1: " + req.getParameter("param1"));
// 第一种方式
try {
InputStream in = req.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
StringBuffer data = new StringBuffer();
String line = null;
while ((line = br.readLine()) != null) {
data.append(line);
}
System.out.println("服务器端获取到流数据:" + data.toString());
// 设置返回状态
resp.setStatus(HttpServletResponse.SC_OK);
} catch (Exception ex) {
resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
// 第二方式
// ServletInputStream sis = req.getInputStream();
// int readed=0;//读出字节数
// byte [] buffer = new byte [1024];
// while((readed = sis.read(buffer, 0, buffer.length))!=-1){
// System.out.write(buffer, 0, readed);
// }
}
}
web.xml配置:
<servlet> <servlet-name>TestServlet</servlet-name> <servlet-class>abeop.serlvet.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/testServlet</url-pattern> </servlet-mapping>