2008-10-27 6 views
6

Comment appeler une URL pour traiter les résultats?Obtention d'un fichier à partir d'une requête http dans java

J'ai une servlet de création de rapports autonome à laquelle je fais un lien pour les rapports. Je veux envoyer ces rapports par e-mail, si je le faisais dans le navigateur, je pourrais juste utiliser un xhttprequest, et traiter les résultats - je veux fondamentalement faire la même chose en Java, mais je ne suis pas sûr de savoir comment s'y prendre il.

MISE À JOUR: Je cherche à obtenir un fichier à partir de l'URL (que ce soit un fichier pdf ou html etc).

MISE À JOUR: Cette opération s'exécutera uniquement sur le serveur: aucune demande ne déclenche l'envoi par courrier électronique, mais un e-mail planifié.

Répondre

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

Modifier: Nettoyé le code.

+0

Bonjour Albert, merci pour cela - je vais essayer maintenant. – RodeoClown

1

Si l'intention est d'exécuter une autre ressource pendant que votre servlet s'exécute sans transférer le contrôle à l'autre ressource, vous pouvez essayer d'utiliser include (request, response).

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

Vous pouvez mettre cela sur une servlet et le résultat de l'autre ressource est inclus dans votre servlet.

EDIT: Puisque vous cherchez à récupérer un fichier, cette solution fonctionne également pour cela.

+0

Merci Vincent. Il ne semble pas que cela répondra tout à fait à ce que je cherche - je ne cherche pas à inclure quoi que ce soit dans la réponse. Il n'y a pas de réponse dans cette instance (il s'agit d'une tâche planifiée qui s'exécute purement côté serveur). – RodeoClown

Questions connexes