2017-08-25 5 views
-5

(サーブレット) - 内部サーバーエラー、具体的には:NumberFormatException htmlフォームから文字列を2倍に解析する際にエラーが発生しました。私はHTTPステータス500抱えている

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. 

私が解決しようとしている状況がある私は2つを持つHTMLフォームを持っているにservlet1を持っていることあなたがそれらを傷つけると、Servlet2にそれらの入力を受け取り、ifステートメントを通してそれらをチェックし、次に文字列を2倍に解析します。これらの入力の間の値は、表示されるデータになります。だから、私は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

は引用符を削除します。

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

は、とにかく、私はあなたの入力が有効なことexcepcionを引く代わりに正規表現を使用することにより、二重があるかどうかを検証することをお勧めだと思います:それはこの方法でなければなりません。 valueOf(from) 'ではなく、Double.valueOf(" from ")ではありません。私はエラーメッセージがかなり説明していることを意味します:4文字の文字列値 'from'は有効な数字ではありません。 – Andreas

+2

'Double.valueOf(" from ");'? '' '' ''から ''どのように? '、おそらく 'Double.valueOf(from);'を意味していたでしょうか? – MadProgrammer

+0

正規表現は文字列に*が含まれているかどうかをチェックするだけなので、 'Double.valueOf(from)'は依然として壊れています。数字だけを解析するには、["0-9] +" 'または" \\ d + "'を使用する必要があります。しかし、これはもちろん整数にしか一致しません。 – shmosel

答えて

3

あなたの問題はここにある:

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

あなたは文字列リテラルではなく、変数を解析しています。 `ダブル:

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

私は完全にあなたの最後の段落に同意します。 – EJP

+0

まずはおかげさまで、私は得意でもなく、引用符の中に文字通り単語を解析していましたか? 正規表現を削除することをお勧めします。入力を解析できない場合は、その例外を捕捉し、tryセクションではなくcatchセクションでエラーを処理します(フォームが – dmocca

+0

私が意味することは、あなたがあなたのif-elseステートメントでやっていることをやっていますが、シンプルで可能な有効なdouble値を評価しているということです。 –

関連する問題