2016-09-01 5 views
-1

Необходимая помощь,Ошибка: IllegalStateException в Java. Не может быть отправлено после того, как ответ был получен

Я работаю для загрузки файла в Java Servlet и после того, как загрузка файла не может отправить запрос на страницу.

Файл успешно загружен и получает незаконноеStateException при попытке отправить запрос на страницу.

здесь код

public void fileDownload(String stringFileToDownload, HttpServletResponse response) throws Exception{ 
    FileInputStream inStream = null; 
    OutputStream outStream = null; 
     try{    
      File downloadFile = new File(stringFileToDownload); //Reads input file 
      inStream = new FileInputStream(downloadFile); 
      response.setContentType("application/zip-compressed"); //MIME type of the file 
      response.setContentLength((int) downloadFile.length()); 
      response.setHeader("Content-Disposition", "attachment; filename=Time.zip"); 
      //response's output stream 
      outStream = response.getOutputStream(); 
      byte[] buffer = new byte[4096]; 
      int bytesRead = -1; 
      while ((bytesRead = inStream.read(buffer)) != -1) { 
       outStream.write(buffer, 0, bytesRead); 
      } 
     } 
     catch(Exception ex){ 
      throw ex; 
     } 
     finally{ 
      //response.flushBuffer(); 
      try{ 
       if(inStream != null){ 
        inStream.close(); 
       } 
       if(outStream != null){ 
        //outStream.flush(); 
        outStream.close(); 
       } 
      } 
      catch(Exception ex){ 
       throw ex; 
      } 
     } 
    } 

Я назвал этот метод из сервлета; перенаправлять из сервлета на другую страницу

Телефонный код:

FileDownloadFromWeb fileDownloadFromWeb = new FileDownloadFromWeb(); 
fileDownloadFromWeb.fileDownload(stringarchiveFile, response); //Allow to download 
Request Dispatcher objRequestDispatcher = request.getRequestDispatcher(objProperties.getProperty("SUCC‌​ESS_DOWNLOAD")); 
objRequestDispatcher.forward(request, response); 
+0

Пожалуйста, сообщите код. –

+1

Сообщение означает, что вы пытаетесь переадресовать, но раньше вы пишете какой-либо вывод, и это не допустимо, чтобы –

+0

не выполнял никакой операции записи. вот код вызова 'FileDownloadFromWeb fileDownloadFromWeb = new FileDownloadFromWeb(); fileDownloadFromWeb.fileЗагрузить (stringarchiveFile, response); // Разрешить загрузку // Request Dispatcher objRequestDispatcher = request.getRequestDispatcher (objProperties.getProperty ("SUCCESS_DOWNLOAD")); objRequestDispatcher.forward (запрос, ответ); ' – Bhat

ответ

1

Вот когда вы пишете в ответ выходной поток будет совершено (outStream.write(buffer, 0, bytesRead);), а затем, если вы пытаетесь использовать request.forward() это будет вызывающе бросать ошибку.

решение этой проблемы, чтобы установить содержимое файла в качестве объекта в параметре запроса и не использовать его в JSP или использовать переадресацию, а не вперед

вероятно, ваша проблема может быть решена с отдельным сервлет для загрузки файла см это after download a image ,i want to redirect on another page, but not able to

+0

Спасибо :) Я проверяю это решение !! – Bhat

+0

Спасибо @Jekin. Я избегал вызова сервлета при загрузке файла и помещал его в другой JSP и вызывал через событие кнопки. – Bhat

+0

Следуя этому [link] (http://www.javatpoint.com/downloading-file-from-the-server-in-jsp) и назвал JSP через форму ** action ** – Bhat