2017-08-25 79 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语句做什么,但更简单,并评估任何可能的有效双值。 –