java后台用 requset对象 存储值 前台获取不到_关于上传文件时,后台用request.getParameter()获取不到表单里的其它参数值的问题...

本文讨论了在Java后台处理文件上传时,使用`request.getParameter()`无法获取表单其他参数的原因,主要涉及到HTTP的GET与POST区别、表单提交的enctype属性以及multipart/form-data类型。当enctype设为multipart/form-data时,`request.getParameter()`无法工作,建议使用其他方式如`request.getParameterValues()`或`HttpServletRequest`的API来获取上传文件时的额外参数。
摘要由CSDN通过智能技术生成

现在我们做项目,像文件上传,表单提交,后台框架可以用ssm,前台框架可以用easyui等,参数接收传递利用框架都是非常容易的,一般不会出现这种问题,今天主要描述的是上传文件时,java后台利用request.getParameter()接收前台参数时,接收不到的问题。这个方法现在用的不多了,比较老。

情况是这样的,这几天做文件上传存到mongodb库里,但是发现上传文件的时候,上传文件可以成功。但是用request.getParameter()无法获取表单其他参数,很是懵。最后总结如下,一般表单提交有两种方式,get和post方式,在form中method属性里填写post或者get。默认是get方式。

表单提交中get和post方式的区别有5点 :

1.get是从服务器上获取数据,post是向服务器传送数据。

2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

3.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

4.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

5.get相对安全性非常低,post相对安全性较高。

在form中的enctype的属性一般有以下三种:

一、application/x-www-form-urlencoded:

1、表单中的enctype值如果不设置,则默认是application/x-www-form-urlencoded,它会将表单中的数据变为键值对

的形式

2、如果action为get,则将表单数据编码为(name1=value1&name2=value2…),然后把这个字符串加到url后面,中间

用?分隔

3、如果action为post,浏览器把form数据封装到http body中,然后发送到服务器。

二、text/plain:

表单以纯文本形式进行编码

三、multipart/form-data:

1、当我们上传的含有非文本内容,即含有文件(txt、MP3等)的时候,需要将form的enctype设置为multipart/form-

data。

2、将表单中的数据变成二进制数据进行上传,所以这时候这时如果用request是无法直接获取到相应表单的值的。

也就是说,我们上传文件的时候,需要将enctype的属性设置为multipart/form-data,而且method传输方式必须为post方式。而这样做,后台request.getParameter()是获取不到参数的,这不是错,这是正常的。确实是没有办法获取的,而我们又确实非常急切的想要前台的参数值,我们可以改变一下思路来获取。首先,在form表单中设置一个onsubmit提交事件,onsubmit 事件会在表单中的确认按钮被点击时发生。

οnsubmit="return validForm(this)"

然后,在表单中设置一个隐藏的input框。

前台代码:

选择文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值