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

}
相关文章
相关标签/搜索