2010-02-19 19 views
13

Quiero pasar un parámetro 'A1B2C3' a una aplicación GWT basada en Google App Engine. Lo hago como www.example.com/index.html?key=A1B2C3. Aunque está funcionando, me gustaría usar URL bonitas. ¿Es posible hacer una reescritura de URL en Google App Engine? No pude averiguar cómo.Pretty URLs en Google App Engine

www.example.com/A1B2C3 

en lugar de

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

estoy usando Google App Engine y GWT. Todo en Java.

+0

Es posible, lo hice, pero usando Python en lugar de Java y Flask como framework. – DDS

Respuesta

6

Debe configurar la aplicación (consulte here). En otras palabras, necesita "conectar" los patrones que desea.

Desde el manual, un ejemplo:

<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

Gracias por su respuesta. Lo he intentado antes, pero solo veo cómo funciona esto con los servlets de Java. Sin embargo, programé la aplicación en GWT y allí no tengo la abstracción de los servlets. ¿Alguna idea de cómo esto puede funcionar con GWT? –

+0

Consulte la reescritura de URL en su servidor HTTP, como en Apache (http://httpd.apache.org/docs/2.0/misc/rewriteguide.html) o nginx (http://wiki.nginx.org/NginxConfiguration#Rewrite_examples) –

+0

Gracias. Pero parece que esto no funciona en Google App Engine. –

7

Ésta es una pregunta fresca. También descubrí cómo hacerlo para 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

Pregunta acerca de Java. Tal vez esta respuesta sería mejor en una pregunta basada en Python? Sin embargo, estoy de acuerdo en que esto funcionaría en Python –

+4

Sí. Me doy cuenta de que esto era relacionado con java qu es decir, pero estaba buscando algo similar cuando busco en internet. Encontré este artículo, pero quería saber cómo hacerlo con Python. Cuando lo descubrí, pensé que debería ponerlo aquí para que otras personas no tuvieran que buscar tanto como yo. – Kousha

+1

Lo secundaré - Gracias Kousha! –

3

Try UrlRewriteFilter: http://tuckey.org/urlrewrite/ (o github repo) es un ol llano' filtro de Java EE, así que debería funcionar.

+0

ese sitio ya no está. –

+0

El sitio está de vuelta. –

+1

¿está probado que UrlRewriteFilter funciona con GAE? –

1

Ahórrese tiempo y use Restlet. Puedes hacer exactamente esto y he hecho esto en dos proyectos diferentes. Es bastante directo. Si necesita ayuda, hágamelo saber.

0

Este es el best approach he encontrado hasta el momento de la ejecución de reescritura de URL GAE Python

1

probablemente me gustaría utilizar PrettyFaces, http://ocpsoft.com/prettyfaces/ que le permite hacer URL-asignaciones directamente en la parte superior de una aplicación existente.

Sólo se debe configurar algo como esto en el archivo bastante-config.xml:

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

O si desea volver a escribir parámetros, se puede hacer esto:

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

y esto significa que cualquier URL (entrante) ahora se convierten en:

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

y salientes sus URL se verán así en las páginas HTML de una nd en redirecciones:

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

Por lo tanto, es fácil de agregar a sus aplicaciones actuales.

+1

PrettyFaces no funcionó en el motor de aplicaciones + GWT. Tal vez hay una manera, pero no funcionó para mí. Obtuve un "Inicio fallido del contexto" "javax.servlet.UnavailableException: Problema de configuración" – eddyparkinson

+0

Publique la excepción: puede publicar en los foros de soporte de OCPsoft: http://ocpsoft.org/support/ – Lincoln

+0

Voy a probar esto. Gracias. –