我有一个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
请清除我的困惑。
答案 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}}。您需要在调用方法之前对其进行测试。