问题描述
url='processJsonRequest.action?operationFlag=Q&operationFlag=Q1';postData="operationFlag=ghost";提交给服务器的时候,operationFlag其实是个字符串数组。我的问题是:为什么通过request.getParameter("operationFlag");获得的参数是Q,而不是ghost.为什么url中的参数优先于postData中的参数??有什么依据可以参考?
解决方案
解决方案二:
这个不是优先的问题,是你的请求方法的问题,你的请求方法是get就用URL上的参数,如果你的请求方法是post,就会用postData中的参数
解决方案三:
Lumia10200说的不正确:我是用的就是POST方法提交数据的。而且后台断点后,是能看到operationFlag数组的,且长度是3.
解决方案四:
引用2楼King6860的回复:
Lumia10200说的不正确:我是用的就是POST方法提交数据的。而且后台断点后,是能看到operationFlag数组的,且长度是3.
request.getParameter只能取出一个的
解决方案五:
我主要问题是:为什么url中的参数优先于postData中的参数??有什么依据可以参考?
解决方案六:
刚BAIDU了一下,搜索到一个相关西信息:http://zhidao.baidu.com/link?url=OJ4Mlx_Mwyu_Ps1uhahXja2kMvsimplI72qaYaatv8ldqfSbxzquSZCZ0zqEcGYbuLNV9NfE5EoqXrvOcCmtv_Request从几个集合取数据是有顺序的,从前到后的顺序依次是QueryString,Form,最后是ServerVariables。Request对象按照这样的顺序依次搜索这几个集合中的变量,如果有符合的就中止,后面的就不管了。当然上面给的例子像是ASP.NET,但测试结果符合servlet获得结果相同。
解决方案七:
引用5楼King6860的回复:
刚BAIDU了一下,搜索到一个相关西信息:http://zhidao.baidu.com/link?url=OJ4Mlx_Mwyu_Ps1uhahXja2kMvsimplI72qaYaatv8ldqfSbxzquSZCZ0zqEcGYbuLNV9NfE5EoqXrvOcCmtv_Request从几个集合取数据是有顺序的,从前到后的顺序依次是QueryString,Form,最后是ServerVariables。Request对象按照这样的顺序依次搜索这几个集合中的变量,如果有符合的就中止,后面的就不管了。当然上面给的例子像是ASP.NET,但测试结果符合servlet获得结果相同。
学习了。。。
解决方案八:
getParameterjava.lang.StringgetParameter(java.lang.Stringname)ReturnsthevalueofarequestparameterasaString,ornulliftheparameterdoesnotexist.Requestparametersareextrainformationsentwiththerequest.ForHTTPservlets,parametersarecontainedinthequerystringorpostedformdata.Youshouldonlyusethismethodwhenyouaresuretheparameterhasonlyonevalue.Iftheparametermighthavemorethanonevalue,usegetParameterValues(java.lang.String).Ifyouusethismethodwithamultivaluedparameter,thevaluereturnedisequaltothefirstvalueinthearrayreturnedbygetParameterValues.Iftheparameterdatawassentintherequestbody,suchasoccurswithanHTTPPOSTrequest,thenreadingthebodydirectlyviagetInputStream()orgetReader()caninterferewiththeexecutionofthismethod.
ServletAPI-ONLINE上其实讲得已经很清楚了。只是总用BAI-DU,忽略了API。从上文中可以看出,(Iftheparameterdatawassentintherequestbody,suchasoccurswithanHTTPPOSTrequest),servlet推荐使用getInputStream()orgetReader()来解决多个重名参数(有的在QueryString,有的在POST-DATA),如何获得POST-DATA中的同名参数的问题。由此判断,ServletRequest在多个重名参数(有点在QueryString,有的在POST-DATA)这种情形下,Request.getParameter()是优先获得QueryString中的参数的。
解决方案九:
引用7楼King6860的回复:
getParameterjava.lang.StringgetParameter(java.lang.Stringname)ReturnsthevalueofarequestparameterasaString,ornulliftheparameterdoesnotexist.Requestparametersareextrainformationsentwiththerequest.ForHTTPservlets,parametersarecontainedinthequerystringorpostedformdata.Youshouldonlyusethismethodwhenyouaresuretheparameterhasonlyonevalue.Iftheparametermighthavemorethanonevalue,usegetParameterValues(java.lang.String).Ifyouusethismethodwithamultivaluedparameter,thevaluereturnedisequaltothefirstvalueinthearrayreturnedbygetParameterValues.Iftheparameterdatawassentintherequestbody,suchasoccurswithanHTTPPOSTrequest,thenreadingthebodydirectlyviagetInputStream()orgetReader()caninterferewiththeexecutionofthismethod.ServletAPI-ONLINE上其实讲得已经很清楚了。只是总用BAI-DU,忽略了API。从上文中可以看出,(Iftheparameterdatawassentintherequestbody,suchasoccurswithanHTTPPOSTrequest),servlet推荐使用getInputStream()orgetReader()来解决多个重名参数(有的在QueryString,有的在POST-DATA),如何获得POST-DATA中的同名参数的问题。由此判断,ServletRequest在多个重名参数(有点在QueryString,有的在POST-DATA)这种情形下,Request.getParameter()是优先获得QueryString中的参数的。
api果然diao
解决方案十:
URL中的GET传参在tomcat,weblogic等应用服务器中通常被解析为queryString,getParameter都是取的这里面的值如果是post传参,默认会把post里面key=value也放到queryString中,因此request.getParameter取的是一样的效果如果是二者中有重名参数,肯定会有优先级的问题
解决方案十一:
提交表单的时候是可以提交多个相同名称的参数的,比如一个表单中可以提交多个<inputname='name'/>这样的参数,在后台的时候就应该使用String[]names=request.getParameterValues("name");这样来获取相同的多个值。楼主这样提交参数实质就是提交了表单中重名的参数了。