为什么在有<inputt type="file">时<input type="text">提交后,取到的总是空值

<formaction="do.jsp"method="post"enctype="multipart/form-data"><inputtpye="text"name=... <form action="do.jsp" method="post" enctype="multipart/form-data">
<input tpye="text" name="name"/>

<input type="file" />

<input type="sumbmit" value="submit">

</form>

然后在do.jsp里面有个String time=request.getParameter("time")
提示time是空值
上面写错了
不好意思由于是自己敲的,菜了点。请忽略拼写错误

第一个<input>应该是<input tpye="text" name="time"/>!!!!!!
展开
 我来答
yzahnig621
推荐于2016-05-09 · TA获得超过389个赞
知道答主
回答量:56
采纳率:0%
帮助的人:74.4万
展开全部
本人一个中级JAVA工程师,我们一起来分析分析问题:
首先,我们去掉enctype="multipart/form-data",让表单以标准数据格式传输数据,你会惊奇的发现time的值能取到。所以time取值为空,并非<inputt type="file">的问题。
然后,我们看看enctype="multipart/form-data"是什么东西,文件和字符串不同,文件要用二进制数据传送。这下问题来了,用了enctype="multipart/form-data",能传文件,但不能传入输入框的值。不用又不能传文件。麻烦,这里一般我们要用组件,就是别人写好的jar包里的类的方法,比如JspSmartUpload、commons-fileupload等等。
最后,如果你对JAVA非常感兴趣,并且有不弄清根本原因不罢休的精神的话,请看下面。
------------------------------------------------------------------
<%
String time = request.getParameter("time");
InputStream is = request.getInputStream();
byte[] b = new byte[120];
is.read(b);
%>
<body>
<%=time %> <br>
<%=new String (b,"ISO-8859-1")%>
</body>

这是我写的测试程序。首先我们加上enctype="multipart/form-data",你会发现time总是空,然后下面一行是解析出表单的2进制数据,我已转换为字符串。

去掉enctype="multipart/form-data",能得到time的值,但是下面一行为空,因为request.getParameter 和 request.getInputStream只能有一个生效,如果注释掉第一行String time = request.getParameter("time")的话,第二行会出现解析出表单的2进制数据。

所以JSP的机制很明显了,加上enctype="multipart/form-data"后只能从InputStream也就是流里面读取数据了,需要自己编写解析字符串的方法把time的值InputStream从提取出来,这比较复杂了,不过现在的你不必了解太深,而且现在的很多组件,如上面提到的JspSmartUpload、commons-fileupload等等,已经帮我们写好了方法,你就先放心用着,随着学习的深入,你会慢慢了解这些方法是如何编写实现的。

参考资料: 看看我帮别人解决的java问题。完全原创

百度网友7d83332
2010-07-31 · TA获得超过208个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:86.8万
展开全部
enctype="multipart/form-data"它的意思是以二进制的数据格式来传输,所以传输到你的jsp里是二进制数据,包括那个time,所以你用request.getParameter("time")是得不到值的,必须把数据再换为String的.
到网上搜下enctype="multipart/form-data"取不到表单值的解决办法有很多.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
276685417
2010-07-31 · 超过37用户采纳过TA的回答
知道答主
回答量:101
采纳率:0%
帮助的人:114万
展开全部
你的form表单里面没有time这个组件呀。
加一个<input type=text name="time" value="2010">再试试?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zh12381238
2010-07-31 · TA获得超过180个赞
知道小有建树答主
回答量:233
采纳率:0%
帮助的人:104万
展开全部
sumbmit 貌似拼错了 submit
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友16ee8c4
2010-07-31
知道答主
回答量:23
采纳率:0%
帮助的人:8.5万
展开全部
恩 提交写错了submit
加个id试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式