Pergunta

Nós estamos hospedando um site para um cliente e eles querem que incluem o cabeçalho que têm em seu servidor para as páginas que estão hospedando. Assim, sempre que eles alterá-lo, ele vai mudar automaticamente em nosso site.

Estamos tentando usar a tag "incluir" no nosso código JSP. O código que estamos usando é a seguinte:

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

Nós também tentou

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

Infelizmente estes não estão funcionando para nós. O que parece estar acontecendo é que o código está olhando apenas localmente para este arquivo e nunca parece ir "fora" para olhar para ele.

Nós somos capazes de puxar o cabeçalho em nossa página quando usamos um iframe, mas por causa da forma como o cabeçalho é construído / codificado o mouse sobre menus drop-down não estão funcionando como deveriam quando usamos o iframe. O drop-down menus são "em cascata" por baixo do resto do conteúdo da página e não fomos capazes de trazer -los para o "top".

Como um trabalho temporário em torno, foram estão hospedando o código HTML em nossos próprios servidores.

Todas as idéias?

Foi útil?

Solução

Se você optar por fazer isso em Java, é agradável e fácil usar a partir do Apache Commons HttpClient.

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 uma solução rápida e suja, sua JSP você pode chamar esse método diretamente. Você poderia, é claro, criar uma tag taglib para chamar o método, se preferir.

Você pode querer alterar o tempo limite e mecanismo de repetição para HttpClient. Por padrão, ele tentará automaticamente até um máximo de 3 vezes a cada momento tentativa após 30 anos.

No entanto, você provavelmente vai querer olhar em cache as cordas por um período de tempo adequado. Você realmente não quero fazer 2 bloquear solicitações HTTP externos para cada acesso página para o seu site.

Outras dicas

JSP inclui não suportam incluindo arquivos remotos, razão pela qual uma URL relativa é necessária: http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

Eu sugiro escrever uma função que abre uma conexão com a página e transfere o conteúdo e, em seguida, imprime-los para seu próprio fluxo out. Então você pode colocar essa função em um arquivo local e apenas include isso.

Que tal usar a biblioteca núcleo JSTL e fazendo:

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

Isso deve ser capaz de incluir conteúdo remoto em tempo de solicitação.

JSP inclui não são destinadas ao trabalho assim com servidores externos. Aqui está uma maneira completamente horrível para resolver o seu problema, mas era a única opção para mim em uma situação similar. Escreva uma classe para realmente analisar o html a partir desse site, e, em seguida, imprimi-lo. Gostaria de acrescentar que sempre que você está indo fazer algo como isso, é sempre uma boa idéia para ter algum tipo de mecanismo de autenticação no lugar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top