接着上节课的内容
,我们上节课给大家完成了我们多线程的一个文件下载的
,一个例子的这样的演示的Demo的编写
,那么在这个例子当中
,上面这个例子当中
,实质上我们也是采用的是HTTP请求当中的GET请求方式
,来获取数据的一种实现的演示的Demo
,那么HTTP请求在我们具体的网络编程当中
,它是一种非常常用的请求方式
,但是除了它以外
,还有一种非常常用的请求方式就是POST请求
,所以说接下来我们再来写一个例子
,写一下我们使用POST请求
,又是应该具体怎么样去实现
,而且这个实现跟GET请求在哪些地方上有不一样的地方
,那么接下来我们就具体再来举一个例子
,那么为了能够有一个接收POST请求的这么一个
,目标的Web服务器
,所以在这里边我搭建了一个小的Web服务器
,是我本地的Web服务器 功能非常简单
,我这里边可以接收GET请求
,也可以接收POST请求
,GET请求它就会把你GET请求传过来的这个
,传过来的这个数据显示在我的浏览器页面上
,你传POST请求过来呢
,它也会把POST请求传过来
,就是说用浏览器如果去访问
,来 这里边
,如果说我有浏览器访问
,我自己搭建的这个本地的Web服务器
,那么我如果是直接在浏览器地址上输入这个网址
,然后后边带上数据
,那么它就会在浏览器页面上边显示出get请求传过来的值
,这个值是什么东西
,我在这里边传不同的值过去
,它就会显示不同的值
,
这是GET请求
,那么另外如果说你把getIndex变成postIndex
,那么这个时候它就会接收一个POST的请求
,当然如果说你在网址上面直接输它的话 敲回车
,那这是GET请求
,跟它的这个服务器等待监听的方式不一样
,所以说这边它会报错
,它会说你这边我服务器对于这个地址
,它没有准许你的GET请求进来
,它只接收POST请求
,所以说这个时候它会给你返回一个405的错误
,那么这里边是先为了做好这个实验
,我这边搭建了一个小的Web服务器
,那么接下来我就具体在我的IDEA里边
,具体在IDEA里边
,我们再来实现一个Demo
,这个Demo我们就是向我们这个目标地址
,postIndex.html这个目标地址
,发送一个POST请求
,POST请求里边携带着传给服务器的一个键值对
,键的名称
,字段的名称是name
,值我一会随便写
,那么这个时候它会给我返回一个html页面
,返回一个html页面
,这个页面当中也包含了我POST请求
,发送提交过去的数据的值
,也要给我拿回来
,所以这里边我们就在这个IDEA里边
,我们来写这么一个Demo
,来看一下这个POST请求在编程这种形式下面
,我们应该怎么实现
,来 这边Demo
,Demo什么呢
,Demo5
,OK 进来
,进来以后我们在这里边psvm主方法
,那么在主方法当中
,同样的我们实现网络编程
,我们要访问远程的这一个URL地址
,所以说我这边先把这个URL地址我这边定义起来
,
这边urlPath等于什么呢
,那么这个地址是我们这个地址
,来
,我在这里边就不要问号了
,因为POST请求携带的数据它不是在网址后面
,它是在我的请求体正文里边
,所以说我只需要前面这个部分的网址
,来 我这里边把这个网址拿进来
,然后这里边get改成post
,我接收post请求
,这是我本地的Web服务器接收POST请求的地址
,我把这个地址拿过来
,好吧
,那么这个地址拿过来以后
,然后这里边注意
,我这里边默认端口号居然是80号端口号
,来 这里边
,确实是80号端口 好吧
,那80号端口
,那么这里边是这个样子
,我这边没有端口号
,意味着我的默认的本地服务器
,Web服务器我使用的是默认端口80端口
,好吧
,那这是URL的地址
,先把它设定好
,然后我们设定我要提交给服务器的数据
,那么这个时候因为是POST方法提交
,所以说这个数据就不再跟着我的URL地址后面
,不再跟随在我的URL地址后面提交
,而是单独的把这个数据把它构建出来
,然后一会我要把它放到我的HTTP请求报文的请求正文
,请求体请求数据那个正文里边
,那么我这里边要提交数据来string
,提交的数据我把它构造成一个键值对
,提交的数据param
,那么提交的参数param
,提交的参数等于什么呢
,
我要把它构造成一个键值对
,它的字段名是name等于
,等于什么呢
,等于我这里边就要整个汉字
,那么整个汉字能不能直接是汉字
,不能
,我们要把这个汉字
,因为汉字它是我们客户端提交给服务器端
,那么我们这里边提交的数据
,它要求我们用我们一个规定的编码格式
,就是我们在前面课程中讲过的
,以百分号加十六进制字符两个
,然后这种格式的
,这样子的编码格式的字符串
,你才能够在客户端提交到服务器
,所以说如果说我们这里边你提交的只有汉字的话
,我们需要用我们的URLEncoder那个工具类的Encoder方法
,把它进行编码
,所以在这里边我们要进行编码
,所以说这里边我们应该怎么写呢
,URLEncoder.encode
,然后这里边名字是什么呢
,名字比如说就张三
,张三
,那么这个它的编码格式UTF-8
,UTF-8
,看到没有
,当然这里边有异常
,异常的话我直接把它丢出去
,来 直接把这异常丢出去
,我这边把这丢的异常
,把它范围给它放大一些
,直接丢出去
,那么这里边就构成了一个键值对 同学们
,实际上就是name等于张三
,只不过说这个张三汉字
,我把它用URLEncoder把它编码成为了
,我的这个urlencoded这种格式的编码
,所以说把它编译成了百分号加两个十六进制
,百分号加两个十六进制这样的格式的字符串
,所以说这边是这样的一个情况
,
这个param
,这个参数你要这样子来设置
,好吧
,那么这里边访问的目标
,URL地址有了
,那么我要传给服务器的参数
,键值对也准备好了
,那么接下来我们就要建立链接
,接下来我们要建立链接
,好
,建立链接怎么玩呢
,当然就是拿到URL这个实例对象
,url等于我们new一个URL
,然后参数里边放我们的urlPath
,看到没有
,放我们的urlPath
,这样子拿到我们的URL实例对象
,然后我们通过url.openConnection
,拿到对应的链接
,当然这个链接因为访问的是Web服务器
,所以说我把它强转成HttpURLConnection
,然后这边conn等于
,那么这里边把它强转成HttpURLConnection
,那么这边拿到了链接对象
,然后给链接对象设置参数
,设置参数
,那么设置什么参数呢
,conn比如说设置
,注意这里边一定我们要用POST请求的方法
,你有两个参数你就必须加
,一个参数是什么呢
,setDoOutput设为true
,设为true
,注意
,这个参数是一个什么参数呢
,我们使用POST这个方式提交数据
,我们提交到服务器里边的这个数据
,我们要把它放到我们的报文
,我们的HTTP报文它里边有报文的
,报文请求函
,然后后面是请求的头部信息
,然后后面是请求的正文
,对不对
,这是我们HTTP
,我们前面讲过的HTTP请求报文的基本的格式
,
对不
,那么这里边我们使用POST请求
,那么我们的数据
,我们这里边提交给服务器的数据
,实际上是保存在这里边的
,保存在请求数据的正文里边的
,