Java 为什么我会有数字形式的感觉

Java 为什么我会有数字形式的感觉,java,mysql,Java,Mysql,您好,我只是想知道为什么我尝试运行这个servlet时会出现NumberFormatException。。。我已经尝试了很多不同的方法,现在正在寻求帮助。谢谢 @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String artistName = request.getPara

您好,我只是想知道为什么我尝试运行这个servlet时会出现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.

您正试图将空字符串解析为无效的数字

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

您可能希望在请求数据上添加服务器端验证程序,因为您试图解析空字符串,所以出现此异常,我怀疑以下参数:

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);
}
或者,您可以捕获异常,而无需对参数进行验证,但这取决于您的业务案例

int yearReleasedInt = 0;
try {
    yearReleasedInt = Integer.parseInt(yearReleased);
} catch(NumberFormatException ex) {
    //handle exception
}
以下任一项:

int yearReleasedInt = Integer.parseInt(yearReleased);
int weekAtNumberOneInt = Integer.parseInt(weekAtNumberOne);
或者两者都可能导致错误。尝试打印
yearReleased
weekAtNumberOne
并查看
字符串

你可以做以下事情:

int yearReleasedInt = -1;

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

if(yearReleasedInt  != -1) {
   // do your work.
}