• debug经历------->java web------>为什么使用接收到的表单元素的值为null


    1.问题描述:

      jsp页面中常常有表单元素,有时候需要在该<form>中使用文件上传标签,为了实现文件上传功能,需要将<form>元素进行二进制封装,此时如果该form中还有普通类型的表单元素,使用request.getParameter(“**”)是无法获取普通表单元素的值的,必须使用smartupload.getRequest().getParameter()才可以获取普通表单元素的值,并且要注意该句话一定要在smartupload.upload()之后执行,否则即使使用smartupload获取,得到的也是null值。

    2.debug过程:

    Test.jsp

    <!--由于要实现文件上传功能,所以必须将form封装成“multipart/form-data”
    这样一来整个表单的内容都变成二进制形式向下传送
    -->
    <form action="receive.jsp" method="post" enctype="multipart/form-data">
            <input name="modelName" type="text">
                    <input type="file" name="avatar"><div>允许上传的文件类型:zip,tar,gz</div>
            <input type="submit" value="提交">
    </form>

    由于<form  enctype="multipart/form-data">,表单中所有内容都变成二进制形式向后传送,

    在目的页面receive.jsp中直接使用request.getParameter()获取的值是null

    receive.jsp

    <!--直接使用request.getParameter()获取封装成二进制形式的普通表单元素的值,结果=null-->
    <body>
        
           model:<%=request.getParameter("model")%>    
    </body>
    
    
    运行结果:
        model:    null

    由上面的运行结果可以看到,直接使用request.getParameter("model")获取封装成二进制形式的表单元素,结果=null

    所以想到应该借助于smartupload对象来获取混合表单中的普通表单标签的值,如下程序所示:

    <!--错误的示范:-->
    <
    body> <h1>接收上述封装成二进制的普通表单元素</h1> <% SmartUpload upload=new SmartUpload(); String modelName=upload.getRequest().getParameter("model"); %> <h2>model:<%=modelName %></h2> </body> 结果: 接收上述封装成二进制的普通表单元素 model:null

    咦?不是说使用smartupload对象可以获取封装成二进制的普通表单元素吗?为什么得到的结果也是null?

    哈哈,下面我们就来看看到底是为什么?

    答:你只是声明了一个smartupload对象而已,并没有执行上传操作,所以获得的值当然是null啦,正确的编程方法如下:

    
    
    <!--正确的示范:
    上面的例子虽然用了smartupload接收封装成二进制的表单元素的值,但是接受的结果仍然是错误的
    下面才是正确的编程
    声明smartupload对象之后,还应该执行“初始化” “上传准备” 等操作
    在upload()之后使用smartupload.getRequest().getParameter("model")才能获得普通表单标签model的值
    -->

    <
    body> <h1>接收上述封装成二进制的普通表单元素</h1> <% SmartUpload upload=new SmartUpload(); upload.initialize(pageContext);//初始化上传操作 // 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。 upload.setAllowedFilesList("zip,tar,gz"); // 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,jsp,htm,html扩展名的文件和没有 //扩展名的文件。 // su.setDeniedFilesList("exe,bat,jsp,htm,html,,"); upload.upload();//上传准备 String modelName=upload.getRequest().getParameter("model"); %> <h2>model:<%=modelName %></h2> </body>

    运行结果:
        接收上述封装成二进制的普通表单元素
    model: modelname用户输入的值
     

     

  • 相关阅读:
    win10下jdk8和jdk11切换的批处理脚本
    Deeping中使用python连接Oralce报错:Cannot locate a 64-bit Oracle Client library: "./instantclient_21_1/libclntsh.so: file too short"
    Redis作者“不懂”分布式锁【转载】
    搭建nacos高可用集群
    使用spring.config.location与本地配置文件属性不能互补
    protocol buffer应用场景方案想法
    protocol buffer 入门和基本知识
    IDEA快捷键
    软考问题总结
    pandas 使用问题记录
  • 原文地址:https://www.cnblogs.com/lxrm/p/7057942.html
Copyright © 2020-2023  润新知