java代碼以下:(在這使用的jackson解析json數據,因此須要導入Jackson包)java
package HttpURLConnection; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import com.fasterxml.jackson.databind.ObjectMapper; public class Test { /** * * 模擬android發送HTTP請求給服務器 * 重點內容 * 一、URL地址 * 二、method=post * 三、發送參數爲username * 四、獲取服務器返回的JSON字符串 */ public static void main(String[] args) throws Exception{ //目標地址 String url_str = "http://127.0.0.1/AndroidStudy/HttpUrlConn"; URL url = new java.net.URL(url_str);; HttpURLConnection conn = null; //打開地址,返回鏈接類HttpURLConnection conn=(java.net.HttpURLConnection) url.openConnection(); //對鏈接進行配置 conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST");//GET //爲了防止髒數據,禁止緩存 conn.setUseCaches(false); //輸出流 OutputStream os =conn.getOutputStream(); //數據輸出流 DataOutputStream dos=new DataOutputStream(os); //寫比讀簡單,只寫bytes dos.writeBytes("username="+URLEncoder.encode("小明", "UTF-8")); dos.flush(); dos.close(); if ( conn.getResponseCode() == HttpURLConnection.HTTP_OK ){ System.out.println("服務器正常的,我準備讀取服務器返回的JSON數據"); //讀取服務器返回的JSON //獲得輸入流 InputStream is = conn.getInputStream(); //獲得一個Reader InputStreamReader isr = new InputStreamReader(is,"UTF-8"); //獲得一個Buffer Reader,能夠一行一行字符讀取 BufferedReader br = new BufferedReader(isr); //用於1行1行地讀取,直到不能都爲止 String ReadOneline = null; //結果 StringBuffer sb=new StringBuffer(); while((ReadOneline=br.readLine())!=null){ sb.append(ReadOneline); } //result就是服務器返回的JSON字符串 String result = sb.toString(); ObjectMapper mapper = new ObjectMapper(); User user = mapper.readValue(result, User.class); //System.out.println(result); System.out.println(user.getUsername()+",年齡"+user.getAge()); } else{ System.out.println("服務端有異常,我捕獲了處理,提示客戶端服務器在維護"); } } }
servlet代碼以下:(bean類未列出)android
package a003_httpUrlConnection; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.fasterxml.jackson.databind.ObjectMapper; @WebServlet("/HttpUrlConn") public class HttpUrlConn extends HttpServlet { private static final long serialVersionUID = 1L; public HttpUrlConn() { super(); // TODO Auto-generated constructor stub } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.解決亂碼問題 //2.解決緩存問題 //http 1.1瀏覽器 response.setHeader("Cache-Control", "no-cache"); //http 1.0瀏覽器 response.setHeader("Prama", "no-cache"); //提醒過時1.0,1.1都支持 response.setDateHeader("Expires", 0); //控制輸出流 response.setCharacterEncoding("UTF-8"); //告之瀏覽器 response.setHeader("content-type","text/json;charset=UTF-8"); //請求也指定 request.setCharacterEncoding("UTF-8"); String tmp_username = request.getParameter("username"); System.out.println("客戶端發送的username:"+tmp_username); User user = new User(); user.setUsername(tmp_username); user.setAge(20); ObjectMapper mapper = new ObjectMapper(); //JAVA對象轉JSON,也叫[JSON序列化] String j = mapper.writeValueAsString(user); PrintWriter out = response.getWriter(); out.println(j); out.close(); } }