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