在解決一個bug的時候,發現post提交上來的參數,有部分丟失了。經過一番查證,有資料說,Tomcat的server.xml中有一個maxPostSize屬性,默認是2M。于是將其值顯式置為0(不對post提交的大小做限制)。
~~~
<Connector maxPostSize="0" URIEncoding="utf-8" connectionTimeout="20000"
port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
~~~
結果bug依舊存在,于是又經過一番搜尋,發現還有一個屬性——maxParameterCount(設置允許提交參數的個數)。其默認值是10000,將其值設置為-1,即不顯示提交參數的個數。
~~~
<Connector maxParameterCount="-1" URIEncoding="utf-8" connectionTimeout="20000"
port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
~~~
改成上面的配置,問題迎刃而解,提交的數據不再丟失。
??**maxParameterCount 解釋:**
?? http-get請求中允許傳遞的查詢字符串的最大個數,盡管各種http瀏覽器(proxy工具)都會對http-get請求的長度和查詢字符串的個數有限制,你仍然可以通過tomcat再次設定合適的值。parameter個數越多,事實上對tomcat的內存開支更大,很多時候處于安全或者實用的角度考慮,maxParameterCount的值都不會太大。默認值為10000,”-1″表示無限制。如果請求中參數的個數超過限定值,請求將會被拒絕。
這個解決方案不是很好,因為不對提交參數進行限制,可能會造成服務器壓力過大,嚴重影響程序性能,帶來非常糟糕的用戶體驗。但由于這是一個老舊的系統,這是設計上的問題,要進行徹底的調整,改動會很大,所以目前只能通過這種方式來緩解一下,日后肯定是要重構的。如果是一個正在開發的項目,絕對不能這么做,唯一的方法就是修改設計,不允許一次提交如此多的數據。