Как включить заголовок в мой сайт, который размещен на внешнем сервере?

StackOverflow https://stackoverflow.com/questions/187188

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

<% @ include file = " www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html " % GT &; ,

Мы также попробовали

<% @ include file = " ** http: //**www.CLIENT.com/CLIENT2/MiddlePageFiles/Vendor_header.html " % GT &; ,

К сожалению, это не работает для нас. Кажется, что происходит то, что код ищет этот файл ТОЛЬКО локально и никогда не выходит & Quot; outside & Quot; искать это.

Мы можем вытянуть заголовок на нашу страницу, когда мы используем iframe, но из-за способа, которым заголовок построен / закодирован, мышь над выпадающими меню не работает как они должны, когда мы используем iframe. Выпадающие меню & Quot; cascading & Quot; под остальным содержанием на странице, и мы не смогли принести их в & "top &".

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

Есть идеи?

Это было полезно?

Решение

Если вы решите сделать это на 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-запросов для каждой страницы доступа к вашему сайту.

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top