2012-01-04 5 views
0

현재 하나의 JSP 파일, 일부 Java Bean 클래스 및 두 개의 서블릿이 있습니다. 첫 번째 서블릿은 파일을 업로드하고 컨텍스트를 출력합니다. 두 번째 서블릿은 java beans 코드를 가져 와서 실행하고 jsp에 결과를 인쇄합니다. 그러나 이것은 서블릿에서 코드를 중복하는 것으로 결론 지어진다. 중복 코드 파일이 콩을 호출하기 위해 다시 업로드 할 필요가 실제로 :서블릿간에 업로드 된 파일

FileItemFactory factory = new DiskFileItemFactory(); 
ServletFileUpload upload = new ServletFileUpload(factory); 
Iterator<FileItem> iterator = upload.parseRequest(request).iterator(); 
File uploadedFile = null; 
String dirPath = "C:\\fileuploads"; 

while (iterator.hasNext()) { 

    FileItem item = iterator.next(); 

    if (!item.isFormField()) { 

     String fileNameWithExt = item.getName(); 
     File filePath = new File(dirPath); 

     if (!filePath.exists()) { 
      filePath.mkdirs(); 
     } 

     uploadedFile = new File(dirPath + "/" + fileNameWithExt); 
     item.write(uploadedFile); 
    } else { 
     String otherFieldName = item.getFieldName(); 
     String otherFieldValue = item.getString(); 
    } 
} 

FileInputStream fstream = new FileInputStream(uploadedFile); 
DataInputStream in = new DataInputStream(fstream); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

다음 자바 콩 서블릿을 연결하는 코드가있다. 이 작동하지만 내 질문에 업로드 된 파일을 공유하는 가장 좋은 방법은 무엇입니까? 변수에 파일 경로를 저장하고 중복 된 코드가없는 첫 번째 서블릿에서 두 번째 파일 경로로 호출 할 수 있습니다.

미리 감사드립니다.

피씨 나는이 질문을 잘 읽었지만 Share uploaded file between servlets in session, 그러나 나는 그것을 정말로 처리하지 못했다.

답변

2

파일 경로를 변수에 저장하고 첫 번째 서블릿에서 중복 코드가없는 초로 호출 할 수 있습니다.

그래서 파일 경로를 가져오고 두 번째 서블릿에서 파일을 다시 읽게됩니다.

session.setAttribute("filePath",yourCalculatedFilePath); 

방금 ​​세션 속성에 파일 경로를 설정할 수 있습니다 당신이 세션을 통해 액세스 할 수 있습니다

session.getAttribute("filePath"); 

사용하여 다른 서블릿에서 검색. 하지만 전체 파일을 세션에 저장하는 것은 좋은 생각이 아닙니다. 사용자가 크기가 1MB 인 파일을 넣고 한 번에 1000 명의 온라인 사용자가 있다고 가정하면 서버 메모리가 1GB가됩니다.

관련 문제