HttpURLConnection使用方法——無臉怪

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();
    }

}
相關文章
相關標籤/搜索