get和post与服务端的交互方式

时间:2022-06-14 12:12:12

在网上看了不少关于get和post的文章,看到博主这个,现在手录下来。

原博客地址:http://www.cnblogs.com/warrior4236/p/5675756.html

一: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请求案例:

/**
     * 发送get请求,参数放在url后面
     */
    public static String sendGetRequest(String url, String params) {
        StringBuilder result = new StringBuilder();
        String realUrl = url + "?" + params;
        InputStream in = null;
        BufferedReader br = null;
        try {
            // 与服务器建立连接
            URL u = new URL(realUrl);
            URLConnection conn = u.openConnection();
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "keep-alive");
            conn.connect();

            // 获取响应头
            Map<String, List<String>> map = conn.getHeaderFields();
            Set<String> set = map.keySet();
            Iterator<String> it = set.iterator();
            while (it.hasNext()) {
                String key = it.next();
                System.out.println(key + ":::" + map.get(key));
            }

            // 获取响应数据
            in = conn.getInputStream();
            br = new BufferedReader(new InputStreamReader(in, "utf-8"));
            String line;
            while ((line = br.readLine()) != null) {
                result.append(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != in) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result.toString();
    }

post请求案例:

/**
     * 发送post请求,参数单独发送到服务器端
     */
    public static String sendPostRequest(String url, String params) {
        StringBuilder result = new StringBuilder();
        String realUrl = url;
        InputStream in = null;
        BufferedReader br = null;
        try {
            // 与服务器建立连接
            URL u = new URL(realUrl);
            URLConnection conn = u.openConnection();
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "keep-alive");

            // post请求必须设置请求头
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.connect();

            // 发送参数到服务器
            OutputStream out = conn.getOutputStream();
            PrintWriter pw = new PrintWriter(new OutputStreamWriter(out,
                    "utf-8"));
            pw.print(params);
            pw.flush();
            pw.close();

            // 获取响应头
            Map<String, List<String>> map = conn.getHeaderFields();
            Set<Entry<String, List<String>>> entry = map.entrySet();
            Iterator<Entry<String, List<String>>> it = entry.iterator();
            while (it.hasNext()) {
                Entry<String, List<String>> en = it.next();
                System.out.println(en.getKey() + ":::" + en.getValue());
            }

            // 获取响应数据
            in = conn.getInputStream();
            br = new BufferedReader(new InputStreamReader(in, "utf-8"));
            String line;
            while ((line = br.readLine()) != null) {
                result.append(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != in) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result.toString();
    }

测试案例:

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

get和post与服务端的交互方式的更多相关文章

  1. WebService的web客户端同步、异步、多线程向服务端传入参数的数据交互方式

    接着上一章的内容,在上一章中我们知道了如何.net平台下去建立一个WebService,以及同步调用.异步调用.开线程异步调用三种客户端从服务端获取数据的方式,在本章了所要讲的,是如何将客户端的数据, ...

  2. IOS开发系列之阿堂教程&colon;玩转IPhone客户端和Web服务端交互&lpar;客户端&rpar;实践

    说到ios的应用开发,我们不能不提到web server服务端,如果没有服务端的支持,ios应用开发就没有多大意义了,因为从事过手机开发的朋友都知道(Android也一样),大量复杂业务的处理和数据库 ...

  3. Service系统服务&lpar;六&rpar;:rsync基本用法、rsync&plus;SSH同步、配置rsync服务端、访问rsync共享资源、使用inotifywait工具、配置Web镜像同步、配置并验证Split分离解析

    一.rsync基本用法 目标: 本例要求掌握远程同步的基本操作,使用rsync命令完成下列任务: 1> 将目录 /boot 同步到目录 /todir 下   2> 将目录 /boot 下的 ...

  4. 那些年,我们见过的 Java 服务端&OpenCurlyDoubleQuote;问题”

    导读 明代著名的心学集大成者王阳明先生在<传习录>中有云: 道无精粗,人之所见有精粗.如这一间房,人初进来,只见一个大规模如此.处久,便柱壁之类,一一看得明白.再久,如柱上有些文藻,细细都 ...

  5. android 应用程序与服务端交互

    http://www.cnblogs.com/freeliver54/archive/2012/06/13/2547765.html 简述了Service的一些基础知识以及Service和Thread ...

  6. Swift3&period;0服务端开发&lpar;一&rpar; 完整示例概述及Perfect环境搭建与配置(服务端&plus;iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  7. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  8. Socket聊天程序——服务端

    写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...

  9. zookeeper源码分析之五服务端&lpar;集群leader&rpar;处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

随机推荐

  1. FileStream的使用

    一.写入文件 string strContent = textBox2.Text.ToString(); //创建文件流(文件路径,文件操作,创建) using (FileStream fs = ne ...

  2. Silverlight visifire Chart图表下载到PPT文件中

    一.Silverlight xaml.cs文件 1. //下载图表        private void btnDown_Click(object sender, RoutedEventArgs e ...

  3. J1002&period;JavaFX简介

    引言 2008年12月05日,SUN发布了JavaFX第一个正式版本,以期望Java在UI端能够更好地应用于开发富客户端的互联网应用(Rich Internet Cliet). 2011年发布的Jav ...

  4. PHP 面试知识点整理归纳

    基础篇了解大部分数组处理函数 array_chunk — 将一个数组分割成多个    array_column — 返回数组中指定的一列    array_combine — 创建一个数组,用一个数组 ...

  5. J2SE学习笔记

    如何学习Java 一.面向对象设计思想 1.面向对象:开车去*,车怎么去的我不管,我只调用车的go() 方法即可. 2.类和对象:类可以看成一类对象的模板,对象可以看成该类的一个具体实例. 3.类和 ...

  6. 【由浅入深理解java集合】&lpar;三&rpar;——集合 List

    第一篇文章中介绍了List集合的一些通用知识.本篇文章将集中介绍List集合相比Collection接口增加的一些重要功能以及List集合的两个重要子类ArrayList及LinkedList. 一. ...

  7. 记踩坑--Flask Web开发:S6电子邮件 ----&lbrack;Errno 11004&rsqb; getaddrinfo failed

    必须要记录下踩过的坑,一来,为后来者铺路,二来,实在摔得疼,提醒自己写代码要谨小慎微. [Errno 11004] getaddrinfo failed 1.先排除邮箱账号和授权码的错误 测试如下代码 ...

  8. PHP com组件的使用 (环境搭建 以及测试)

    COM 组件在实际当前的软件开发中依然是比较重要,包括对于串口开发的人员,软件插件使用的人员,PHP 已经为我们添加了对于 COM的支持,可以很好的解决我们在开发中可能碰到的一些问题.一下是开发环境的 ...

  9. GOOGLE高级搜索的秘籍

    一.摘要 本文内容来源自互联网,全面的介绍Google搜索的各种功能和技巧. 二.GOOGLE简介 Google(http://www.google.com/)是一个搜索引擎,由两个斯坦福大学博士生L ...

  10. 730&period; Count Different Palindromic Subsequences

    Given a string S, find the number of different non-empty palindromic subsequences in S, and return t ...