В чистом JSP я бы взял JSTL (просто поместите jstl-1.2.jar в /WEB-INF/lib
) <c:import>
и <c:catch>
для этого. <c:import>
выбрасывает IOException
(FileNotFoundException
), когда другая сторона не может быть достигнута. С <c:catch>
вы можете поймать любой Throwable
в переменную. С <c:choose>
(или <c:if>
) вы можете обработать результат соответствующим образом.
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="url" value="http://google.com" />
<c:catch var="e">
<c:import url="${url}" var="ignore"></c:import>
</c:catch>
<c:choose>
<c:when test="${not empty e}">
<p>Site doesn't exist
</c:when>
<c:otherwise>
<c:redirect url="${url}" />
</c:otherwise>
</c:choose>
var="ignore"
является обязательным, поскольку в противном случае он будет включать все содержимое страницы в JSP.
Тем не менее, я бы не стал использовать JSP для этого. Предпочитайте HttpServlet
или Filter
над JSP, если вы хотите контролировать, обрабатывать или обрабатывать запросы. JSP - это технология просмотра и должна использоваться как есть. В HttpServlet
я бы сделал больше так:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String url = "http://google.com";
try {
new URL(url).openStream(); // Will throw UnknownHostException or FileNotFoundException
response.sendRedirect(url);
} catch (IOException e) {
throw new ServletException("URL " + url + " does not exist", e); // Handle whatever you want. Forward to JSP?
}
}