2009-07-17 22 views
8

ファイルアップロードコードが機能しないのはなぜですか?JSP - Apache Commonsを使用したファイルアップロード

私は "コモンズ - ファイルアップロード-1.1.1.jar" を使用しています。

はまた、私は、NetBeans 6.1で「isMultipartContent」の第二ラインで取り消し線を見ています。コモンズ-ファイルアップロードがcommons-ioに依存してい

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

ので:

// 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

ちょうど注意してください - あなたのデータベースのクエリは私が少し気になる。 StatementとResultSetオブジェクトが閉じられていないとメモリリークが発生し、入力を直接クエリにコピーしているため注入攻撃が発生しているようです。

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(); 
} 
関連する問題