2017-03-25 3 views
-1

Mein Servlet-Code für ein Online-Formular-gestütztes Buchungssystem mit Java, JSP und MySQL wirft fortwährend eine NumberFormatException auf die Zeile beginnend bei 'int customer'. Abgesehen von hier ist nichts anderes mit meinem Code verkehrt.Servlet-Code, der NumberFormatException verursacht

java.lang.NumberFormatException: Für Eingabestring: "null"

Wenn ich für null oder leere Zeichenfolgen überprüfen alles, was ich Fehler bekommen.

if (submit.equals("add booking")) {   
       int customerID = Integer.parseInt(request.getParameter("customerID").trim()); 
       int routeID = Integer.parseInt(request.getParameter("routeID").trim()); 
       String sailing = request.getParameter("sailing").trim(); 
       int noAdults = Integer.parseInt(request.getParameter("noAdults").trim()); 
       int noChildren = Integer.parseInt(request.getParameter("noChildren").trim()); 
       String otherinfo = request.getParameter("otherinfo").trim(); 
       if (sailing.equalsIgnoreCase("")) { 
        url = "/scotiavalidation.jsp"; 
       } else { 
        bookingManager.addBooking(customerID, routeID, sailing, noAdults, noChildren, otherinfo); 
        int bookingID = 0; 
        bookingID = bookingManager.getBookingIdByAdd(bookingID); 
        request.setAttribute("bookingID", bookingID); 
        url = "/bookingConfirmation.jsp"; 
       } 

Ich weiß, ich brauche einen Versuch catch Block irgendwo, aber ich kann es nicht herausfinden. Kann jemand eine Lösung vorschlagen? My Glassfish 4.1.1 Ausgabe sieht wie folgt aus:

Warning: StandardWrapperValve[BookingServlet]: Servlet.service() for servlet BookingServlet threw exceptionjava.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 controller.BookingServlet.processRequest(BookingServlet.java:46) 
at controller.BookingServlet.doGet(BookingServlet.java:161) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:416) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283) 
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) 
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) 
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206) 
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180) 
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) 
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132) 
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111) 
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536) 
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591) 
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571) 
at java.lang.Thread.run(Thread.java:745) 

ich Sitzungen in Meine JSP-Seiten verwenden. Hier ist ein Fragment:

Antwort

1

Integer.parseInt (Wert) .in hier Wert möglicherweise nicht als Int. Es kann alphabetische oder andere Zeichen haben. Es ist besser, zuerst die Benutzereingabe zu validieren, um zu prüfen, ob dies ein numerischer Wert ist, bevor Sie zu int springen.

Sie können Apache Commons Lang 3.5 NumberUtils.isCreatable oder StringUtils.isNumeric verwenden.

die Validierung zu tun

1

Es scheint, Ihr Wert für customerID als String „null“ zurückgeführt wird. Sie müssen validieren, bevor Sie sie umsetzen. Sie sollten auch Ihre JSP überprüfen, warum customerID auf "null" gesetzt ist. Sie müssen auch wie

if (submit.equals("add booking")&&request.getParameter("customerID")!=null) 
1

die Fehlermeldung in Ihrem servlet.Something überprüfen, ist klar:

java.lang.NumberFormatException: Für Eingabestring: "null"

Sie Parsen einen null Wert als Nummer. Sind Sie sicher, dass Integer-Parameter gefüllt sind ?.

Überprüfen Sie für null Zeiger vor Anruf Integer.parse oder trim Funktionen.

Verwandte Themen