最近在看servlet,想写个接口的调用,突然发现Java.net 的很多东西都已经忘记了,在这记录下:
1)这部分是servlet的代码,想获取post请求,传递过来的两个参数
package com.test.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestPost extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println(name);
out.println(pwd);
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
2)这个部分通过执行main方法,向 TestPost 传递参数。
package com.test.post;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class PostServlet {
public static void main(String[] args) {
try {
URL url = new URL("http://localhost:8080/FirstServlet/servlet/TestPost");
//打开连接
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
//打开读写属性,默认均为false
urlConn.setDoInput(true);
urlConn.setDoOutput(true);
//设置请求方式
urlConn.setRequestMethod("POST");
//Post 请求不能使用缓存
urlConn.setUseCaches(false);
// URLConnection.setFollowRedirects是static 函数,作用于所有的URLConnection对象。
// connection.setFollowRedirects(true);
// URLConnection.setInstanceFollowRedirects 是成员函数,仅作用于当前函数
urlConn.setInstanceFollowRedirects(true);
// 配置连接的Content-type,配置为application/x-www-form-urlencoded的意思是
//正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode进行编码
urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
// 连接,从url.openConnection()至此的配置必须要在 connect之前完成,
// 要注意的是urlConn.getOutputStream()会隐含的进行调用 connect(),所以这里可以省略urlConn.connect();
DataOutputStream out = new DataOutputStream(urlConn.getOutputStream());
// 正文内容其实跟get的URL中'?'后的参数字符串一致
// DataOutputStream.writeBytes将字符串中的16位的 unicode字符以8位的字符形式写道流里面
StringBuffer buf = new StringBuffer();
buf.append("name="+URLEncoder.encode("jany", "utf-8"));
buf.append("&");
buf.append("pwd="+URLEncoder.encode("abcjany", "utf-8"));
out.writeBytes(buf.toString());
out.flush();
out.close(); // flush and close
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
String line;
System.out.println(" ============================= ");
System.out.println(" Contents of post request ");
System.out.println(" ============================= ");
while ((line = reader.readLine()) != null) {
System.out.println("readLine:"+line);
}
System.out.println(" ============================= ");
System.out.println(" Contents of post request ends ");
System.out.println(" ============================= ");
reader.close();
// urlConn.disconnect();
int requestCode = urlConn.getResponseCode();
String requestMethod = urlConn.getRequestMethod();
System.out.println("输出:"+requestCode+"/"+requestMethod);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3) requestCode 从 HTTP 响应消息获取状态码。requestMethod获取请求方法。