2010-05-31 50 views
3

從JSP我只想重定向到另一個頁面......response.sendRedirect是 - 檢查重定向到了

<% response.sendRedirect("http://www.google.com/"); %> 

我看看google.com到了,然後重定向(或者編寫一個MSG) ...

類似的東西:

<% if(ping("www.google.com")) { 
    response.sendRedirect("http://www.google.com/"); 
} else { 
    // write a message 
}%> 

或者

<% try { 
    response.sendRedirect("http://www.google.com/"); 
} catch(SomeException e) { 
    // write a message 
}%> 

它只是一個JSP頁面,我沒有任何可用的庫(例如ApacheCommons用於http GET方法)。

回答

0

在純JSP中,我會爲此抓取JSTL(只需將jstl-1.2.jar放入/WEB-INF/lib<c:import><c:catch><c:import>將拋出一個IOExceptionFileNotFoundException),當另一邊無法到達。通過<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。當您想要控制,預處理或後處理請求時,優先使用高於JSP的HttpServletFilter。 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? 
    } 
} 
0

可以嘗試檢查連接形式您的服務器的目標,就像你的第一個例子,但它會讓線程等待這可能是不可取的。

第二個不會真正做你認爲它的工作 - 它只是發送一個HTTP 302到客戶端,客戶端可能會或可能不會遵循重定向,但無論如何你都不會得到異常。

+1

你可以考慮驗證一個單獨的線程或石英計時器任務,並檢查是否最後一次檢查線程的網站是可用的。 – 2010-05-31 08:06:43

+0

是的,這對於這裏的最初目標會有所幫助 – ob1 2010-05-31 08:14:03

0

這是恕我直言,這不是一個好主意。 您可以編寫試圖在www.google.com上打開連接到端口80的java代碼,並檢查是否獲得200響應代碼。 但請注意,這會減慢你的頁面渲染時間!