Как включить заголовок в мой сайт, который размещен на внешнем сервере? - PullRequest
2 голосов
/ 09 октября 2008

Мы размещаем сайт для клиента, и они хотят, чтобы мы включили заголовок, который они имеют на своем сервере, в страницы, которые мы размещаем. Поэтому, когда они меняют его, он автоматически меняется на нашем сайте.

Мы пытаемся использовать тег «include» в нашем коде JSP. Код, который мы используем, выглядит следующим образом:

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

Мы также пытались

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

К сожалению, это не работает для нас. Кажется, что происходит то, что код только ищет этот файл локально и, кажется, никогда не выходит "наружу", чтобы найти его.

Мы можем выдвинуть заголовок на нашу страницу, когда мы используем iframe, но из-за способа, которым заголовок построен / закодирован, мышь над выпадающими меню не работает как они должны, когда мы используем iframe. Раскрывающиеся меню «каскадные» под остальным содержимым на странице, и мы не смогли перенести их на «верх».

В качестве временной работы были размещены HTML на наших собственных серверах.

Есть идеи?

Ответы [ 4 ]

3 голосов
/ 09 октября 2008

Если вы решите сделать это на Java, это удобно и просто с помощью HttpClient от 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 "";
  }
}

Для быстрого и грязного решения вашей JSP вы можете вызвать этот метод напрямую. Конечно, вы можете создать тег taglib для вызова метода, если хотите.

Возможно, вы захотите изменить тайм-аут и механизм повтора для HttpClient. По умолчанию он будет пытаться выполнить максимум 3 раза с каждой попыткой тайм-аута через 30 с.

Однако вы, вероятно, захотите изучить кэширование строк в течение подходящего периода времени. Вы действительно не хотите делать 2 блокировки внешних http-запросов для каждой страницы доступа к вашему сайту.

1 голос
/ 09 октября 2008

Как насчет использования базовой библиотеки JSTL и выполнения:

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

Это должно иметь возможность включать удаленный контент во время запроса.

1 голос
/ 09 октября 2008

JSP включает не поддержку, включая удаленные файлы, поэтому требуется относительный URL: http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html

Я предлагаю написать функцию, которая открывает соединение с этой страницей, загружает содержимое и затем распечатывает их в свой собственный поток out. Затем вы можете поместить эту функцию в локальный файл и просто include, что.

0 голосов
/ 09 октября 2008

Включения JSP не предназначены для такой работы с внешними серверами. Вот совершенно ужасный способ исправить вашу проблему, но это был единственный вариант для меня в подобной ситуации. Напишите класс для фактического анализа HTML-кода с этого сайта, а затем распечатайте его. Я бы добавил, что всякий раз, когда вы собираетесь делать что-то подобное, всегда полезно иметь какой-то механизм аутентификации.

...