一:B/S结构,浏览器端到服务器端通信依赖http协议

交互过程:

1:在浏览器地址栏输入http://ip:port/应用/资源路径

2:浏览器根据ip和服务器建立连接,port确定和那个应用进行交互,因为ip主机上面有

很多应用程序。

3:浏览器端发送请求以及参数到服务器端,就是url(同一资源定位器),确定请求资源。

4:服务器处理请求,将处理后的结果响应发送到浏览器。

5:浏览器得到资源后,渲染到界面,显示给用户。

优点:B/S交互可以省去客户端部署升级的风险,降低了成本,只需要关注服务器开发。

二:C/S结构,客户端到服务器端通信也是依赖HTTP协议

主要是java应用程序与服务器的交互,交互过程:

1:根据请求url创建URL对象

2:创建连接对象URLConnection,设置连接参数,建立连接。

3:发送请求到服务器,服务器进行处理

4:服务器发送响应到客户端。

三:get请求与post请求的异同点

1:get请求会将请求参数显示在请求地址的后面,post不会,所以post相较于get更安全,但是安全是相对的,

如果追求安全发送请求还是要加密。

2:get请求发送数据理论上是4kb,而post理论上可以发送任意大的数据

3:如果是C/S结构,post请求在建立连接前,要设置DoInput和DoOutput的值

四:java程序请求服务器实例

get请求案例:

 1 /**
 2      * 发送get请求,参数放在url后面
 3      */
 4     public static String sendGetRequest(String url, String params) {
 5         StringBuilder result = new StringBuilder();
 6         String realUrl = url + "?" + params;
 7         InputStream in = null;
 8         BufferedReader br = null;
 9         try {
10             // 与服务器建立连接
11             URL u = new URL(realUrl);
12             URLConnection conn = u.openConnection();
13             conn.setRequestProperty("accept", "*/*");
14             conn.setRequestProperty("connection", "keep-alive");
15             conn.connect();
16
17             // 获取响应头
18             Map<String, List<String>> map = conn.getHeaderFields();
19             Set<String> set = map.keySet();
20             Iterator<String> it = set.iterator();
21             while (it.hasNext()) {
22                 String key = it.next();
23                 System.out.println(key + ":::" + map.get(key));
24             }
25
26             // 获取响应数据
27             in = conn.getInputStream();
28             br = new BufferedReader(new InputStreamReader(in, "utf-8"));
29             String line;
30             while ((line = br.readLine()) != null) {
31                 result.append(line);
32             }
33         } catch (Exception e) {
34             e.printStackTrace();
35         } finally {
36             if (null != in) {
37                 try {
38                     in.close();
39                 } catch (IOException e) {
40                     e.printStackTrace();
41                 }
42             }
43             if (null != br) {
44                 try {
45                     br.close();
46                 } catch (IOException e) {
47                     e.printStackTrace();
48                 }
49             }
50         }
51         return result.toString();
52     }

post请求案例:

 1     /**
 2      * 发送post请求,参数单独发送到服务器端
 3      */
 4     public static String sendPostRequest(String url, String params) {
 5         StringBuilder result = new StringBuilder();
 6         String realUrl = url;
 7         InputStream in = null;
 8         BufferedReader br = null;
 9         try {
10             // 与服务器建立连接
11             URL u = new URL(realUrl);
12             URLConnection conn = u.openConnection();
13             conn.setRequestProperty("accept", "*/*");
14             conn.setRequestProperty("connection", "keep-alive");
15
16             // post请求必须设置请求头
17             conn.setDoInput(true);
18             conn.setDoOutput(true);
19             conn.connect();
20
21             // 发送参数到服务器
22             OutputStream out = conn.getOutputStream();
23             PrintWriter pw = new PrintWriter(new OutputStreamWriter(out,
24                     "utf-8"));
25             pw.print(params);
26             pw.flush();
27             pw.close();
28
29             // 获取响应头
30             Map<String, List<String>> map = conn.getHeaderFields();
31             Set<Entry<String, List<String>>> entry = map.entrySet();
32             Iterator<Entry<String, List<String>>> it = entry.iterator();
33             while (it.hasNext()) {
34                 Entry<String, List<String>> en = it.next();
35                 System.out.println(en.getKey() + ":::" + en.getValue());
36             }
37
38             // 获取响应数据
39             in = conn.getInputStream();
40             br = new BufferedReader(new InputStreamReader(in, "utf-8"));
41             String line;
42             while ((line = br.readLine()) != null) {
43                 result.append(line);
44             }
45         } catch (Exception e) {
46             e.printStackTrace();
47         } finally {
48             if (null != in) {
49                 try {
50                     in.close();
51                 } catch (IOException e) {
52                     e.printStackTrace();
53                 }
54             }
55             if (null != br) {
56                 try {
57                     br.close();
58                 } catch (IOException e) {
59                     e.printStackTrace();
60                 }
61             }
62         }
63         return result.toString();
64     }

