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用户输入的值
 

 

 

posted on 2017-06-21 09:34  LXRM-JavaWeb、ML  阅读(246)  评论(0编辑  收藏  举报

导航