2014-03-02 4 views
0

안녕하세요 저는이 서블릿을 실행하려고 할 때 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); 
    } 

} 

여기에 톰캣 로그입니다 :

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"); 

는 요청 PARAMS 다음 그들에게

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. 
} 
관련 문제