2013-02-21 210 views
0

我正在創建一個標準的動態Web項目,包括一個Servlet,一個過濾器來過濾請求和jsp頁面。 我從welcome.jsp中獲取書籍的數量,並根據計數我在add.jsp上填充輸入框。我想過濾通過add.jsp傳來的數據。當我通過Regex驗證數據時,顯示錯誤。我的流程也是正確的,即從開始的FILTER - > CONTROLLER - > FILTER - > PAGE等等。HTTP狀態500 - java.lang.NumberFormatException:null

錯誤: java.lang.NumberFormatException:空

完整跟蹤是這樣的:


HTTP Status 500 - java.lang.NumberFormatException: null 

type Exception report 

message java.lang.NumberFormatException: null 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException: java.lang.NumberFormatException: null 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    com.filter.RequestFilter.doFilter(RequestFilter.java:107) 

root cause 

java.lang.NumberFormatException: null 
    java.lang.Integer.parseInt(Unknown Source) 
    java.lang.Integer.parseInt(Unknown Source) 
    org.apache.jsp.WEB_002dINF.add_jsp._jspService(add_jsp.java:139) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    com.filter.RequestFilter.doFilter(RequestFilter.java:107) 

的代碼,其中其表現是:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    // TODO Auto-generated method stub 
    // place your code here 
    boolean flag = true; 
    HttpServletRequest httpServletRequest = (HttpServletRequest) request; 
    HttpServletResponse httpResponse = (HttpServletResponse) response; 
    httpServletRequest.getServletPath(); 
    System.out.println(httpServletRequest.getServletPath()); 


    String address = InetAddress.getLocalHost().getHostAddress(); 
    System.out.println(address); 


    // For the first time (Welcome page) i will be 0 so that it will perform first if 

    if(i == 0) 
    { 
     System.out.println(i); 
     if(verify(address)) 
     { 
      chain.doFilter(request, response); 
      i++; 
     } 

     else 
     { 
      RequestDispatcher requestDispatcher = httpServletRequest.getServletContext().getRequestDispatcher("/WEB-INF/forbidden.jsp"); 
      requestDispatcher.forward(request, response); 
      return; 
     } 

    } 

    // For the second time (Controller) i will be 1 so that it will perform first if 


    else if(i == 1) 
    { 
     System.out.println(i); 
     i++; 
     System.out.println("after ++"+i); 
     chain.doFilter(request, response); 
    } 

    // For the second time (add page) i will be 2 so that it will perform first if 


    else if(i == 2) 
    { 

     if(specialChara(httpServletRequest)) 
      { 
       System.out.println(i); 
       System.out.println("done"); 
       i++; 
       chain.doFilter(request, response); 
      } 

      else 
      { 
       System.out.println(i); 
       flag = false; 
       System.out.println(""+httpServletRequest.toString()+ "\n"+httpResponse.toString()); 
       RequestDispatcher requestDispatcher = httpServletRequest.getServletContext().getRequestDispatcher("/WEB-INF/add.jsp"); 
       requestDispatcher.forward(request, response); 

      } 
    } 

    // For the third time (Controller) i will be 2 so that it will perform first if 

    else if(i == 3) 
    { 
     System.out.println(i); 
     i++; 
     chain.doFilter(request, response); 
     i = 0; 
    } 

它給e rror在循環中forward()的行,其中我= 2。 可能是什麼問題? add.jsp的

鏈接https://docs.google.com/document/d/1fOzymYvlLXS577DrSrznRoeBnI7_hMmuqzFoK02xKoU/edit?usp=sharing

回答

1

從堆棧跟蹤似乎問題不在於你的java類,而是你的JSP。我的猜測是在線

int no = Integer.parseInt(request.getParameter("no")); 

似乎不是null.Also最好使用和其他條件標籤,而不是在JSP中使用scriptlet。

+0

請問我該怎麼做呢? 我應該將它存儲到會話對象嗎? – 2013-02-21 06:00:13

+0

您應該調試爲什麼「否」爲空。你在Java類的請求範圍中設置了這個值嗎? – HarshaKA 2013-02-24 05:05:28

相關問題