天天动画片 > 八卦谈 > 关于Servlet中getParameter()方法取值为null的解决方法

关于Servlet中getParameter()方法取值为null的解决方法

八卦谈 佚名 2024-01-27 22:27:59

本人仍为初学者,若本文中有内容出现错误,欢迎各位斧正!

        前面是我的一些心路历程,如果想直接知道修正方法的朋友们请直接跳至文末。

        最近在测试web前后端对大型文件的传输功能,因为本人学艺不精,出现了一些bug。起初我以为是文件传输大小达到了阈值,于是按照网络上提供的部分方法,将Tomcat/conf/server.xml中,"maxPostSize"这一属性的值取为0,以使Post方法发送的数据流大小不受限制。

maxPostSize = "0"

        再次用ajax提交数据,发现之前的报错确实不见了,但是却发现服务器上无法获取到ajax上传的参数。然后用Servlet试着打印了一下登录时的账号和密码,下面是登录的ajax代码:

以及Servlet的代码:

我反复检查了上述代码,应该是没有问题的,但是request.getParameter()获取到的值全是null:

在web页面中我确实有输入账号密码
但服务器打印出来的却是两个null

这时我打开Chrome的开发者工具,查看刚刚发送的xhr的请求:

Form Data下确实有封装好的表单数据

        在完成上方步骤的测试后,我才意识到应该是服务器出了某些问题,导致获取的数据值全为null。在尝试过网络上的一切解决方法无果后,我把目光瞄到了之前修改过的Tomcat的server.xml上。

maxPostSize = "-1"

        

当我把maxPostSize的值调整为-1时,我再次进行测试。后台果然能读到数据了:

后台成功打印出了账号和密码

接着我又测试了一下大文件的传输,前端代码如下:

这里是将图片文件转码成base64编码再发送给后端。

测试用的图片转码后大小已经达到了2.5MB

而后台也确实收到了前端发送过去的图片信息:

QWQ图片转码后的字符串太长把其他信息顶掉了

        综上,这个maxPostSize成功地浪费了我一天的时间。其值设为0表示不限制大小这一点并不适用于所有的Tomcat!!!

        我再强调几遍:

  • 不要随便设置 maxPostSize = "0" !!!

  • 不要随便设置 maxPostSize = "0" !!!

  • 不要随便设置 maxPostSize = "0" !!!

        对于不同版本的Tomcat,maxPostSize = "0" 的效果并不完全一样,对于某些版本来说,设置成0确实不会限制传输的数据大小。但对于另外的版本来说(比如我,我的版本是9.0.41,设置成-1才有效),将其设置成0很有可能导致你的POST方法什么都传不了!

什么?你用的"GET"方法?那没事了,你随便改

        从Apache提供的官方文档中可以看出,不限制post的传输大小只有在maxPostSize被设置为小于零的数时才有效,而不是等于零。当maxPostSize没被设置任何值时,则默认为2MB。实际上,在Tomcat的7.0.63及之后的版本中都只能设置成负数,之前的版本才是0和小于0的数。然而,目前Apache官网上的最低版本已经到了7.0.107了……

Tomcat的官方文档

        Tomcat的早期版本已经被官方宣布“寿终正寝”了。大人,时代变了!

大人,时代变了

        因为我的问题比较小众(大概吧),因此很可能没有包含到你所遇到的问题,我把一些常见的问题都罗列了一下,欢迎各位进行补充。

  1. 若直接使用form传输数据,请注意一下form标签是否设置了entype="multipart/form-data",这种情况下不能直接用getParameter()来获取对应的参数值,可以引入commons-fileupload的jar包,判断fieldName。这种方法一般用于同时上传文件和字段的情况,如果你只需要上传字段,那么直接删去enctype属性就行,这时表单的enctype会默认使用"application/x-www-form-urlencoded"进行上传。

  2. 如果用的是ajax,注意一下是否设置了contentType属性,具体修改方式如上一条所述。


        鄙人不才,目前我只遇到了这么几种情况,欢迎各路大神进行补充。本人作为初学者,如文章中出现纰漏,也烦请各位帮忙指出。

本文标题:关于Servlet中getParameter()方法取值为null的解决方法 - 八卦谈
本文地址:www.ttdhp.com/article/46659.html

天天动画片声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
扫码关注我们