2012-05-10 48 views
1

我在運行於Tomcat服務器上的Eclipse中製作了一個簡單的servlet。Java Servlet中的數字格式異常

我正在運行一個簡單的java應用程序,它將字符串message=20傳遞給servlet。該servlet獲取數據。我使用

String name= request.getParameter("message"); 

得到傳遞的字符串。當我將名稱值返回給應用程序時,我可以將其恢復。但是,當我嘗試處理字符串名稱:

int val=Integer.parseInt(name); 

我得到NumberFormatException。我無法弄清楚問題所在。我已經能夠從servlet中獲得名稱變量的值,但爲什麼我不能使用它?

我使用的代碼如下:

客戶端代碼

URL url = new URL("http://localhost:8080/DemoServer/demoservelet"); 

URLConnection conn = url.openConnection(); 

conn.setDoOutput(true); 

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream())); 

out.write("message=20"); 

servlet代碼

String username = request.getParameter("message").toString(); 

int val=Integer.parseInt(username); //get error msg on this line 

response.setContentType("text/html"); 

PrintWriter out = response.getWriter(); 

out.println("Passed val :"+ username+username.length()); 


} 

我對轉換得到的錯誤。還有一件事,我得到的長度值爲4,這也沒有任何意義?

請幫我解決這個問題。

+4

可以調試,看看到底是什麼'name'的值是在該行? –

+1

你又是怎樣通過的名稱和值? –

+0

你看到了什麼,如果你打印的名字的價值,你嘗試分析它之前?你可以用引號括起來/括號中的印刷值,以確保它不包含空白。 System.out.println(「[」+ name +「]」); – jahroy

回答

1

你想使用GET風格的參數傳遞或PUSH風格的參數傳遞?

GET式的傳球釘在URL中,像這樣結束參數:

http://localhost:8080/DemoServer/demoservelet?value=20 

像這樣的URL可以相當容易地組裝。你只需要改變你的網址創造線,並可以刪除相關打開的BufferedWriter兩條線:

URL url = new URL(String.format("http://localhost:8080/DemoServer/demoservelet?value=%d", 20)); 

POST風格的傳球具有通過HTTP協議,這是相當類似於您」遵守重新使用到目前爲止,除了所有參數必須具有尾隨換行符的事實。使用你的例子:

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream())); 

out.writeln("message=20"); 

你也可以使用一個PrintStream,這將使格式化你的參數,輕鬆一點來處理,如果你需要改變他們:

PrintStream out = new PrintStream(conn.getOutputStream()); 

out.printf("message=%d\n", 20); 

無論您是使用GET風格或PUSH風格取決於你,儘管它取決於你傳遞的數據類型。

0

您必須檢查名稱是否有效。 name.match( 「?^ - \ d + $」);它返回true如果它是一個數字

+0

字符串的值是在客戶端我寫這樣的(「消息= 20」)20,即。在servelet方面,我一直都是爲了獲得價值。當我從servelet返回值時,我得到了20個回報,這很好。但是我無法對該字符串執行轉換。我希望你明白我的觀點。我也會發布我的代碼 – user1388142

0

我相信你必須寫參數作爲一個參數,它被檢測爲一個。

out.write("<param name=\"message\" value=\"20\">"); 
0

在有輸出name的值,確定名字是一個數字,當檢查 值的調試。