2008-10-27 4 views
6

Wie rufe ich eine URL auf, um die Ergebnisse zu verarbeiten?Abrufen einer Datei von einer http-Anfrage in Java

Ich habe ein eigenständiges Reporting-Servlet, mit dem ich für Berichte verlinke. Ich möchte diese Berichte jetzt per E-Mail senden, wenn ich dies im Browser tun würde, könnte ich einfach eine xhttprequest verwenden und die Ergebnisse verarbeiten - ich möchte im Grunde dasselbe in Java machen, aber ich bin nicht sicher, wie ich vorgehen soll es.

UPDATE: Ich bin auf der Suche nach einer Datei zurück von der URL (ob das ein PDF oder HTML usw.).

UPDATE: Dies wird nur auf dem Server ausgeführt werden - es gibt keine Anfrage, die die E-Mail-Adresse auslöst, sondern es ist eine geplante E-Mail.

Antwort

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(); 
    } 
} 

Edit: Bereinigt den Code.

+0

Hallo Albert, danke dafür - ich werde es jetzt ausprobieren. – RodeoClown

1

Wenn Sie beabsichtigen, eine andere Ressource auszuführen, während Ihr Servlet ausgeführt wird, ohne die Kontrolle auf die andere Ressource zu übertragen, können Sie versuchen, include (request, response) zu verwenden.

Sie können dies auf ein Servlet setzen und das Ergebnis der anderen Ressource ist in Ihrem Servlet enthalten.

EDIT: Da Sie suchen, um eine Datei zurück zu bekommen, funktioniert diese Lösung auch dafür.

+0

Danke Vincent. Es sieht nicht so aus, als ob es dem entspricht, wonach ich suche - ich möchte nichts in die Antwort aufnehmen. In dieser Instanz gibt es keine Antwort (es handelt sich um eine geplante Task, die rein serverseitig ausgeführt wird). – RodeoClown

Verwandte Themen