2009-07-17 41 views
8

Tại sao mã tải lên tệp của tôi không hoạt động?JSP - Tải lên tệp bằng Apache Commons

Tôi đang sử dụng "commons-fileupload-1.1.1.jar".

Ngoài ra tôi thấy một đường gạch ngang trong Dòng thứ hai trên "isMultipartContent" trong NetBeans 6.1.

// 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(); 
     } 
     } 
    } 
    } 
} 

Và Tôi nhận được tin nhắn này:

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. 

Trả lời

11

Vì commons-FileUpload có một sự phụ thuộc vào commons-io. Thêm nó vào classpath của bạn.

2

Chỉ cần lưu ý - truy vấn cơ sở dữ liệu của bạn làm cho tôi rạn nứt một chút. Dường như nó mở ra để rò rỉ bộ nhớ nếu các đối tượng Statement và ResultSet không được đóng lại và các cuộc tấn công tiêm vì bạn đang sao chép đầu vào thẳng vào truy vấn.

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(); 
} 
Các vấn đề liên quan