2016-07-27 22 views
-3

這是一個簡單的計算器,有兩個操作:'+'&' - '。 前段時間我運行它,一切正常。但是在某些時候,我失敗了,無法理解發生了什麼。servlet中的java.lang.NumberFormatException

這是我的源:

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Calculator</title> 
</head> 
<body> 
    <h1>Calculator</h1> 
    <form action="./" method="get"> 
     <label>First number:</label> <input type="text" name="num1" /> <br /> 
     <label>Second number: </label> <input type="text" name="num2" /> <br /> 
      <select name="operator"> 
       <option value="+">+</option> 
       <option value="-">-</option> 
      </select> 
     <input type="submit" value="submit" /> 
    </form> 
</body> 
</html> 

XML

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>Calculator</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <servlet-name>Calculator</servlet-name> 
    <servlet-class>ua.nure.nechyporuk.Calculator</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Calculator</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 
</web-app> 

的.java

package ua.nure.nechyporuk; 

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 



public class Calculator extends HttpServlet { 

    private static final long serialVersionUID = 1L; 

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     try { 
      response.setContentType("text/html"); 
      int a1 = Integer.parseInt(request.getParameter("num1")); 
      int a2 = Integer.parseInt(request.getParameter("num2")); 
      String operator = request.getParameter("operator"); 
      if (operator.equals("+")&& operator != null) { 
       request.setAttribute("operation", "addition"); 
       request.setAttribute("res", a1+a2); 
       request.getRequestDispatcher("index.jsp").forward(request, response); 
      } 
      if (operator.equals("-")&& operator != null) { 
       request.setAttribute("operation", "subtract"); 
       request.setAttribute("res", a1-a2); 
       request.getRequestDispatcher("index.jsp").forward(request, response); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<html> 
<head> 
    <title>Result of calculation:</title> 
</head> 
<body> 
    <h1>Result of ${operation}</h1> 
    <h1>${res}</h1> 
    <a href= "http://localhost:8081/Calculator">back to calculator</a>; 
</body> 
</html> 

我不明白爲什麼會出現此錯誤。 像html頁面沒有時間工作。 Tomkat我設置爲端口8081

例外:

java.lang.NumberFormatException: For input string: "null" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:580) 
    at java.lang.Integer.parseInt(Integer.java:615) 
    at ua.nure.nechyporuk.Calculator.doGet(Calculator.java:17) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1082) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:623) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
+0

添加你不要的complate錯誤信息 – Jens

+0

傳遞參數給servlet。這就是爲什麼你看到'request'.getParameter(「num1」)''''request.getParameter(「num2」)''看到空的 – Apostolos

+0

'並看看它先打印什麼。 – Apostolos

回答

0

如果不使用此

Integer.parseInt(request.getParameter("num1")); 

試試這個。只需添加"" +request.getParameter("num1")

Integer.parseInt("" + request.getParameter("num1")); 

希望這將解決您的問題。並確保你輸入你的領域

有效的整數更新

檢查null

String str=request.getParameter("num1"); 

    int a=0; 

    if(str!=null){ 
     a = Integer.parseInt("" + str); 
    } 
+0

我還沒有加載html頁面,我沒有時間輸入數據。 不幸的是,你的決定沒有幫助.. –

+0

錯誤轉移到操作員輸入驗證。 –

相關問題