Obtenir un fichier à partir d'une requête http en Java
Question
Comment appeler une URL pour traiter les résultats?
J'ai un servlet de rapport autonome auquel je fais un lien pour les rapports. Je souhaite envoyer ces rapports par e-mail maintenant. Si je le faisais dans le navigateur, je pourrais simplement utiliser un xhttprequest et traiter les résultats - je veux fondamentalement faire la même chose en Java, mais je ne sais pas comment s'y prendre. il.
UPDATE : je souhaite récupérer un fichier à partir de l'URL (qu'il s'agisse d'un fichier PDF ou html, etc.).
MISE À JOUR : le serveur s'exécute uniquement. Aucune demande ne déclenche l'envoi de courriers électroniques. Il s'agit plutôt d'un courrier électronique planifié.
La solution
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.
Autres conseils
Découvrez les classes URL et URLConnection. Voici de la documentation: http://www.exampledepot.com/egs/java. net / Post.html
Si vous souhaitez exécuter une autre ressource pendant que votre servlet s'exécute sans transférer le contrôle sur cette 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 placer ceci sur un servlet et le résultat de l'autre ressource est inclus sur votre servlet.
EDIT: Puisque vous souhaitez récupérer un fichier, cette solution fonctionne également pour cela.