NutzCN Logo
问答 servlet或module中,request.getParameter(xx)返回null
发布于 1806天前 作者 qq_edffd6b4 1742 次浏览 复制 上一个帖子 下一个帖子
标签:

最近常遇到一个问题,
界面中 POST过来的请求,
Content-Type: application/x-www-form-urlencoded
form data的数据

到达servlet或module后,
request.getParameter(xxx)总是返回null

开始以为是tomcat的问题,将tomcat8.5更换为一个新的tomcat9,的确问题解决了。
但是当将这个项目部署到另一个tomcat9上后,问题又出现了。

现在将一个老的项目拿出来看,以前这个项目就是部署再tomcat8.5中,且一切运行正常的。现在重新跑时,仍然在原来的tomcat8.5上运行,这时又遇到这个参数取不到的问题了。

各位大大,这是什么原因引起的呢?

21 回复

文件上传的话 加上
UploadAdaptor 通吃

没有文件上传。纯粹的form data几个字段

能否稳定重现?

当问题出现的时候,就非常稳定地存在了。。。

POST请求

Request URL: http://localhost:8080/servlet/CheckAdminLoginServlet
Referrer Policy: no-referrer-when-downgrade
Provisional headers are shown
Content-Type: application/x-www-form-urlencoded
Origin: http://localhost:8080
Referer: http://localhost:8080/login/login.jsp
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36
name: admin
password: admin
submit.x: 31
submit.y: 11

Servlet:

public class CheckAdminLoginServlet extends HttpServlet {
....
public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		//System.out.println("post");
		String name = request.getParameter("name");  //这里得到的name就是null
		String password = request.getParameter("password"); //这里得到的password也是null
		
            ....
     }
}

某个Filter把body读取了

隐隐感觉这个原因很对

有办法定位到哪个filter吗?
自己只定义了两个filter,我先检查下这两个。

<filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>xici.character.SetCharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter>
    <filter-name>AuthFilter</filter-name>
    <filter-class>pcb.filter.AuthFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>AuthFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>

这两个fitler,一个不作用,一个没影响,没有读取body。

没影响?去掉之, 看看是否继续重现

去掉后,问题依旧。

那你得做个空白项目来测了

那一会弄个来试。

纯空项目,只做了一个form表单,一个servlet,竟然仍然拿不到值。可恶的nullllll
@wendal

开个gitee库/github库吧

web.xml的版本号写了多少?

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <servlet>
    <servlet-name>CheckServlet</servlet-name>
    <display-name>ImageServlet</display-name>
    <description>Upload image and create thumbnail image</description>
    <servlet-class>com.servlet.CheckServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>CheckServlet</servlet-name>
    <url-pattern>/servlet/CheckServlet</url-pattern>
  </servlet-mapping>

</web-app>

起码2.5,或者去改成3.0

其实这个在创建项目时 Dynamic Web Module是3.1的。
改成这样了,仍然没用。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <servlet>
    <servlet-name>CheckServlet</servlet-name>
    <display-name>ImageServlet</display-name>
    <description>Upload image and create thumbnail image</description>
    <servlet-class>com.servlet.CheckServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>CheckServlet</servlet-name>
    <url-pattern>/servlet/CheckServlet</url-pattern>
  </servlet-mapping>

</web-app>
添加回复
请先登陆
回到顶部