java自帶的java.net包中包含了網絡通信功能,其中URLConnection它代表應用程序和 URL 之間的通信鏈接,此類的實例可用於讀取和寫入此 URL 引用的資源。
下面通過Post向服務器傳輸Json數據,並接收服務器的響應。在處理JSON數據時,使用了Alibaba的fastjson包
這是客戶端代碼:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import com.alibaba.fastjson.JSONObject; public class PostTest { public static String sendPost(String url , String param) { String result = ""; try { URL realUrl = new URL(url); //構造一個到指定URL的連接 URLConnection conn = realUrl.openConnection(); conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); conn.setDoOutput(true); conn.setDoInput(true); try { JSONObject user = new JSONObject(); user.put("email", "123@163.com"); user.put("password", "123456789"); //將JSON數據添加到輸出流中 OutputStream ot = conn.getOutputStream(); ot.write(user.toString().getBytes()); PrintWriter out = new PrintWriter(ot); out.flush(); } catch (Exception e) { } try( //接收服務器端發回的響應 BufferedReader in = new BufferedReader(new InputStreamReader (conn.getInputStream() , "utf-8"))) { String line; while ((line = in.readLine())!= null) { result += "\n" + line; } } } catch(Exception e) { System.out.println("POST異常" + e); e.printStackTrace(); } return result; } public static void main(String args[]) { //使用本地Tomcat服務器,已經將應用a部署到了Tomcat容器中 String s1 = PostTest.sendPost("http://localhost:8080/a/aa" , "name=Tom&pass=123456"); System.out.println(s1); } }
下面是servlet方代碼:
import java.io.BufferedReader; import java.io.IOException; import java.io.PrintStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSONObject; public class Jsonget extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { StringBuffer jb = new StringBuffer(); String line = null; String result = ""; try { //讀取輸入流到StringBuffer中 BufferedReader reader = request.getReader(); while ((line = reader.readLine()) != null) jb.append(line); } catch (Exception e) { /*report an error*/ } try { //使用JSONObject的parseObject方法解析JSON字符串 JSONObject jsonObject = JSONObject.parseObject(jb.toString()); result = jsonObject.toJSONString(); } catch (Exception e) { // crash and burn throw new IOException("Error parsing JSON request string"); } //先將服務器收到的JSON字符串打印到客戶端,再將該字符串轉換為JSON對象然后再轉換成的JSON字符串打印到客戶端 PrintStream out = new PrintStream(response.getOutputStream()); out.println(jb.toString()); out.println(result); } }
下面是啟動Tomcat后,執行客戶端程序后客戶端收到的響應:
可以看到客戶端成功收到了服務器的響應,服務器准確收到了客戶端發送的JSON數據