Невозможно записать содержимое файла JAR в локальный сервлет на Tomcat 7.0.22 - PullRequest
0 голосов
/ 09 октября 2011

Добрый день,

Я пытаюсь программно извлечь содержимое файла jar и нашел фрагмент кода здесь , который позволил мне извлечь содержимое файла jar на моемлокальная машина без использования сервлета.

Теперь, когда я знаю, что код работает, я пытаюсь использовать его в локальной среде сервлетов, в частности Tomcat 7.0.22.Пока у меня есть код ниже, но я не смог вывести содержимое банки.Я считаю, что я неправильно обрабатываю поток вывода, и поэтому ничего не сохраняется в локальном каталоге моего локального сервера Tomcat.

Кто-нибудь сможет указать мне правильное направление или дать какой-нибудь совет о том, как исправить код, чтобы он выводил содержимое, прочитанное в файл?

import java.io.*;
import java.util.*;
import javax.servlet.*;


@SuppressWarnings("serial")
public class JarExtractor extends HttpServlet {
  @SuppressWarnings("rawtypes")
  protected void doPost(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {
    try {

        String path = getServletContext().getRealPath("test.jar");
        JarFile jar = new JarFile(path);
        Enumeration jarEnum = jar.entries();

        while (jarEnum.hasMoreElements()) {
            JarEntry file = (JarEntry) jarEnum.nextElement();
            File f = new File(file.getName());
            if (file.isDirectory()) {       // if its a directory, create it
                f.mkdir();
                continue;
            }
            InputStream in = jar.getInputStream(file); // get the input stream
            OutputStream output = new FileOutputStream(f);
            while (in.available() > 0) {  // write contents of 'is' to 'fos'
                output.write(in.read());
            }
            output.close();
            in.close();
        }
    }
    catch(Exception ex) 
    {
        //------
    }   
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws   ServletException, IOException {
  try 
      {
      doPost(request,response);
  } 
      catch (ServletException e) 
      {
    // 
  } 
      catch (IOException e) 
      {
    //
  }
}

}

Большое спасибо за любую помощь, которую может оказать любой.

Приятных выходных!

1 Ответ

0 голосов
/ 09 октября 2011

Выходной файл также должен быть основан на реальном пути (или другом известном местоположении), иначе вы, вероятно, пишете вне контекста сервлета в местоположение, основанное только на имени компонента jar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...