2017-11-08 15 views
0

私は過去2日間ほどこの問題を解決しようとしていましたが、私は壁に当たっています。CommonsFileUpload - タイプDiskFileItemFactoryのparseRequest(HttpServletRequest)メソッドが未定義です

type: Exception report 

message: Servlet execution threw an exception 

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

exception: 

javax.servlet.ServletException: Servlet execution threw an exception 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
root cause 

java.lang.Error: Unresolved compilation problems: 
    Type mismatch: cannot convert from ServletFileUpload to List<FileItem> 
    The method parseRequest(HttpServletRequest) is undefined for the type DiskFileItemFactory 

    com.codeFactory.UploadServlet1.doPost(UploadServlet1.java:50) 
    com.codeFactory.UploadServlet1.doGet(UploadServlet1.java:37) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

マイアップロードサーブレット(UploadServlet1.java):

package com.codeFactory; 


import java.io.IOException; 
import java.util.List; 
import java.io.File; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.commons.fileupload.FileItem; 
import org.apache.tomcat.util.http.fileupload.disk.DiskFileItemFactory; 
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload; 

/** 
* Servlet implementation class UploadServlet1 
*/ 
@WebServlet("/UploadServlet1") 
public class UploadServlet1 extends HttpServlet { 
    private final String UPLOAD_DIRECTORY = "D:/abc"; 
    private static final long serialVersionUID = 1L; 

    /** 
    * @see HttpServlet#HttpServlet() 
    */ 
    public UploadServlet1() { 
     super(); 
     // TODO Auto-generated constructor stub 
    } 

    /** 
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     doPost(request,response); 
     response.getWriter().append("Served at: ").append(request.getContextPath()); 
    } 

    /** 
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     if(ServletFileUpload.isMultipartContent(request)) 
     { 
      try 
      { 
       List<FileItem>multiparts=new ServletFileUpload(new DiskFileItemFactory().parseRequest(request)); 
       for(FileItem item : multiparts) 
       { 
        if(!item.isFormField()) 
        { 
         String name=new File(item.getName()).getName(); 
         item.write(new File(UPLOAD_DIRECTORY + File.separator +name)); 
        } 
       } 
       request.setAttribute("message", "file uploaded successfully"); 
      } 
      catch(Exception ex) 
      { 
       request.setAttribute("message", "file uploaded failed"+ex); 
      } 
     } 
     else 
     { 
      request.setAttribute("message", "This servlet handles only file upload request"); 
     } 
     request.getRequestDispatcher("/result.jsp").forward(request, response); 
    } 

} 

私の(私は、Javaサーブレットによってアルファベット順に複数のファイルをアップロードしようとしているが、私は次のエラーを取得しています

result.jsp)code

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
     pageEncoding="ISO-8859-1"%> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <title>Result page</title> 
    </head> 
    <body> 
    <div> 
    <h3> $ {message}</h3> 
    </div> 
    </body> 
    </html> 

ここで何をすればいいですか?

+0

てみてください。) –

+0

大丈夫先生、私は – Vasanth

+0

@SergiyをしようとしますMedvynskyy私は私の全体のコードを更新している、あなたはどんなアイデア先生 – Vasanth

答えて

0

問題は、DiskFileItemFactoryに要求を解析するメソッドがないという事実にあります。ドキュメントを見ると

、私はServletFileUploadオブジェクトがparseRequest methodを持っていることを、以下のコードを試してみてください見ることができます:まず、あなたのコンパイルの問題を解決するために

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    if(ServletFileUpload.isMultipartContent(request)) 
    { 
     try 
     { 
      ServletFileUpload uploader =new ServletFileUpload(new DiskFileItemFactory()); 
      List<FileItem> multiparts = uploader.parseRequest(request); 
      for(FileItem item : multiparts) 
      { 
       if(!item.isFormField()) 
       { 
        String name=new File(item.getName()).getName(); 
        item.write(new File(UPLOAD_DIRECTORY + File.separator +name)); 
       } 
      } 
      request.setAttribute("message", "file uploaded successfully"); 
     } 
     catch(Exception ex) 
     { 
      request.setAttribute("message", "file uploaded failed"+ex); 
     } 
    } 
    else 
    { 
     request.setAttribute("message", "This servlet handles only file upload request"); 
    } 
    request.getRequestDispatcher("/result.jsp").forward(request, response); 
} 
+0

ではありません。ちょうどあなたのコードで試しましたが、まだ私は出力を得ませんでした。手伝ってくれませんか? – Vasanth