url - scan - seo meta check
URL base para una aplicaciĆ³n GWT (4)
Estoy desarrollando una aplicación GWT que genera informes para descargar. Cuando lanzo en Eclipse tiene una URL como esta:
http://127.0.0.1:8888/MyApp.html
Pero cuando empaqueto mi aplicación para implementarla en un servidor web (es decir, Tomcat) mi URL es así:
http://localhost:8080/MyApp/MyApp.html
¿Hay alguna manera de obtener la URL base de la aplicación? Como http://localhost:8080/MyApp/ en el segundo caso?
Lado del cliente:
GWT.getHostPageBaseURL();
o
GWT.getModuleBaseURL();
En el lado del servidor, puede obtener la URL de cualquier servlet de HttpServletRequest
mediante este sencillo método:
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();
}
}
Para 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í incluye un fragmento de JavaScript en su página HTML de host para establecer el valor:
<script type="text/javascript" language="javascript">
var location = { baseUrl: "http://localhost:8080/myapp" };
</script>
Luego cargue el valor en el lado del cliente con GWT Dictionary:
Dictionary theme = Dictionary.getDictionary("location");
String baseUrl = theme.get("baseUrl");
Para usar esto, tendría que cambiar la página de host HTML para sus instancias locales y de producción.
Sospecho que esto es un Tomcat, no un problema de GWT. Intente cambiar el nombre del archivo WAR de su aplicación empaquetada a ROOT.war y colóquelo en la carpeta webapps de su Tomcat. Tomcat normalmente trata una aplicación de este tipo como una para implementar en el contexto raíz (es decir, obtendrá su acceso /MyApp.html).
Al método doPost
en RemoteServiceServlet
se le pasa el HttpServletRequest
enviado por el cliente. HttpServletRequest
tiene varios métodos disponibles que pueden construir la URL base de la solicitud del cliente. HttpServletRequest.getRequestURL() recupera la URL completa de la solicitud. Si solo desea la URL base sin el nombre de la página, puede utilizar 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());
}