2017-08-25 59 views
-5

我有一個HTTP狀態500(小服務程序) - 內部服務器錯誤,更具體:NumberFormatException錯誤與解析字符串雙擊,從HTML表單!

Type Exception Report 

Message For input string: "from" 

Description The server encountered an unexpected condition that prevented it from fulfilling the request. 

Exception 

java.lang.NumberFormatException: For input string: "from" 
sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) 
sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
java.lang.Double.parseDouble(Double.java:538) 
java.lang.Double.valueOf(Double.java:502) 
servlets.Servlet2.doGet(Servlet2.java:31) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:686) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:791) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
Note The full stack trace of the root cause is available in the server logs. 

我試圖解決的情況是,我有Servlet1有兩個HTML表單數字輸入,當你輸入它們時,它們發送給Servlet2,這些輸入將通過if語句檢查它們,然後解析字符串以加倍。那麼這些輸入之間的值將是將出現的數據。所以,我得到NumberFormatException的錯誤,我不明白我錯了。在我發佈的代碼片段中,我試圖用方法valueOf解決問題,但問題仍然存在。

double douFrom = 0; 
    double douTo = 0; 
    String from = request.getParameter("from"); 
    String to = request.getParameter("to"); 

    boolean val = true; 

    if ((from != null) && (to != null) && from.matches(".*[0-9]+.*") && to.matches(".*[0-9]+.*") && (from.length()>0) && (to.length()>0)) { 
     douFrom = Double.valueOf("from"); 
     douTo = Double.valueOf("to"); 
    } else { 
     val = false; 
    } 

在此先感謝!

+5

刪除引號:'雙。 valueOf(from)',而不是'Double.valueOf(「from」)'。我的意思是錯誤信息非常明顯:4個字母的字符串值'from'不是一個有效的數字。 – Andreas

+2

'Double.valueOf(「from」);'? ''''''double''怎麼樣?,也許你的意思是'Double.valueOf(from);'? – MadProgrammer

+0

'Double.valueOf(from)'仍然被破壞,因爲您的正則表達式只檢查字符串*是否包含*數字。如果你只想解析數字,你需要使用'「[0-9] +」'或'「\\ d +」'。但是,這當然只能匹配整數。 – shmosel

回答

3

你的問題是在這裏:

douFrom = Double.valueOf("from"); 
douTo = Double.valueOf("to"); 

您解析字符串常量,而不是變量。它必須是這樣的:

douFrom = Double.valueOf(from); //remove the quotes 
douTo = Double.valueOf(to); 

無論如何,我認爲是更好地驗證,如果你輸入一個有效的一倍沒收excepcion而不是使用正則表達式:

try{ 
    douFrom = Double.valueOf(from); 
    douTo = Double.valueOf(to); 
}catch(NullPointerException | NumberFormatException ex){ 
    val = false; 
} 
+1

我完全同意你的最後一段。 – EJP

+0

首先,謝謝,我甚至沒有得到,在引號裏面,它真的解析了這個詞?! 所以你的意思是更好地刪除正則表達式,如果它的輸入不能被解析,那麼我會捕獲該異常,並在catch部分而不是try部分處理錯誤(目前如果表單發送的是某些東西而不是雙數,整個數據剛剛出現,這是intenional) – dmocca

+0

我的意思是,我已經發布的try-catch塊做你的if-else語句做什麼,但更簡單,並評估任何可能的有效雙值。 –