/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.evasion.listener;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.activation.MimetypesFileTypeMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author sebastien.glon
*/
public class ExtFileListener extends HttpServlet {
/**
* Logger.
*/
private static final Logger LOGGER = LoggerFactory.getLogger(
ExtFileListener.class.getName());
/**
* Cle du parametre de contexte.
*/
public static final String SERVLET_PARAM = "com.evasion.EXTERNAL_DIRECTORY";
/**
* Récupère le fichier demandé dans le répertoire externe de l'application.
* @param request requete utilisateur;
* @param response reponse renvoye à l'utilisateur avec le fichier demande;
* @throws ServletException Exception d'execussion de la servlet;
* @throws IOException Exception sur les fichiers;
*/
protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException {
// Recuperation du chemin du fichier a afficher
final String url = request.getPathInfo();
// Récupération de l'url du répertoire externe
final String externePath = getServletContext().getInitParameter(
SERVLET_PARAM);
// Test d'existence du répertoire externe
File externDirectory = new File(externePath);
if (!externDirectory.exists()) {
throw new ServletException("Répertoire externe innexistent");
}
File file = new File(externDirectory, url);
// Test d'existence du fichier
if (!file.exists()) {
throw new ServletException("Fichier demandé introuvable : " + file.getName());
}
response.setContentType(new MimetypesFileTypeMap().getContentType(
file));
FileInputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(file);
out = response.getOutputStream();
final int BUFFER_SIZE = 1024;
final byte[] buffer = new byte[BUFFER_SIZE];
int n = 0;
while (-1 != ( n = in.read(buffer) )) {
out.write(buffer, 0, n);
}
in.close();
out.close();
}
catch (IOException ex) {
LOGGER.error("Can not open Input ou Output strem", ex);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
}
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}