测试案例:

1 // 测试发送请求
2     public static void main(String[] args) {
3         String url = "http://localhost:8080/healthcare/dataAnalysis/search.do";
4         String params = "tname=employee";
5         // 测试get请求
6         System.out.println(SendGetAndPost.sendGetRequest(url, params));
7         // 测试post请求
8         System.out.println(SendGetAndPost.sendPostRequest(url, params));
9     }

以上代码均已经过验证。

网络编程(发送get和post请求到服务器端,并获取响应)相关推荐

  1. 网络编程练习 -- NSURLConnection -- get/post请求

    网络编程基础 -- NSURLConnection -- GET请求 LWTViewController.m // // LWTViewController.m // 网络编程练习 -- NSURLC ...

  2. 粤嵌GEC6818板子TCP网络编程发送命令控制音视频

    TCP网络编程 (1)gec6818网络编程前期准备工作 (1).开发板和Ubuntu系统都处于教室局域网内 1.开发板和电脑(Ubuntu)都需要连接上教室的网线 2.开发板设置ip地址 在开发板终 ...

  3. java什么是网络接口_java 网络编程 -- IP地址的表示与网络接口信息的获取(InetAddress和NetworkInterface)...

    使用java进行网络程序的开发,可以说是一件令人愉悦的事情,对于用惯了C++网络接口编程的人来说,当他们首次使用Java开发网络应用程序,会发现java开发网络应用是如此的简单,甚至仅用几分钟时间,您 ...

  4. python 谷歌地图api_《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档...

    Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...

  5. java 服务器 http请求_Java网络编程——发送HTTP请求到服务器

    当Java程序需要向服务器发送请求或读取服务器数据时,使用URLConnection类是比较好的选择.URLConnection类封装了与服务器互动操作的方法,通过它可以建立与服务器的远程连接,检查服 ...

  6. Java基础部分笔记----------网络编程

    2019独角兽企业重金招聘Python工程师标准>>> 1.Java网络基本支持 1.1 InetAddress Java中的InetAddress是一个代表IP地址的对象.IP地址 ...

  7. java网络编程(二)

    注意:架构师学习资源已更新. 获取方式:在公众号内回复"架构师资源" 文章推荐 精选java等全套视频教程 精选java电子图书 大数据视频教程精选 1.2 网络编程技术 前面介绍 ...

  8. 【带你入门】java网络编程

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  9. JAVA的网络编程【转】

    转自 http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能 ...

最新文章

  1. Windows Server入门系列38 访问网络共享
  2. 也说 ASP.NET MVC的 Script 管理
  3. MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API(转)...
  4. lightningJS之动画
  5. jdk5.0新特性—— 枚举
  6. struts2工作原理
  7. Camshift算法(1)
  8. UWP,WPF 打包Roboto 字体
  9. html实现“加入收藏”代码
  10. 中巴地球资源(CBERS)卫星系列介绍
  11. 互阻放大器的稳定工作及其评估
  12. Blender建模模块:超实用插件LoopTools
  13. aw36515闪光灯驱动ic调试
  14. IDEA去掉SQL语句的黄色警告
  15. curly怎么读(curly怎么读音发音英语怎么说)
  16. 【模糊回归预测】基于matlab萤火虫算法优化模糊神经网络回归预测【含Matlab源码 2034期】
  17. 彻底理解——指针常量和常量指针、指向常量的常指针
  18. (十七)QT生成PDF文件
  19. 外贸英语900句之 品质Quality
  20. 微网站中加入一键拨号功能代码

热门文章

  1. 北大组织“富豪俱乐部”,有何不可?
  2. php开源 饭馆记账软件_GitHub - CNYoki/xxjzWeb: 小歆记账WebApp项目(Web服务端)
  3. 单片机定时器精准定时_8051单片机(STC89C52)定时器实现10ms精准定时
  4. Linux创建jupyter notebook和jupyter lab, windows可远程访问
  5. DOM操作之属性和样式操作
  6. webpack为什么加载不了css?
  7. VMware Network Adapter VMnet1和VMnet8 未识别的网络的解决方法
  8. 模板资源管理器的使用
  9. vs 2005 下载,再汉化---没想到是痛苦的过程
  10. 最大似然估计的一个示例