2011-12-05 12 views
15

Estoy desarrollando una aplicación GWT que genera informes para descargar. Cuando inicio en Eclipse tiene una URL como esta:URL base para una aplicación GWT

http://127.0.0.1:8888/MyApp.html

Pero cuando Empaqueto mi aplicación para el despliegue en un servidor web (por ejemplo, Tomcat) mi URL es la siguiente:

http://localhost:8080/MyApp/MyApp.html

¿Hay alguna forma de obtener la URL base de la aplicación? Me gusta http://localhost:8080/MyApp/ en el segundo caso?

+0

Lo que hace que ¿Quiere decir "obtener la URL base de la aplicación"? ¿Dentro de tu servlet o del lado del cliente? – Vladimir

Respuesta

2

El método doPost en RemoteServiceServlet se pasa el HttpServletRequest enviado por el cliente. HttpServletRequest tiene una cantidad de métodos disponibles que pueden construir la URL base de la solicitud del cliente. HttpServletRequest.getRequestURL() recupera toda la URL de la solicitud. Si solo quiere la URL base sin el nombre de la página, podría usar una combinación de getRemoteHost, getRemotePort y getServletPath.

Ejemplo:

doPost(request, response){ 
    String baseURL = new StringBuilder(); 
    baseURL.append(request.getRemoteHost()); 
    baseURL.append(":"); 
    baseURL.append(request.getRemotePort()); 
    baseURL.append(request.getServletPath()); 
} 
5

Por el lado del cliente puede utilizar Window.Location

Por ejemplo:

public static String getUrlString(String path) { 
    UrlBuilder urlBuilder = new UrlBuilder(); 
    urlBuilder.setHost(Window.Location.getHost()); 
    urlBuilder.setPath(path); 

    String port = Window.Location.getPort(); 
    if (!port.isEmpty()) 
     urlBuilder.setPort(Integer.parseInt(port)); 

    return urlBuilder.buildString(); 
} 

Otro enfoque es utilizar GWT Dictonary. Aquí se incluye un fragmento de JavaScript en su página HTML anfitrión para establecer el valor:

<script type="text/javascript" language="javascript"> 
    var location = { baseUrl: "http://localhost:8080/myapp" }; 
</script> 

luego cargar el valor en el lado del cliente con GWT Diccionario:

Dictionary theme = Dictionary.getDictionary("location"); 
    String baseUrl = theme.get("baseUrl"); 

Para utilizar esta tendría que cambie la página de host HTML para sus instancias locales y de producción.

+0

Ese es un enfoque interesante. Pero funciona solo en el cliente, ¿verdad? –

+0

Sí, usando Window.Location solo funciona en el lado del cliente. Actualicé mi respuesta para incluir otro enfoque también. –

+0

¿Nada del lado del servidor completo? GWT realmente apesta a esto. –

0

Sospecho que esto, no es una cuestión de un Tomcat GWT. Intente cambiar el nombre del archivo WAR de su aplicación empaquetada a ROOT.war y colóquelo en la carpeta webapps de Tomcat. Tomcat normalmente trata una aplicación como una para implementar en el contexto raíz (es decir, obtendrá su acceso /MyApp.html).

17

lado del cliente:

GWT.getHostPageBaseURL(); 

o

GWT.getModuleBaseURL(); 

lado del servidor puede obtener la URL de cualquier servlet desde el HttpServletRequest mediante el uso de este método simple:

public static String getBaseUrl(HttpServletRequest request) { 
    if ((request.getServerPort() == 80) || 
     (request.getServerPort() == 443)) { 
     return request.getScheme() + "://" + 
      request.getServerName() + 
      request.getContextPath(); 
    } else { 
     return request.getScheme() + "://" + 
      request.getServerName() + ":" + request.getServerPort() + 
      request.getContextPath(); 
    } 
} 
+0

Hola, gracias por la respuesta, Aparece Tomcat UnsatisfiedLinkError en GWT.getModuleBaseUrl() o GWT.getHostPageBaseUrl(). ¿Qué estoy haciendo mal? java.lang.UnsatisfiedLinkError: com.google.gwt.core.client.impl.Impl.getModuleBaseURL() Ljava/lang/String; – Ehsan

Cuestiones relacionadas