2015-05-29 62 views
0

我想用jsp代碼做一個上傳圖片到mysql的web,但是有一個錯誤,我不知道如何解決編碼。Java錯誤:org.apache.jasper.JasperException:無法編譯JSP的類:

首先,我必須找到一個例子 「upload.html」

<title>Select your File to upload</title> 
<form action="loading_blob.jsp" method=POST ENCTYPE="multipart/form-data"> 
Staff ID: 
<input type=text name=id> 
Photo: 
<input type=file name=uploadfile> 

<input type=submit name=button value=upload> 
</form> 

,並與實例(loading_blob.jsp)並下載cos.jar,放入tomcat-> LIB

<%@ page import="java.io.*, java.sql.*, java.util.*, javax.servlet.*, javax.servlet.http.*, com.oreilly.servlet.multipart.*" %> 

<% 
String contentType = request.getContentType(); 
System.out.println("Content type is :: " +contentType); 


String dirname = "C:\\apache-tomcat-6.0.26\\webapps\\ROOT\\upload-example\\"; 
File dir = new File(dirname); 
String value = ""; 
String fileName = ""; 
String filePath = ""; 
long size = 0; 

MultipartParser mp = new MultipartParser(request, 1*1024*1024); // 10MB 
Part part; 
while ((part = mp.readNextPart()) != null) { 
    String name = part.getName(); 
    if (part.isParam()) { 
    // it's a parameter part 
    if (name.equals("id")) 
     { 
     ParamPart paramPart = (ParamPart) part; 
    value = paramPart.getStringValue(); 
    out.println("param; name=" + name + ", value=" + value); 
     } 
    } 
    else if (part.isFile()) { 
      // it's a file part 
     FilePart filePart = (FilePart) part; 
     fileName = filePart.getFileName(); 
     if (fileName != null) { 
       filePath = filePart.getFilePath(); 
      // the part actually contained a file 
      size = filePart.writeTo(dir); 
      out.println("file; name=" + name + "; filename=" + fileName + 
      ", filePath=" + filePath + 
      ", content type=" + filePart.getContentType() + 
      ", size=" + size); 
     } 
     else { 
     // the field did not contain a file 
     out.println("file; name=" + name + "; EMPTY"); 
      } 
    } 

    } 

String dirname1 = dirname + fileName; 
out.println(dirname1 + size); 
Class.forName("com.mysql.jdbc.Driver"); 
Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db1", "root", "0000"); 

InputStream fis = new FileInputStream(dirname1); 

PreparedStatement ps = con.prepareStatement("Update person set photo = ?, filename = ? where staff_id = ?"); 

ps.setBinaryStream (1, fis, size); 

ps.setString (2, fileName); 
ps.setString (3, value); 
ps.executeUpdate(); 
ps.close(); 

fis.close(); 

%> 

錯誤聲明:

An error occurred at line: 16 in the jsp file: /loading_blob.jsp 
The type Part is ambiguous 
13: long size = 0; 
14: 
15: MultipartParser mp = new MultipartParser(request, 1*1024*1024); // 10MB 
16: Part part; 
17: while ((part = mp.readNextPart()) != null) { 
18: String name = part.getName(); 
19: if (part.isParam()) { 


Stacktrace: 
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92) 
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330) 
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:349) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:327) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:314) 
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

謝謝

+0

推薦閱讀:http://stackoverflow.com/questions/20255420/what-is-an-ambiguous-type-error-in-java – Gimby

回答

1

根據@ Gimby的評論。調查進口;

您有兩個零件對象。 javax.servlet.http.Part和com.oreilly.servlet.multipart.Part。所以你應該指定使用哪一個。

javax.servlet.http.Partcom.oreilly.servlet.multipart.Part這樣使用。

順便說一句,嘗試定義零件對象爲空。

MultipartParser mp = new MultipartParser(request, 1*1024*1024); // 10MB 
com.oreilly.servlet.multipart.Part part = null; //Example usage , btw On the next line in while section `part = mp.readNextPart()` part shouldn't be null. 
+0

我看不出這將使類型「部分'對編譯器不那麼模糊。 – Gimby

+0

@Gimby是的,你是對的,我調查了進口。所以它有兩個Part對象。我根據你的通知改進了答案,謝謝。 –

相關問題