2009-07-17 12 views
8

के साथ फ़ाइल अपलोड करें मेरा फ़ाइल अपलोड कोड क्यों काम नहीं कर रहा है?जेएसपी - अपाचे कॉमन्स

मैं "commons-fileupload-1.1.1.jar" का उपयोग कर रहा हूं।

मैं नेटबीन्स 6.1 में "isMultipartContent" पर दूसरी पंक्ति में स्ट्राइकथ्रू देख रहा हूं।

org.apache.jasper.JasperException: An exception occurred processing JSP page /Process_FileUpload.jsp at line 75 

73: 
74:   // Parse the request and Extract request items 
75:   List items = upload.parseRequest(request); 
76:   
77: 
78:   // create an Iterator to iterate through request items 
79:   Iterator iter = items.iterator(); 

Stacktrace: 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) 

root cause 

javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream 
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850) 
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779) 
    org.apache.jsp.Process_005fFileUpload_jsp._jspService(Process_005fFileUpload_jsp.java:546) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) 

root cause 

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream 
    org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:179) 
    org.apache.commons.fileupload.FileUploadBase.createItem(FileUploadBase.java:500) 
    org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:367) 
    org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:116) 
    org.apache.jsp.Process_005fFileUpload_jsp._jspService(Process_005fFileUpload_jsp.java:138) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) 

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs. 

उत्तर

11

क्योंकि कॉमन्स-fileupload commons-io पर एक निर्भरता है:

// Check that we have a file upload request 
>>>> boolean isMultipart = FileUpload.isMultipartContent(request); 

// Create variables for path, filename and extension 
appPath = application.getRealPath("\\"); 

// Create a factory for disk-based file items 
FileItemFactory factory = new DiskFileItemFactory(); 

// Create a new file upload handler 
ServletFileUpload upload = new ServletFileUpload(factory); 

// Parse the request and Extract request items 
>>>>> List items = upload.parseRequest(request); 

// create an Iterator to iterate through request items 
Iterator iter = items.iterator(); 

//Form fields 
//out.println("<br><br>While loop started"); 

while (iter.hasNext()) 
{ 
    FileItem item = (FileItem) iter.next(); 

    if(item.isFormField()) 
    { 
    String name = item.getFieldName(); 
    String value = item.getString(); 

    if(name.equals("txtUsername")) 
    { 
     _USERNAME_ = value; 

     Class.forName("org.gjt.mm.mysql.Driver"); 

     try 
     { 
     connection = DriverManager.getConnection("jdbc:mysql://localhost/ict"); 
     statement = connection.createStatement(); 
     recordset = statement.executeQuery("SELECT * FROM registered_students WHERE username=\'" + _USERNAME_ + "\'"); 

     while(recordset.next()) 
     { 
      roll = recordset.getString(4); 

      _ROLL_ = roll; 
     } 

     recordset.close(); 
     recordset=null; 

     statement.close(); 
     statement=null; 
     } 
     finally 
     { 
     if(connection!=null) 
     { 
      connection.close(); 
     } 
     } 
    } 
    } 
} 

और मैं इस संदेश को हो रही है। इसे अपने क्लासपाथ में जोड़ें।

2

बस एक नोट - आपकी डेटाबेस क्वेरी मुझे थोड़ा सा क्रिंग करती है। अगर स्टेटमेंट और परिणामसेट ऑब्जेक्ट बंद नहीं होते हैं, और इंजेक्शन हमलों के बाद यह मेमोरी लीक के लिए खुला लगता है क्योंकि आप सीधे क्वेरी में इनपुट कॉपी कर रहे हैं।

PreparedStatement select = null; 
ResultSet rs = null; 

try { con.prepareStatement("SELECT * FROM registered_students WHERE username = ?"); 
    select.setString(1, username); 
    rs = select.executeQuery(); 
} finally { 
    if (select != null) select.close(); 
    if (rs != null) rs.close(); 
} 
संबंधित मुद्दे