http://hbiao68.iteye.com/blog/1973914
寫一個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 Abc extends HttpServlet {
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("doGet");
- this.doPost(request, response);
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("doPost");
- System.out.println("aaa : "+request.getParameter("aaa"));
- System.out.println("param1 : "+request.getParameter("param1"));
- System.out.println(request.getHeader("avc"));
- PrintWriter pw = response.getWriter();
- pw.write(request.getParameter("param1"));
- pw.flush();
- pw.close();
- }
- }
web.xml配置文件
- <servlet>
- <description></description>
- <display-name>Abc</display-name>
- <servlet-name>Abc</servlet-name>
- <servlet-class>com.Abc</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>Abc</servlet-name>
- <url-pattern>/Abc</url-pattern>
- </servlet-mapping>
抽象出一個工具請求類
- package http;
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.util.Map;
- import java.util.Map.Entry;
- public class HttpUtil {
- public static String http(String url, Map<String, String> params) {
- URL u = null;
- HttpURLConnection con = null;
- // 構建請求參數
- StringBuffer sb = new StringBuffer();
- if (params != null) {
- for (Entry<String, String> e : params.entrySet()) {
- sb.append(e.getKey());
- sb.append("=");
- sb.append(e.getValue());
- sb.append("&");
- }
- sb.substring(0, sb.length() - 1);
- }
- System.out.println("send_url:" + url);
- System.out.println("send_data:" + sb.toString());
- // 嘗試發送請求
- try {
- u = new URL(url);
- con = (HttpURLConnection) u.openConnection();
- //// POST 只能為大寫,嚴格限制,post會不識別
- con.setRequestMethod("POST");
- con.setDoOutput(true);
- con.setDoInput(true);
- con.setUseCaches(false);
- con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
- OutputStreamWriter osw = new OutputStreamWriter(con.getOutputStream(), "UTF-8");
- osw.write(sb.toString());
- osw.flush();
- osw.close();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (con != null) {
- con.disconnect();
- }
- }
- // 讀取返回內容
- StringBuffer buffer = new StringBuffer();
- try {
- //一定要有返回值,否則無法把請求發送給server端。
- BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
- String temp;
- while ((temp = br.readLine()) != null) {
- buffer.append(temp);
- buffer.append("\n");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return buffer.toString();
- }
- }
備注:一定要獲取返回值,否則請求無法到達。
readLine()為阻塞方法,會等待服務器的響應,否則會一直等待
con.setDoOutput(true); 這個表示是要發送請求到URL地址,沒有這句話server是不會響應的。
參數的傳遞方式類似於在URL后面添加"?key=value&key1=value1"這種方式
測試類
- @Test
- public void test3() {
- Map parames = new HashMap<String, String>();
- parames.put("param1", "param1_value");
- parames.put("param2", "param2_value");
- parames.put("param3", "param3_value");
- // 如果地址欄中有aaa這個參數,則默認選擇地址欄的,如果沒有則選擇添加的參數
- parames.put("aaa", "aaa_value");
- HttpUtil.http("http://localhost:8080/a/Abc?aaa=dddd", parames);
- }