2014-06-11 85 views
0

我有一個HTML格式的文本字段。getParameter()的行爲

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

代碼捕捉到Servlet類這段文字字段:

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

而且我在做這樣的事情:

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

} 

現在的問題是,如果我在提交表單前保留了uname文本字段空白,我沒有收到NullPointerException

甲骨文的文檔說: 字符串的getParameter(字符串名稱)

返回請求參數爲字符串的值,或NULL,如果參數不存在

請清除我的困惑。

+0

你輸入在文本框中確認的東西?或任何寫在表單上的java腳本代碼提交?> –

+0

@sᴜʀᴇsʜᴀᴛᴛᴀ我保留空白以理解行爲。沒有腳本在那裏。只有帶'servlets'的'html' –

+0

@AJ。正如你引用的那樣,參數是否存在?檢查空虛。 –

回答

1

參數存在但它的值是一個空字符串。所以你不會得到NullPointerException。或檢查值設置好的不,你最好使用:

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

或(與Apache Commons):

if (StringUtils.isNotEmpty(userName)) 

不存在如果沒有與名稱的輸入uname在您的HTML代碼中。如果你刪除這個輸入,你會得到一個NullPointerException

-1

替換

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

} 

這有可能是userNamenull。您需要在調用方法之前對其進行測試。

+0

錯了。如果沒有輸入,它將是空的。僅當該字段不存在於HTTP請求中時才爲空(所以在HTML表單中)。 – lpratlong

1

該參數存在,因爲它存在於窗體上。它只是空的,如果你想看看是否有東西被填充,你必須檢查值。如果參數在您的表單上,它將始終存在。

1

更改您的表單提交方法PostGet看這URL

它會像

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

所以在這裏,你UNAME與空串去,這樣你就不會得到NPE

1

查看瀏覽器發送的原始HTTP請求。即使您將HTML輸入「uname」留空,它也會發送到瀏覽器。您的HTTP請求的身體看起來像:

uname=&otherParameter=otherValue 

的方法HttpServletRequest.getParameter(「UNAME」),因此,不返回NULL,因爲參數「UNAME」是在HTTP請求的身體。這就是Oracle文檔中「參數不存在」的含義。

+0

答案已經給出了大約10次。不要添加更多的答案,只需+1就可以了。謝謝。 – lpratlong

1

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

在HTML表單,如果數據字段爲空,則它不會放棄領域,它提交或數據字段因此你沒有得到NullPointerException空字符串傳遞。

您可以通過請求的發佈參數確認自己。你可以在firefox中使用Firebug來獲取這些信息。

的情況下有沒有參數可用參數名稱,然後request.getParameter將返回你空你可以通過request.getParameter("uname1");

+0

答案已經給出了大約10次。不要添加更多的答案,只需+1就可以了。謝謝。 – lpratlong