Как включить заголовок в мой сайт, который размещен на внешнем сервере?
-
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-кода с этого сайта, а затем распечатайте его. Я бы добавил, что всякий раз, когда вы собираетесь делать что-то подобное, всегда полезно иметь какой-то механизм аутентификации.