模拟手机客户端与Web应用的交互[URL和HttpURLConnection的使用]

URL和HttpURLConnection的使用

  java.lang.Object

    |--java.net.URL

 

  java.lang.Object

    |--java.net.URLConnection

      |--java.net.HttpURLConnection

  1、模拟手机端

 1 import java.io.OutputStream;
 2 import java.io.PrintWriter;
 3 import java.net.HttpURLConnection;
 4 import java.net.URL;
 5 import java.net.URLEncoder;
 6 
 7 //模拟手机客户端
 8 public class Phone {
 9     public static void main(String[] args) throws Exception {
10         //建立与服务端的连接
11         URL url = new URL("http://localhost:8080/day26/Server");
12         //取得与服务端的连接
13         HttpURLConnection conn = (HttpURLConnection)url.openConnection();
14         conn.setDoOutput(true);//防止报Exception in thread "main" java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true)
15         //向服务端发送请求
16         OutputStream os = conn.getOutputStream();
17         PrintWriter pw = new PrintWriter(os);
18         String username = "杰克";
19         username = URLEncoder.encode(username,"UTF-8");
20         pw.write("username="+username+"&password=12346");
21         pw.flush();
22         pw.close();
23         //通知服务端客户端已发送请求完毕
24         int code = conn.getResponseCode();
25         System.out.println("code=" + code);
26         
27         /*接收服务端的输出
28         InputStream is = conn.getInputStream();
29         byte[] buf = new byte[1024];
30         int len = 0;
31         while((len=is.read(buf))>0){
32             System.out.println(new String(buf,0,len));
33         }
34         //关闭
35         is.close();
36         */
37     }
38 }

   2、服务端

 1 import java.io.IOException;
 2 import java.util.Date;
 3 
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 public class Server extends HttpServlet {
10     public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
11         //输出到客户端
12         response.setContentType("text/html;charset=GBK");
13         response.getWriter().write("当前时间为[GET]:" + new Date().toLocaleString());
14     }
15     public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
16         //接收客户端的请求
17         request.setCharacterEncoding("UTF-8");
18         String username = request.getParameter("username");
19         String password = request.getParameter("password");
20         System.out.println("username[POST]="+username);
21         System.out.println("password[POST]="+password);
22     }
23 }

 

 总结:

1)服务端[GET]->手机--GET方式

(1)手机先发送请求,再接收服务端的响应
(2)在服务端写到GET方式中

  2)手机->服务端[POST]--POST方式
    (1)在服务端写到POST方式中

  3)对于中文方式

(1)通过URLEncoder进行URL编码,
  String username = "杰克";
  username = URLEncoder.encode(username,"UTF-8");
(2)在服务端进行编码设置:
  request.setCharacterEncoding("UTF-8");
(3)必须确保URL编码和解析一致

 

posted @ 2013-05-01 10:42  hacket520  阅读(756)  评论(0编辑  收藏  举报