Http协议相关内容

1纯文本的表单:

1:get请求,通过url明文传递参数,不安全而且参数大小有限制。在servlet中可以使用如下代码获取参数字符串:

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String queryString = request.getQueryString();
        System.out.println(queryString);
    }

打印内容:

name=GET_NAME&password=GET_PASSWORD //表单只有两个属性

2:post请求,对于上传数据必须使用post请求,理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力。post请求如下方法获取请求参数:

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 1. 获取表单数据流
        InputStream in = request.getInputStream();
        // 2. 转换流
        InputStreamReader inStream = new InputStreamReader(in, "UTF-8");
        // 3. 缓冲流
        BufferedReader reader = new BufferedReader(inStream);
        // 输出数据
        String str = null;
        while ((str = reader.readLine()) != null) {
            System.out.println(str);
        }
        // 关闭
        reader.close();
        inStream.close();
        in.close();

    }

同一个表单打印数据如下:

name=POST_NAME&password=POST_PASSWORD

2上传数据的表单:

必须使用post方法,而且form必须设置enctype="multipart/form-data"属性,例如:

    <div align="center">
        <form action="fileLoad" method="post" enctype="multipart/form-data">
            Name:<input name="name" type="text" /> <br>
            Password:<input type="file" name="uploadfile" /><br>
            <button type="submit">发送</button>
        </form>
    </div>

表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据。

此时如果后台还是按照前面post获取数据的方式直接使用流获取数据的话,你会发现上传的文件错误,错误示例代码:

    /**
     * 上传文件损坏
     * @param request
     * @param response
     * @throws Exception
     */
    public static void uploadError(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 上传错误:没能过滤掉一些控制信息
        InputStream in = request.getInputStream(); //这个流是所有的表单字段数据和文件数据的总和
        byte[] b = new byte[1024];
        FileOutputStream out = new FileOutputStream(
                new File("servlet-fileupload.avi"));
        int bytesRead = 0;
        while ((bytesRead = in.read(b)) > 0) { //此处我们将所有数据都认为是上传数据,所以导致上传文件损坏
            out.write(b, 0, bytesRead);
            out.flush();
        }
        out.flush();
        out.close();
        in.close();
        System.out.println("完毕!");

    }

切记:以上是错误示例!!!

