2008-10-27 10 views
6

Jak wywołać adres URL w celu przetworzenia wyników?Pobieranie pliku z żądania http w java

Mam autonomiczny serwlet raportowania, z którym łączę do raportów. Chcę teraz wysłać te raporty pocztą elektroniczną, gdybym robił to w przeglądarce, mógłbym po prostu użyć xhttprequest i przetworzyć wyniki - zasadniczo chcę zrobić to samo w Javie, ale nie jestem pewien, jak to zrobić to.

AKTUALIZACJA: Czekam na odzyskanie pliku z adresu URL (bez względu na to, czy jest to pdf, czy html itp.).

UPDATE: To będzie działać wyłącznie na serwerze - nie ma żądania, które uruchamia wysyłanie wiadomości e-mail, a raczej jest zaplanowanym e-mailem.

Odpowiedz

7
public byte[] download(URL url) throws IOException { 
    URLConnection uc = url.openConnection(); 
    int len = uc.getContentLength(); 
    InputStream is = new BufferedInputStream(uc.getInputStream()); 
    try { 
     byte[] data = new byte[len]; 
     int offset = 0; 
     while (offset < len) { 
      int read = is.read(data, offset, data.length - offset); 
      if (read < 0) { 
       break; 
      } 
      offset += read; 
     } 
     if (offset < len) { 
      throw new IOException(
       String.format("Read %d bytes; expected %d", offset, len)); 
     } 
     return data; 
    } finally { 
     is.close(); 
    } 
} 

Edytuj: Oczyszczone kod.

+0

Cześć Albert, dzięki za to - wypróbuję to teraz. – RodeoClown

1

Jeśli intencją jest uruchomienie innego zasobu podczas wykonywania serwletu bez przekazania kontroli do innego zasobu, można spróbować użyć funkcji włączania (żądanie, odpowiedź).

RequestDispatcher dispatcher = 
    getServletContext().getRequestDispatcher("/url of other resource"); 
if (dispatcher != null) 
    dispatcher.include(request, response); 
} 

Możesz umieścić to na serwlecie, a wynik z innego zasobu jest zawarty w serwlecie.

EDIT: Ponieważ szukasz pliku, to rozwiązanie również działa.

+0

Dzięki Vincent. Wygląda na to, że nie spełni się tego, czego szukam - nie zamierzam włączać niczego do odpowiedzi. W tej instancji nie ma odpowiedzi (jest to zaplanowane zadanie, które działa wyłącznie po stronie serwera). – RodeoClown