Servlet Servlet wird nicht angesprochen

Bitte aktiviere JavaScript!
Moin ihr lieben,


ich versuche gerade eine PDF-Datei aus einem Servlet zu streamen. Die Art und Weise wie ich da vorgehen muss ist mir eigentlich bekannt und ich habe das ganze auch schon für JFreeChart umgesetzt (BufferedImage) aber irgendwie will dieses Servlet nicht angesprochen werden.

Ich benutze flyingsaucer-R8 und IText für die PDF-Generierung aus einer xhtml-Datei.
Allerdings sollte es damit nichts zu tun haben, denn das Servlet wird noch nicht mal ansatzweise angesprochen.
Gemerkt habe ich das dadurch, das der
Code:
System.out.println("ENTER PDF SERVLET");
nicht auf der Console auftaucht.
Eine Exception wird auch nicht geschmissen, es passiert eigentlich garnichts, von einem HTML 404 mal abgesehen.

Hier mal was zum anschauen.

Servlet-Code:
Java:
package de.klientsoftware.statistik;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lowagie.text.DocumentException;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.xhtmlrenderer.pdf.ITextRenderer;

/**
 *
 * @author david
 */
public class ExportToPDFServlet extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     * 
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException{
        System.out.println("ENTER PDF SERVLET");
        OutputStream out = response.getOutputStream();
        String filename = request.getPathInfo().substring(1);
        String inputFile = request.getServletContext().getRealPath("/web/faces/user/"+filename);
                        
        try {
            
            response.setContentType("application/pdf");
            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocument(inputFile);
            renderer.layout();
            renderer.createPDF(out);
            
            
         
        }catch(DocumentException dexp){
            Logger.getLogger(ExportToPDFServlet.class.getName()).log(Level.SEVERE, null, dexp);
        }finally {            
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

Registrierung und Mapping in der web.xml:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

<!--Der ganze Kram davor -->

<servlet>
<servlet-name>ImageStreamServlet</servlet-name>
<servlet-class>de.klientsoftware.statistik.ImageStreamServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet>
<servlet-name>ExportToPDFServlet</servlet-name>
<servlet-class>de.klientsoftware.statistik.ExportToPDFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<!--Andere Servlets dazwischen -->

<servlet-mapping>
<servlet-name>ImageStreamServlet</servlet-name>
<url-pattern>/ImageStreamServlet/*</url-pattern>
</servlet-mapping>


<servlet-mapping>
<servlet-name>ExportToPDFServlet</servlet-name>
<url-pattern>/ExportToPDFServlet/*</url-pattern>
</servlet-mapping>

<!-- und der ganze rest den mann so braucht -->
[/XML]

Ich habe die beiden Servlets gepostet, weil ich darauf aufmerksam machen wollte, das ich bei dem zweiten servlet nichts anderes gemacht habe als bei dem ersten für die Bilder.


Einbinden in die JSF-Page:

Variante 1:
HTML:
<iframe id="pdf" src="/ExportToPDFServlet/statistik.xhtml" frameborder="0" width="500px" height="500px" type="application/pdf">

                       Sowas aber auch! Kein IFrame-Support? 

</iframe>
Variante 2:
HTML:
<object id="pdf" border="0" width="100%" height="100%" type="application/pdf" data="/ExportToPDFServlet/statistik.xhtml">

Sowas aber auch! Kein PDF-Viwer installiert?? 
    
</object>
Variante 3:
HTML:
<a href="/ExportToPDFServlet/statistik.xhtml" > Her mit der PDF!!! </a>

Egal was ich mache, es wird kein GET auf das Servlet abgesetzt...

Jemand eine Idee ?

:(


LG

David

EDIT:

Ich habe noch folgende versucht:
HTML:
<h:commandLink value="HER DAMIT MAN!" action="/ExportToPDFServlet/statistik.xhtml" />
Wobei mir der server sagt:

WARNUNG: JSF1090: Navigations-Fall wurde für Komponente j_idt42 nicht aufgelöst.
j_idt42 ist dann wohl der commandLink ohne id.
 
Zuletzt bearbeitet von einem Moderator:
Noch mal ein zusätzlicher hinweis: Wenn ich lustiger weise mal zum spaß ein
Code:
<h:graphicImage value="/ExportToPDFServlet/statistik" />
absetze, wird das Servlet angesprochen, schmeißt aber natürlich eine Exception :D

NUN bin ich ganz durch den Wind :rolleyes:
 
Hast du schon mal versucht den URL im Browser direkt einzugeben? Das wäre der erste Schritt um zu testen, ob es grundsätzlich geht, bevor du versuchst über relative Pfade in Webseiten drauf zu kommen.


[EDIT]Bist du dir sicher, dass du deine System.out.println sehen kannst? Ggfs. im Standardkonstruktor mal ein System.out.println ausgeben.[/EDIT]
 
Zuletzt bearbeitet:
Moin,

danke für deine Antwort.

Hast du schon mal versucht den URL im Browser direkt einzugeben?
Da bin ich gestern dann auch noch drauf gekommne. Allerdings hatte ich um 2:30AM keine Muse mehr hier zu posten. Der Fehler war schlicht und einfach, das meine URL im Browser so auszusehen hat:
localhost:8080/web/faces/ordner/datei.endung
Das Servlet wird also über
Code:
/web/ExportToPDFServlet/datei.endung
angesprochen. Bei einem
Code:
h:graphicImage
aus dem Context heraus geht das natürlich automatisch, allerdings wenn man standard HTML benutzt sollte man dann schon standard Pfade verwenden.

Kurz um: ein /web/ vor die Pfade und es geht... manchmal hilft Nachdenken .. :bloed:

Dafür habe ich nun ein Problem mit dem Parsen der xhtml-Dateien aber naja.. das wird schon.

Danke

LG

David
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben