c:import или c:url - укажите значение тайм-аута

Я хотел бы использовать c:import или c:url для захвата содержимого страницы (сервер рекламы). Кроме того, мне нужно указать тайм-аут, и если время ожидания вызова истекло или страница недоступна, мне нужно, чтобы какой-то текст по умолчанию возвращался в качестве моего значения.

Есть ли библиотека тегов jstl для этого? Или мне нужно создать свой собственный?


person joshjdevl    schedule 16.12.2008    source источник


Ответы (1)


Что-то вроде.

c:import открывает сокет на сервере и просто возвращает то, что делает соединение (в вашем случае необработанный html). Если сервер вернет страницу с ошибкой 404, то это то, что будет отображаться, а 500, и вы получите для этого страницу с ошибкой.

Поскольку это сокет, он имеет доступ ко всем ошибкам сокета. Для тайм-аута:

 java.net.ConnectException: Operation timed out    

Неизвестный хост:

 java.net.UnknownHostException: www.googasdasdasdassdle.com

Это означает, что вы можете обернуть импорт в оператор catch и обработать его прямо на странице.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<c:catch var="socketExceptionVariable">
    <c:import url="www.googasdasdasdassdle.com"/>
</c:catch>

<c:if test="${socketExceptionVariable != null}">
    <p>There was an error here</p>
    <c:out value="${socketExceptionVariable}"/>
</c:if>

Если импорт происходит, то он работает так, как задумано, но если что-то (что-то) пойдет не так, отобразится ваша страница с ошибкой.

Вы можете написать свой собственный тег импорта, но это инкапсулирует это, но это довольно сложная работа по сравнению с этим решением.

person Doug Miller    schedule 25.02.2009
comment
PS вы можете исправить свой тег jstltimeout, чтобы он состоял из двух слов. - person Doug Miller; 25.02.2009