在一次web项目demo中,发现jsp中的form表单提交数据到servlet的时候,用request.getParameter("String")方法获取到的值全部为null,没有一个例外,然后百度了一下原因(当时不知道什么原因,就搜索的“jsp中form表单提交到servlet获取不到值”,其实并不具体),很多都是说检查form表单额提交方式method和servlet的doPost方法有没有对应这种常识错误,当时也是检查了好几遍,但仔细一想,我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方式提交成功之后,发现了是post方式提交的问题,遂在百度进一步搜索(大概是“jsp中form表单post方式提交到servlet”),看了几篇文章之后就发现有人提到了TomCat的设置问题:
tomcat6.0的文档里说maxPostSize不限制的设置是小于等于0
tomcat7.0的文档里面说maxPostSize不限制的设置是小于0
该属性设置位于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都是无限制大小,现在是小于0是无限制大小,所以如果还是maxPostSize="0"的话,就代表限制post提交数据大小为0,(数据大小为0能传输什么数据呢),所以就出现了一开始出现的问题,获取数据为null,因为没有数据传输过来。把maxPostSize="0"设置为maxPostSize="-1",则是不限制传输数据大小,自然就没有问题了,还是那两段代码,idea控制台输出了相应的数据。
以前的maxPostSize="0"也是不限制大小的设置,只是tomcat修改了定义而已,我们要用人家的技术,就必须遵循人家的设置,谢谢。