下面是一个正确的示例:

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //判断是一个多媒体内容
        if (ServletFileUpload.isMultipartContent(request)) {
            try {
                DiskFileItemFactory factory = new DiskFileItemFactory();
                factory.setSizeThreshold(MEMORY_THRESHOLD);
                ServletFileUpload upload = new ServletFileUpload(factory);
                // 设置最大文件上传值
                upload.setFileSizeMax(MAX_FILE_SIZE);
                List<FileItem> items = upload.parseRequest(request);

                for (int i = 0, size = items.size(); i < size; i++) {
                    FileItem item = items.get(i);
                    if (!item.isFormField()) {// isFormField: true表示是表单的一个属性,false表示一个上传文件
                        File file = new File("upload-daxin.flv");//文件名可以使用上传文件的实际名称,示例就略过了
                        item.write(file);
                    }
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

写的相对简单,总要分享的是思路。多多包涵!

时间: 2024-10-29 10:18:47

Http协议相关内容的相关文章

App Store审核指南中文版(2014.9.10更新):新增Apple Pay相关内容

苹果在9月3日对App Store审核指南进行了重大更新,新添加了扩展.HealthKit.HomeKit以及TestFlight相关内容.另外,在9月10日新品发布会之后,苹果再次更新了App Store审核指南,添加Apple Pay相关内容.文中红色部分是相对于此前版本的新增内容,蓝色部分表示苹果相关官方文档的链接. App Store Review Guidelines(英文版). 前言 感谢您付出宝贵的才华与时间来开发iOS应用程程序.从职业与报酬的角度而言,这对于成千上万的开发员来说

Windows Server 2008 R2/2012 网络负载平衡NLB相关内容

使用网络负载均衡技术可以实现一些应用程序的可用性和可伸缩性,常用的应用程序有:IIS.防火墙.VPN以及一些关键业务.每一个节点运行应用程序的一个副本.NLB在群集中的多个主机中分发传入的客户端请求.可以动态地添加主机,也可以将所有流量引导到指定的单个主机,这个主机就称为默认主主机.在一个群集中最多支持 32 台计算机. 当计算机意外出现故障或者脱机时,将断开与出现故障或脱机的服务器之间的活动连接.但是,如果您有意关闭主机,则可以在使计算机脱机之前,使用 drainstop 命令处理所有活动的连

视频播放相关内容总结

视频播放相关内容总结 多媒体常识: 什么是多媒体 多媒体是计算机和视频技术的结合,实际上它是两个媒体:声音和图像,或者用现在的术语:音响和电视 常用的视频格式 Android系统默认:mp4.3gp 常用格式:ts.3gpp.3g2.3gpp2.avi.mkv.flv.divx.f4v.rm.rmvb.rv.wmv.asf.mov.mpg.v8.ram.mpeg. swf.m2v.asx.ra.ram.ndivx.xvid等 常用音频格式: Android系统:mp3.ogg: 常用格式:wma

syslog相关内容介绍

syslog相关内容介绍 简介: syslog server 从网络设备接收系统日志消息,并实时显示它们. 系统日志消息可以使用以下事件进行处理: 1.在滚动窗口中显示消息 2.将消息记录到文本文件 3.将消息转发到另一个系统日志服务器 4.记录到ODBC数据库 5.记录到NT应用程序事件日志 6.通过SMTP将消息通过电子邮件发送给某人 7.运行外部程序,如寻呼通知系统 8.发送SNMP陷阱消息 系统syslog内容的相关介绍 安装源码包,既不影响系统里面运行的syslog,也由于二者容易冲突

MRCP协议相关学习及语音识别、合成

MRCP,媒体资源控制协议,其学习中,涉及到SIP.RTP等协议,常涉及语音识别语音合成等相关知识. 推荐其学习网站:http://www.ctiforum.com/html/special/mrcp2018/forum/type-488.html MRCP协议具体内容见下面网站:https://tools.ietf.org/html/rfc6787#section-9 MRCP协议相关学习及语音识别.合成 原文地址:https://www.cnblogs.com/zhangxingcomeon

http 协议相关问题

http 协议相关问题 来源 https://www.cnblogs.com/lingyejun/p/7148756.html 1.说一下什么是Http协议? 对器客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”. 2.什么是Http协议无状态协议?怎么解决Http协议无状态协议?(曾经去某创业公司问到) 无状态协议对于事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息 无状态协议解决办法: 通过1.Cookie 2.通过Session会话保存. 3.说一下Ht

TCP-IP-part7-IP协议相关技术(一)

仅凭IP是无法完成通信的,需要一些IP的辅助技术.这些技术的包格式可能不一样,但它们都是基于IP地址进行的,都是通过匹配路由表来进行的,只是功能不一样.例如DHCP分配IP地址,它只管通知这条信息,具体怎么分还要依靠上层. TCP/IP相关内容第七部分,包含: DNS ARP ICMP 一.DNS IP地址不好记,我们希望用主机名代替.DNS负责将主机名转换为具体的IP地址. 早期的方法是集中管理一个大型的数据库,所有主机都要下载这个文件,更新主机名和地址的时候要通知所有人,非常麻烦.现在用DN

移动端 h5开发相关内容总结——CSS篇

移动端 h5开发相关内容总结——CSS篇 标签: css移动 2016-01-06 15:59 5536人阅读 评论(3) 收藏 举报  分类: HTML+CSS(17)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1.移动端开发视窗口的添加 h5端开发下面这段话是必须配置的 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=n

EF Code First 配置的相关内容

I.实体间一对一的关系 添加一个PersonPhoto类,表示用户照片类 1 /// <summary> 2 /// 用户照片类 3 /// </summary> 4 public class PersonPhoto 5 { 6 [Key] 7 public int PersonId { get ; set ; } 8 public byte [] Photo { get ; set ; } 9 public string Caption { get ; set ; } // 标题