2014-03-02 71 views
0

你好,我只想知道为什么当我尝试运行这个servlet时,我得到一个NumberFormatException ...我已经尝试了很多不同的东西,现在正在寻找一些帮助。谢谢。为什么我得到一个NumberFormatException

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 


    String artistName = request.getParameter("artistName"); 
    String songTitle = request.getParameter("songTitle"); 
    String albumTitle = request.getParameter("albumTitle"); 
    String yearReleased = request.getParameter("yearReleased"); 
    String weekAtNumberOne = request.getParameter("weekAtNumberOne"); 

    int yearReleasedInt = Integer.parseInt(yearReleased); 
    int weekAtNumberOneInt = Integer.parseInt(weekAtNumberOne); 

    ServletContext sc = this.getServletContext(); 
    String dbDriver = sc.getInitParameter("driver"); 
    String dbURL = sc.getInitParameter("url"); 
    String dbName = sc.getInitParameter("database"); 
    String dbUser = sc.getInitParameter("dbusername"); 
    String dbPassword = sc.getInitParameter("dbpassword"); 


    DBConnector.createConnection(dbDriver, dbURL, dbName, dbUser, dbPassword); 





    Song song = new Song(artistName, songTitle, weekAtNumberOneInt , yearReleasedInt, albumTitle); 

    SongDAO songDAO = new SongDAO(); 

    if (songDAO.ArtistCheck(song) == true) 
    { 
     RequestDispatcher rd = request.getRequestDispatcher("/addNewArtist.jsp"); 
     rd.forward(request, response); 

    } 
    else 
    { 
     songDAO.AddNewSong(song); 
     RequestDispatcher rd = request.getRequestDispatcher("GetAllSongs.do"); 
     rd.forward(request, response); 
    } 

} 

这里的Tomcat的日志:

Mar 02, 2014 12:28:51 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [AddNewSingleServlet] in context with path [/test]   threw exception 
java.lang.NumberFormatException: For input string: "" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Integer.parseInt(Integer.java:504) 
at java.lang.Integer.parseInt(Integer.java:527) 
at com.assignment2.Servlets.AddNewSingleServlet.doPost(AddNewSingleServlet.java:67) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
at  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:744) 








    String dbName = sc.getInitParameter("database"); is line 67 in the error. 

回答

1

您尝试解析空字符串号码是无效

java.lang.NumberFormatException: For input string: "" 

你可能想在添加服务器端验证您的请求数据

0

由于您试图解析空字符串,我怀疑这个参数:

String yearReleased = request.getParameter("yearReleased"); 
String weekAtNumberOne = request.getParameter("weekAtNumberOne"); 

确保请求参数不为空,然后尝试分析他们

int yearReleasedInt = Integer.parseInt(yearReleased); 
if(yearReleasedInt != null || !yearReleasedInt.equals("")) { 
    int yearReleasedInt = Integer.parseInt(yearReleased); 
} 

或者你可以捕捉异常而不做存在params验证,但取决于你的商业案例。

int yearReleasedInt = 0; 
try { 
    yearReleasedInt = Integer.parseInt(yearReleased); 
} catch(NumberFormatException ex) { 
    //handle exception 
} 
0

之一:

int yearReleasedInt = Integer.parseInt(yearReleased); 
int weekAtNumberOneInt = Integer.parseInt(weekAtNumberOne); 

或两者可能导致错误。尝试打印yearReleasedweekAtNumberOne并查看String值。

你可以做一些如:

int yearReleasedInt = -1; 

try { 
    yearReleasedInt = Integer.parseInt(yearReleased); 
} catch(Exception ex){ 
    //handle error 
} 

if(yearReleasedInt != -1) { 
    // do your work. 
} 
相关问题