在一次web項目demo中,發(fā)現(xiàn)jsp中的form表單提交數(shù)據(jù)到servlet的時候,用request.getParameter("String")方法獲取到的值全部為null,沒有一個例外,然后百度了一下原因(當(dāng)時不知道什么原因,就搜索的“jsp中form表單提交到servlet獲取不到值”,其實并不具體),很多都是說檢查form表單額提交方式method和servlet的doPost方法有沒有對應(yīng)這種常識錯誤,當(dāng)時也是檢查了好幾遍,但仔細(xì)一想,我servlet都能在控制臺輸出null了,肯定不是這個原因。
以下為jsp段代碼(代碼本身沒有問題):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<body>
<h2>Hello World!</h2>
<div>
<form action="test" method="post">
<input type="text" name="name"/><br/>
<input type="text" name="pwd"/><br/>
<input type="submit" value="提交"/>
</form>
</div>
</body>
</html>
以下為servlet段代碼(代碼本身沒有問題):
package com.bdqn.zxw.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.event.PaintEvent;
import java.io.IOException;
/**
* Created with IntelliJ IDEA.
* User: ChaW
* Date: 2019/5/12
* Time: 17:14
* Description: No Description
*/
@WebServlet("/test")
public class Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
System.out.println(name);
System.out.println(pwd);
}
}
后來就一直檢查,直到把post方式改為get方式提交成功之后,發(fā)現(xiàn)了是post方式提交的問題,遂在百度進一步搜索(大概是“jsp中form表單post方式提交到servlet”),看了幾篇文章之后就發(fā)現(xiàn)有人提到了TomCat的設(shè)置問題:
tomcat6.0的文檔里說maxPostSize不限制的設(shè)置是小于等于0
tomcat7.0的文檔里面說maxPostSize不限制的設(shè)置是小于0
該屬性設(shè)置位于tomcat文件下的conf文件夾下的server.xml文件里(比如---D:\Java\TomCat\apache-tomcat-9.0.16\conf\server.xml)
<Connector connectionTimeout="20000" connectionUploadTimeout="36000000" disableUploadTimeout="false" maxHttpHeaderSize="102400" maxPostSize="-1" maxSwallowSize="-1" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
以前的版本是小于等于0都是無限制大小,現(xiàn)在是小于0是無限制大小,所以如果還是maxPostSize="0"的話,就代表限制post提交數(shù)據(jù)大小為0,(數(shù)據(jù)大小為0能傳輸什么數(shù)據(jù)呢),所以就出現(xiàn)了一開始出現(xiàn)的問題,獲取數(shù)據(jù)為null,因為沒有數(shù)據(jù)傳輸過來。把maxPostSize="0"設(shè)置為maxPostSize="-1",則是不限制傳輸數(shù)據(jù)大小,自然就沒有問題了,還是那兩段代碼,idea控制臺輸出了相應(yīng)的數(shù)據(jù)。
以前的maxPostSize="0"也是不限制大小的設(shè)置,只是tomcat修改了定義而已,我們要用人家的技術(shù),就必須遵循人家的設(shè)置,謝謝。