2010-02-19 22 views
13

Voglio passare un parametro 'A1B2C3' a un'applicazione GWT basata su Google App Engine. Lo faccio come www.example.com/index.html?key=A1B2C3. Anche se funziona, mi piacerebbe usare URL piuttosto carini. È possibile eseguire la riscrittura dell'URL su Google App Engine? Non sono riuscito a scoprire come.Pretty URL in Google App Engine

www.example.com/A1B2C3 

invece di

www.example.com/index.html?key=A1B2C3 

che sto utilizzando Google App Engine e GWT. Tutto in Java.

+0

È possibile, l'ho fatto, ma utilizzando Python anziché Java e Flask come framework. – DDS

risposta

6

È necessario configurare l'applicazione (vedere here). In altre parole, è necessario "collegare" i pattern desiderati.

Dal manuale, un esempio:

<servlet-mapping> 
    <servlet-name>redteam</servlet-name> 
    <url-pattern>/red/*</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>blueteam</servlet-name> 
    <url-pattern>/blue/*</url-pattern> 
</servlet-mapping> 
+0

Grazie per la risposta. Ho già provato questo, ma vedo solo come funziona con i servlet Java. Tuttavia, ho programmato l'applicazione in GWT e lì non ho l'astrazione dei servlet. Qualche idea su come questo possa funzionare con GWT? –

+0

Guarda la riscrittura dell'URL nel tuo server HTTP, come in Apache (http://httpd.apache.org/docs/2.0/misc/rewriteguide.html) o nginx (http://wiki.nginx.org/NginxConfiguration#Rewrite_examples). –

+0

Grazie. Ma sembra che questo non funzioni su Google App Engine. –

7

Questa è una domanda fresco. Ho capito come farlo anche per Python.

app.yaml:

- url: /test/(.*) 
    script: test.py \1 

test.py:

#!/usr/bin/env python 

import sys 

def main():   
    for arg in sys.argv: 
    print arg 

if __name__ == '__main__':        
    main() 
+1

Mi sta chiedendo di Java. Forse questa risposta sarebbe meglio su una domanda basata su Python? Comunque sono d'accordo che funzionerebbe in python. –

+4

Sì. Mi rendo conto che questo era un java related qu estion, ma stavo cercando questa cosa simile durante la ricerca su internet. Ho trovato questo articolo, ma volevo sapere come farlo con Python. Quando l'ho capito, ho pensato che avrei dovuto metterlo qui così le altre persone non avrebbero dovuto cercare fino a quel momento. – Kousha

+1

Secondo, grazie Kousha! –

3

Prova URLRewriteFilter: http://tuckey.org/urlrewrite/ (o github repo) si tratta di una pianura ol' filtro Java EE, così dovrebbe funzionare.

+0

quel sito è andato ora. –

+0

Il sito è tornato. –

+1

è UrlRewriteFilter dimostrato di funzionare con GAE? –

1

Risparmia tempo e utilizza Restlet. Puoi fare esattamente questo e l'ho fatto in due diversi progetti. È abbastanza semplice. Se hai bisogno di aiuto, fammi sapere.

0

Questa è la best approach ho trovato finora per l'attuazione di riscrittura URL GAE Python

1

Io probabilmente usare PrettyFaces, http://ocpsoft.com/prettyfaces/, che ti permette di fare url-mapping direttamente sopra un'applicazione esistente.

Basta configurare qualcosa di simile nel file pretty-config.xml:

<url-mapping> 
    <pattern value="/my/pretty/url" /> 
    <view-id value="/my/existing/url" /> 
</url-mapping> 

Oppure, se si vuole riscrivere i parametri, si può fare questo:

<url-mapping> 
    <pattern value="/my/pretty/url/#{param}" /> 
    <view-id value="/my/existing/url" /> 
</url-mapping> 

e questo significa che qualsiasi URL (inbound) ora diventano:

/my/pretty/url/value -> /my/existing/url?param=value 

e in uscita gli URL sarà simile a questa in pagine HTML un nd in reindirizzamenti:

/my/existing/url?param=value -> /my/pretty/url/value 

Quindi è facile aggiungere alle vostre app attuali.

+1

PrettyFaces non ha funzionato su app-engine + GWT. Forse c'è un modo, ma non ha funzionato per me. Ottenuto un "Avvio non riuscito del contesto" "javax.servlet.UnavailableException: Problema di configurazione" – eddyparkinson

+0

Per favore pubblica l'eccezione - puoi postare sui forum di supporto di OCPsoft: http://ocpsoft.org/support/ – Lincoln

+0

Lo proverò. Grazie. –