Frage

Ich habe eine eine Restlet Anwendung entwickelt. Ich mag eine JSP-Datei auf einer URL-Anforderung durch Restlet zurückzukehren. Wie kann ich dies erreichen, ohne eine Umleitung mit?

d. Lassen Sie uns sagen, dass ich die Datei „contact.jsp“ auf mydomain.com haben und ich möchte Menschen in der Lage sein contact.jsp zuzugreifen unter http : //mydomain.com/contact

So in Restlet, ich hätte:

router.attach("/contact", MyResource.class);

Aber wie kann ich die „contact.jsp“ Seite zurückzukehren? Ich weiß, dass eine Umleitung funktionieren würde, aber ich möchte nicht, Benutzer die „.jsp“ in „ http sehen: / /mydomain.com/contact.jsp “... oder gibt es eine andere Strategie, ohne auch nur mit Restlet funktionieren würde? Vielleicht eine Änderung meiner web.xml-Datei?

Edit (2009-08-14):

Meine Antwort gepostet unten nicht auf App-Motor und Restlet funktioniert. Es ist jedoch funktionieren, wenn ich Restlet nicht enthalten, oder erlauben Restlet ein URL-Muster „/ *“ haben

Was wäre ideal ist eine Unterklasse der Router zu haben, die mir dies zu tun erlaubt:

router.attach("/contact", "/contact.jsp");

Danke!

Edit (2009-08-17):

Ich bin überrascht, ich habe keine Antworten hat, seit ich eine Prämie gebucht. Will jemand einen Kommentar und lassen Sie mich wissen, wenn meine Frage / Problem ist nicht klar?

Edit (2009-08-17):

Interessante Beobachtung. Wenn das Verfahren unter Verwendung von unten durch „Rich-Verkäufer“ beschrieben, es funktioniert, wenn sie auf Google App-Motor eingesetzt und nicht lokal. Darüber hinaus Wenn ich http://mydomain.com/contact.jsp auf Google App-Motor umgeht es Restlet und geht direkt auf die JSP. Aber vor Ort, nimmt Restlet über. Das heißt, http: // localhost: 8080 / contact.jsp geht nicht an die JSP und geht zu Restlet. Haben Einsatz app-Engine-Anwendungen reagieren unterschiedlich auf URLs als ihre lokalen Partner?

War es hilfreich?

Lösung

„Ich mag eine JSP-Datei auf einer URL-Anforderung durch Restlet zurückzukehren“ - Mein Verständnis ist, JSP zu Servlets umgewandelt werden. Da Servlets sind orthogonol nicht sicher Restlets, wie Sie JSP-Datei durch Restlet zurückkehren kann.

Sie fordern eine Art und Weise Unter der Annahme, JSP zu verwenden, zusätzlich zu Restlet, Das am besten erreicht, indem Sie Ihre restlets Zuordnung zu einem rootpath wie / Rest anstelle von / * und mit dem .jsp wie gewohnt.

Andere Tipps

Restlet derzeit nicht JSPs direkt unterstützen. Sie sind schwierig außerhalb der Servlet-Container zu behandeln.

Es gibt eine Diskussion über Nabble zu diesem Thema, die Sie vielleicht nützlich finden, im Moment ist es wie Sie entweder sieht eine Umleitung auf die JSP müssen zurückkehren als normal in der web.xml abgebildet, oder es hacken die JSP und gibt den Strom als die Darstellung zu verarbeiten.

Die Antwort vom „23. April 2009, 15.02 Uhr“ im Thread beschrieben, wie Sie den Hack tun könnte:

if (request instanceof HttpRequest &&
    ((HttpRequest) request).getHttpCall() instanceof ServletCall) {

    ServletCall httpCall = (ServletCall) ((HttpRequest) request).getHttpCall();

    // fetch the HTTP dispatcher
    RequestDispatcher dispatcher = httpCall.getRequest().getRequestDispatcher("representation.jsp");

    HttpServletRequest proxyReq = new HttpServletRequestWrapper(httpCall.getRequest());

    // Overload the http response stream to grab the JSP output into a dedicated proxy buffer
    // The BufferedServletResponseWrapper is a custom response wrapper that 'hijacks' the
    // output of the JSP engine and stores it on the side instead of forwarding it to the original
    // HTTP response.
    // This is needed to avoid having the JSP engine mess with the actual HTTP stream of the
    // current request, which must stay under the control of the restlet engine.
    BufferedServletResponseWrapper proxyResp = new BufferedServletResponseWrapper(httpCall.getResponse());

    // Add any objects to be encoded in the http request scope
    proxyReq.setAttribute("myobjects", someObjects);

    // Actual JSP encoding
    dispatcher.include(proxyReq, proxyResp);

    // Return the content of the proxy buffer
    Representation rep = new InputRepresentation(proxyResp.toInputStream(),someMediaType); 

Die Quelle für den BufferedServletResponseWrapper später ein paar Einträge gebucht wird.

Sieht aus wie eine einfache web.xml Konfiguration.

<servlet>
     <servlet-name>contactServlet</servlet-name>
     <jsp-file>/contact.jsp</jsp-file>
</servlet>

<servlet-mapping>
     <servlet-name>contactServlet</servlet-name>
     <url-pattern>/contact</url-pattern>
</servlet-mapping>

Das funktioniert ohne Restlet in App-Motor. Aber sobald ich Restlet sind, funktioniert es nicht, wenn ich meine Reslet url-Muster auf „/ *“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top