A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qixing0918 中级黑马   /  2013-11-2 22:51  /  1534 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.我们都知道 表面是通过浏览器的输入http://localhost:8080/s2sh?name=nihao&age=14 就能访问服务器 但你们知道过程么
  ---- 其实是先把输入的URL 解析  URL u = new URL("http://localhost:8080/s2sh?name=nihao&age=14");   可以通过url 得到一些有用的数据
  1. URL u = new URL("http://localhost:8080/s2sh?name=nihao&age=14");

  2. System.out.println(u.getProtocol());
  3. System.out.println(u.getHost());
  4. System.out.println(u.getPort());
  5. System.out.println(u.getPath());
  6. System.out.println(u.getFile());
  7. System.out.println(u.getQuery());

  8. /* http
  9. localhost
  10. 8080
  11. /s2sh
  12. /s2sh?name=nihao&age=14
  13. name=nihao&age=14
  14. */


  15. }
复制代码
他通过URL得到的有用数据按TCP协议要求 发送给服务器  格式如下
GET / HTTP/1.1
Host: 127.0.0.1:40001
Connection: Keep-Alive
Accept: */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.5072
7; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MALN; BRI/2; .NET4.0C; SE 2.X MetaSr 1.0)
Accept-Encodin
g: gzip, deflate
9; .NET CLR 3.0.30729; MALN; BRI/2; .NET4.0C; SE 2.X MetaSr 1.0)
Accept-Encodin
其实浏览器作用就是(解析URL+如下代码)(装包)
  1. public class ClientDemo {

  2. public static void main(String[] args) throws Exception {
  3. Socket socket = new Socket("127.0.0.1", 8080);
  4. PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);

  5. pw.println("GET /s2sh/index.jsp HTTP/1.1");
  6. pw.println("Accept: */*");
  7. pw.println("Accept-Language: zh-cn");
  8. pw.println("Host: 127.0.0.1:8080");
  9. pw.println("Connection: Keep-Alive");

  10. pw.println();
  11. pw.println();

  12. BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  13. String line = null;
  14. while ((line = br.readLine()) != null) {
  15. System.out.println(line);
  16. }

  17. socket.close();

  18. }
  19. }
复制代码
tomcat 服务器会返回信息
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=F6BE54A3DF5F54099A51827B15C86067; Path=/s2sh
Content-Type: text/html;charset=UTF-8
Content-Length: 753
Date: Sat, 02 Nov 2013 14:43:33 GMT

那么我们的机器又是如何处理tomcat返回的数据的呢  
这时用到了URLConnection 会调用HttpURLConnection 子类 处理tomcat的返回数据 (也就是拆包)
代码如下
  1. public class URLConnectionDemo {

  2. public static void main(String[] args) throws Exception {

  3. URL u = new URL("http://localhost:8080/s2sh?name=nihao&age=14");
  4. URLConnection uc = u.openConnection();
  5. System.out.println(uc);

  6. InputStream in = uc.getInputStream();
  7. byte[] buf = new byte[1024];
  8. int len = in.read(buf);
  9. System.out.println(new String(buf, 0, len));

  10. }

  11. }
复制代码
这样我们就能得到我们需要的数据 jsp页面       而不是带返回头信息的数据










评分

参与人数 1技术分 +1 收起 理由
狼王 + 1

查看全部评分

3 个回复

正序浏览
加油,赞一个
回复 使用道具 举报
狼王 发表于 2013-11-3 07:32
加油哈,好好努力,为了黑马

好的   谢谢
回复 使用道具 举报
加油哈,好好努力,为了黑马
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马