getParameter()的行为

时间:2014-06-11 12:01:29

标签: java servlets

我有一个html格式的文本字段。

<input type="text" name="uname">

在servlet类中捕获此文本字段的代码是:

String userName = request.getParameter("uname");

我正在做这样的事情:

if(userName.equals("aj")){

}

现在问题是,如果我在提交表单之前将uname文本字段留空,我就不会收到NullPointerException

Oracle文档说: String getParameter(String name)

  

以String形式返回请求参数的值,如果参数不存在,则返回null

请清除我的困惑。

7 个答案:

答案 0 :(得分:1)

参数存在但其值为空字符串。所以你没有得到NullPointerException。要检查值是否已设置,您最好使用它:

if ((userName != null) && !userName.isEmpty())

或(与Apache Commons):

if (StringUtils.isNotEmpty(userName))

如果HTML代码中没有名称为uname的输入,则不存在。如果您删除此输入,则会获得NullPointerException

答案 1 :(得分:1)

该参数存在,因为它存在于您的表单上。它只是空的,你必须检查值,如果你想看看是否填写了什么。如果参数本身在您的表单上,则该参数本身将始终存在。

答案 2 :(得分:1)

将表单提交方式Post更改为Get并查看此URL

它会喜欢

http://xxxx/x?uname=&otherparameters

所以在这里,你的uname是空字符串,所以你没有得到NPE

答案 3 :(得分:1)

根据你的评论

  

https://stackoverflow.com/posts/comments/37290474?noredirect=1

你把它留空了。由于表单参数存在于HTML中,因此您始终将该值设置为空。

正如你所说,

  

null 如果参数不存在。

检查空虚,如果你想看到任何没有的值。

答案 4 :(得分:1)

查看浏览器发送的原始HTTP请求。即使您保留HTML输入&#34; uname&#34;空白,它会被发送到浏览器。您的HTTP请求的正文如下所示:

uname=&otherParameter=otherValue

方法HttpServletRequest.getParameter(&#34; uname&#34;)因此不返回NULL,因为参数&#34; uname&#34;在HTTP请求的正文中。这就是&#34;参数不存在的含义&#34;在Oracle doc。

答案 5 :(得分:1)

  

如果我在提交表单之前将uname文本字段留空,我不是   得到NullPointerException!

在html格式中,如果数据字段为空,则它不会丢弃该字段,它会为数据字段提交或传递空字符串,因此您无法获得NullPointerException

您可以通过请求的post参数确认自己。您可以在firefox中使用Firebug来获取此类信息。

如果参数名称中没有可用参数,则request.getParameter将返回null,您可以通过request.getParameter("uname1");确认

答案 6 :(得分:-1)

替换为

if (userName != null && userName.equals("aj")){

}
{p> userName null可能是{{1}}。您需要在调用方法之前对其进行测试。