2016-10-19 1 views
0

J'ai besoin d'un lien userguide dans la page de recherche. Lorsque l'utilisateur clique sur le lien, il doit télécharger le document Word ou PDF du dossier WEB-INF \ doc dans le WAR qui est déployé dans JBOSS.Comment ouvrir un fichier word ou pdf à partir du dossier web inf dans JSP

Dans la page de recherche il y a un lien comme ci-dessous Télécharger le PDF fichier Une fois cliquez sur le lien document guide utilisateur doit télécharger à partir du dossier WEB-INF \ doc et ouvert

Après la recherche google je trouve que nous devons utiliser comme celui-ci

InputStream resourceContent = context.getResourceAsStream("/WEB-INF/doc/foo.doc"); 

Mon application utilisé JSP et Servlet comme contrôleur dans ce cas, dois-je écrire le code ci-dessous dans la méthode doGet

// récupère le type MIME du fichier String mimeType = context.getMimeType (filePath); if (mimeType == null) {
// défini sur le type binaire si le mappage MIME n'a pas été trouvé mimeType = "application/octet-stream"; } System.out.println ("Type MIME:" + mimeType);

// modifies response 
    response.setContentType(mimeType); 
    response.setContentLength((int) downloadFile.length()); 

    // forces download 
    String headerKey = "Content-Disposition"; 
    String headerValue = String.format("attachment; filename=\"%s\"", downloadFile.getName()); 
    response.setHeader(headerKey, headerValue); 

    // obtains response's output stream 
    OutputStream outStream = response.getOutputStream(); 

    byte[] buffer = new byte[4096]; 
    int bytesRead = -1; 

    while ((bytesRead = inStream.read(buffer)) != -1) { 
     outStream.write(buffer, 0, bytesRead); 
    } 

    inStream.close(); 
    outStream.close();  

Également ce que j'ai besoin de configurer dans WEB.XML. Ma compréhension est quand cliquez sur le lien appelez la méthode Servelt doGet à télécharger.

Pourriez-vous s'il vous plaît aider à ce que sont les étapes.

Merci à l'avance

Répondre

0

Oui, mettre en œuvre la logique dans la méthode HttpServlet.doGet()

Quand je traitais exigence similaire (en 2008) J'ai utilisé cette méthode pour définir les en-têtes HTTP correct pour le téléchargement (attachment=true) ou l'affichage des documents directs (attachment=false):

public static void setDownloadHeaders(HttpServletResponse aRes, 
    String aContentType, String aName, boolean anAttachment) { 
    if (aRes == null) { 
    throw new IllegalArgumentException(
     "HttpServletResponse can't be null."); 
    } 
    aRes.setContentType(aContentType); 
    StringBuffer tmpCd = new StringBuffer(anAttachment ? "attachment;" : 
    "inline;"); 
    if (aName != null) { 
    tmpCd.append(" filename=\"").append(aName).append("\";"); 
    } 
    aRes.setHeader("Content-Disposition", tmpCd.toString()); 
    aRes.setHeader("Pragma", "public"); 
    aRes.setHeader("Cache-Control", "max-age=0"); 
} 

Vous devez choisir correctement le type de contenu. Dans mon cas pour l'affichage directement au format PDF, il a été:

setDownloadHeaders(response, "application/pdf", getPdfFileName(), false); 

Vous n'avez pas besoin de configurer quoi que ce soit spécial web.xml. Tout devrait fonctionner pour vous.