Pregunta

Estamos alojando un sitio para un cliente y quieren que incluyamos el encabezado que tienen en su servidor en las páginas que hospedamos. Entonces, cada vez que lo cambien, cambiará automáticamente en nuestro sitio.

Estamos intentando utilizar " include " etiqueta en nuestro código JSP. El código que estamos usando es el siguiente:

<% @ include file = " www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html " % > .

También lo intentamos

<% @ include file = " ** http: //**www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html " % > .

Desafortunadamente, estos no funcionan para nosotros. Lo que parece estar sucediendo es que el código SOLO está buscando localmente este archivo y nunca parece ir & "; Fuera de &"; para buscarlo.

Podemos usar el encabezado en nuestra página cuando usamos un iframe, pero debido a la forma en que se construye / codifica el encabezado, el mouse sobre los menús desplegables no funciona como deberían cuando usamos el iframe. Los menús desplegables son & Quot; en cascada & Quot; debajo del resto del contenido de la página y no pudimos traer a la " top " ;.

Como solución temporal, alojamos el HTML en nuestros propios servidores.

¿Alguna idea?

¿Fue útil?

Solución

Si elige hacer esto en Java, es agradable y fácil usar el HttpClient de Apache Commons.

public static String fetchSourceHtml( String urlString ) {

  try {
    HttpClient httpClient = new HttpClient();
    GetMethod getMethod = new GetMethod( urlString );
    getMethod.setFollowRedirects( true );

    int httpStatus = httpClient.executeMethod( getMethod );

    if (httpStatus >= 400) {
      return "";
    }

    String sourceHtml = getMethod.getResponseBodyAsString();
    return sourceHtml;
  }
  catch (IOException e) {
    return "";
  }
}

Para una solución rápida y sucia, su JSP puede llamar a este método directamente. Podría, por supuesto, crear una etiqueta taglib para llamar al método si lo prefiere.

Es posible que desee cambiar el mecanismo de tiempo de espera y reintento para HttpClient. Por defecto, intentará automáticamente hasta un máximo de 3 veces con cada intento de tiempo de espera después de 30 segundos.

Sin embargo, es probable que desee examinar el almacenamiento en caché de las cadenas durante un período de tiempo adecuado. Realmente no desea realizar 2 solicitudes http externas de bloqueo para cada acceso a la página de su sitio.

Otros consejos

JSP incluye no admite la inclusión de archivos remotos, por lo que se requiere una URL relativa: http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

Sugiero escribir una función que abra una conexión a esa página y descargue los contenidos y luego los imprima en su propio flujo de out. Luego puede poner esa función en un archivo local y simplemente include eso.

¿Qué hay de usar la biblioteca central JSTL y hacer:

<c:import url="http://www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html" />

Eso debería poder incluir contenido remoto en el momento de la solicitud.

JSP incluye no está destinado a funcionar así con servidores externos. Aquí hay una manera completamente horrible de solucionar su problema, pero fue la única opción para mí en una situación similar. Escriba una clase para analizar el html de ese sitio y luego imprímalo. Añadiría que siempre que vaya a hacer algo como esto, siempre es una buena idea tener algún tipo de mecanismo de autenticación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top