(サーブレット) - 内部サーバーエラー、具体的には: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;
}
ありがとうございます!
は引用符を削除します。
は、とにかく、私はあなたの入力が有効なことexcepcionを引く代わりに正規表現を使用することにより、二重があるかどうかを検証することをお勧めだと思います:それはこの方法でなければなりません。 valueOf(from) 'ではなく、Double.valueOf(" from ")ではありません。私はエラーメッセージがかなり説明していることを意味します:4文字の文字列値 'from'は有効な数字ではありません。 – Andreas
'Double.valueOf(" from ");'? '' '' ''から ''どのように? '、おそらく 'Double.valueOf(from);'を意味していたでしょうか? – MadProgrammer
正規表現は文字列に*が含まれているかどうかをチェックするだけなので、 'Double.valueOf(from)'は依然として壊れています。数字だけを解析するには、["0-9] +" 'または" \\ d + "'を使用する必要があります。しかし、これはもちろん整数にしか一致しません。 – shmosel