Domanda

Ho sviluppato un Restlet applicazione.Vorrei tornare un file JSP su un URL di richiesta Restlet.Come posso ottenere questo senza usare un redirect?

cioèDiciamo che ho il file di "contatto.jsp" a mydomain.com e voglio che la gente a essere in grado di accedere a contatto.jsp a http://mydomain.com/contact

Così, in Restlet, mi sarebbe:

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

Ma come faccio a restituire il "contatto.jsp" pagina?So che un rinvio avrebbe funzionato, ma non voglio che gli utenti a vedere ".jsp" in "http://mydomain.com/contact.jsp"...o c'è un'altra strategia che avrebbe funzionato anche senza usare restlet?Forse la modifica di alcune mie web.xml il file?

Edit (2009-08-14):

La mia risposta postato qui sotto non funziona su App-Motore e Restlet.Funziona comunque, se non includono Restlet, o consentire Restlet di avere un url-pattern "/*"

Che cosa sarebbe l'ideale è avere una sottoclasse del Router che mi permette di fare questo:

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

Grazie!

Edit (2009-08-17):

Sono sorpreso e non ho avuto tutte le risposte che ho postato un bounty.Qualcuno di commento e fatemi sapere se la mia domanda/problema non è chiaro?

Edit (2009-08-17):

Osservazione interessante.Quando si utilizza il metodo descritto da "Ricchi Venditore" qui sotto, funziona quando viene distribuito su Google App Engine e non in locale.Inoltre, Se io chiamo http://mydomain.com/contact.jsp su Google App Engine-ignora Restlet e va dritto alla JSP.Ma, localmente, Restlet prende il sopravvento.Che è, http://localhost:8080/contact.jsp non andare alla pagina JSP e va a Restlet.Fare distribuito app-applicazioni del motore risponde in modo diverso per gli Url come la loro controparte locale?

È stato utile?

Soluzione

"Vorrei tornare un file JSP su un URL di richiesta Restlet" - la Mia comprensione è JSP vengono convertiti servlets.Dal Servlet sono orthogonol per Restlets non sono sicuro di come si può tornare JSP file attraverso Restlet.

Supponendo che si sta chiedendo un modo per utilizzare JSP, oltre a Restlet, Questo è meglio raggiunto con il mapping restlets per un rootpath come /di riposo invece di /* e con il .jsp come al solito.

Altri suggerimenti

Restlet attualmente non supporta direttamente JSP. Sono difficili da gestire al di fuori del contenitore di servlet.

C'è un discussione sul Nabble su questo problema che si può trovare utile, al momento sembra che è necessario restituire un redirect al JSP mappata come normale nel web.xml, o hack per elaborare la JSP e restituire il flusso come la rappresentazione.

La risposta datata "Apr 23, 2009; 15:02" nel thread descrive come si potrebbe fare l'hack:

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); 

La fonte per la BufferedServletResponseWrapper è pubblicato un paio di voci in seguito.

Sembra una semplice configurazione web.xml.

<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>

Questo funziona senza Restlet in App-Engine. Ma una volta che includo Restlet, non funziona se ho impostato il mio Reslet url-pattern a "/ *"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top