servlet中的java.lang.NumberFormatException错误

servlet中的java.lang.NumberFormatException错误,java,jsp,servlets,image-uploading,Java,Jsp,Servlets,Image Uploading,这是我的jsp表单 <%@ page import="java.sql.*"%> <%@ page import="java.io.*"%> <jsp:include page="common_header.jsp" /> <center> <form action="projects" method="post" enctype="multipart/form-data" name="productForm" id="productFo

这是我的jsp表单

<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>


<jsp:include page="common_header.jsp" />
<center>
<form action="projects" method="post" enctype="multipart/form-data" name="productForm" id="productForm">
    <div class="row grid_12" id="add_service">
        <h2>Add Project</h2>
        <div class="grid_6">
            <label>Project Name</label>
            <div class="clear"></div>
            <input type="text" name="name" id="name" class="text_box">
        </div>
        <div class="clear"></div>

        <div class="grid_6">    
            <label>Project Short Description</label>
            <div class="clear"></div>
            <textarea name="short_description" id="short_description" class="text_area"></textarea>
        </div>
        <div class="grid_6 last">
            <label>Project Long Description</label>
            <div class="clear"></div>
            <textarea name="long_description" id="long_description" class="text_area"></textarea>
        </div>

        <div class="clear"></div>
        <div class="grid_6">
            <label>Image</label>
            <div class="clear"></div>
            <input type="file" id="file" name="file"/>
        </div>

        <div class="grid_6 last">
            <label>Link</label>
            <div class="clear"></div>
            <input type="text" name="link" id="link" class="text_box">
        </div>

        <div class="clear"></div>

        <div class="grid_6">
            <label>Status</label>
            <div class="clear"></div>
            <select id="status" name="status">
                <option value="1">In-Progress</option>
                <option value="2">Completed</option>
                <option value="3">Re-Opened</option>
                <option value="4">Just Discussed</option>
            </select>
        </div>

        <div class="grid_6 last">
            <label>Client</label>
            <div class="clear"></div>
            <input type="text" name="client" id="client" class="text_box">
        </div>

        <div class="clear"></div>
        <input type="submit" name="Submit" value="Submit">
    </div>
</form>

</center>
<jsp:include page="/common_footer.jsp" />
我的
project\u info
代码如下

Dec 30, 2011 11:13:37 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:Admin Website' did not find a matching property.
Dec 30, 2011 11:13:37 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:Temp' did not find a matching property.
Dec 30, 2011 11:13:37 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre6\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Java\jdk1.6.0_10\bin;
Dec 30, 2011 11:13:37 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Dec 30, 2011 11:13:37 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 365 ms
Dec 30, 2011 11:13:37 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Dec 30, 2011 11:13:37 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.20
Dec 30, 2011 11:13:38 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Dec 30, 2011 11:13:38 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Dec 30, 2011 11:13:38 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/15  config=null
Dec 30, 2011 11:13:38 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 296 ms
null
null
Dec 30, 2011 11:13:58 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet projects threw exception
java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at projects.doPost(projects.java:73)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Unknown Source)
软件包管理员

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class project_info
{
    String name, short_description, long_description, link, client;
    int id, status, file_length;
    InputStream image;

    public project_info()
    {
        name    =   null;
        short_description   =   null;
        long_description    =   null;
        link                =   null;
        id      =   0;
        status  =   0;
        image   =   null;
        file_length =   0;
    }

    public project_info(String aname, String sdescription, String ldescription, String alink, int astatus, InputStream apath,int afile_length, String aclient)
    {
        name    =   aname;
        short_description   =   sdescription;
        long_description    =   ldescription;
        link                =   alink;
        status              =   astatus;
        image               =   apath;
        file_length         =   afile_length;
        client              =   aclient;
    }



    //function for create entry in database
    public int create()
    {
        int flag = 0;
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con              = DriverManager.getConnection("jdbc:mysql://localhost/site?user=root&password=root");
            String query                = "INSERT INTO projects(name, short_description, long_description, status, link, image, client) values(?,?,?,?,?,?,?)";
            PreparedStatement statement = con.prepareStatement(query);
            statement.setString(1, name);
            statement.setString(2, short_description);
            statement.setString(3, long_description);
            statement.setInt(4, status);
            statement.setString(5, link);


            statement.setBinaryStream(6,image, file_length);

            statement.setString(7, client);
            statement.executeUpdate();
            statement.close();
            con.close();
            flag = 1;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            flag = 0;
        }
        return flag;
    }
}
在过去的三天里,我得到了同样的错误

HTTP Status 500 -

type Exception report

message

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

exception

java.lang.NumberFormatException: null
    java.lang.Integer.parseInt(Unknown Source)
    java.lang.Integer.parseInt(Unknown Source)
    projects.doPost(projects.java:21)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.20 logs.
Apache Tomcat/6.0.20
我没有达到我误解的地方

完整的StackTrace如下所示

Dec 30, 2011 11:13:37 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:Admin Website' did not find a matching property.
Dec 30, 2011 11:13:37 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:Temp' did not find a matching property.
Dec 30, 2011 11:13:37 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre6\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Java\jdk1.6.0_10\bin;
Dec 30, 2011 11:13:37 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Dec 30, 2011 11:13:37 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 365 ms
Dec 30, 2011 11:13:37 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Dec 30, 2011 11:13:37 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.20
Dec 30, 2011 11:13:38 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Dec 30, 2011 11:13:38 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Dec 30, 2011 11:13:38 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/15  config=null
Dec 30, 2011 11:13:38 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 296 ms
null
null
Dec 30, 2011 11:13:58 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet projects threw exception
java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at projects.doPost(projects.java:73)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Unknown Source)

从非整数值创建整数时会发生NumberFormatException。导致问题的servlet中的以下行。“status”值似乎为空。确保在“状态”字符串中输入正确的整数值

int astatus     =   Integer.parseInt(status);

您应该完全重新编写代码的这一部分:

    String file = new String(dataBytes);        

    saveFile = file.substring(file.indexOf("filename=\"") + 10);
    saveFile = saveFile.substring(0, saveFile.indexOf("\n"));
    saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,
            saveFile.indexOf("\""));
    int lastIndex = contentType.lastIndexOf("=");
    String boundary = contentType.substring(lastIndex + 1, contentType
            .length());
    int pos;
    pos = file.indexOf("filename=\"");
    pos = file.indexOf("\n", pos) + 1;
    pos = file.indexOf("\n", pos) + 1;
    pos = file.indexOf("\n", pos) + 1;
    int boundaryLocation = file.indexOf(boundary, pos) - 4;
    int startPos = ((file.substring(0, pos)).getBytes()).length;
    int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;
有许多输入将导致此失败。考虑使用简明正则表达式、StrugUTLS和NUMLUTILS来简化工作。这段解析代码有点难闻


祝你好运。

我想问题出在这方面

int formDataLength = req.getContentLength();

这里可能是req.getContentLength()为null或stats为null,当您尝试将null值分配给integer时,这将引发numerformat异常

在分配给任何变量之前,请检查req.getContentLength()是否为null

if(req.getContentLength() != null){
     int formDataLength = req.getContentLength();
}

if(status != null){
   int astatus = Integer.parseInt(status);
}
enctype=“多部分/表单数据”
是问题所在

简而言之,在使用多部分/表单数据时,我们不能使用request.getParameter()


:)

您可以调试并查看正在发送的
状态吗。它需要是一个整数。参数
status
的值为空。我已尝试调试。表单内容未提交。Roseindia.net代码警报!!enctype=“多部分/表单数据”是问题所在。。!简而言之,当我们使用多部分/表单数据时,我们不能使用request.getParameter()),这段代码实际上是从roseindia.net复制粘贴的,roseindia.net是Interent所知道的最糟糕的代码示例库之一。另见
if(req.getContentLength() != null){
     int formDataLength = req.getContentLength();
}

if(status != null){
   int astatus = Integer.parseInt(status);
}