2010-05-31 8 views
3

De JSP Je veux juste une redirection vers une autre page ...response.sendRedirect - vérifiez Rediriger est en

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

Puis-je vérifier si google.com est et puis redirigez (ou écrire un msg d'autre) ...

Quelque chose comme ça:

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

Ou

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

C'est juste une page JSP, je n'ai pas de libraires disponibles (comme ApacheCommons pour les méthodes http GET).

Répondre

0

En pur JSP, je voudrais saisir JSTL (juste mettre jstl-1.2.jar en /WEB-INF/lib) <c:import> et <c:catch> pour cela. Le <c:import> lancera un IOException (FileNotFoundException) lorsque l'autre côté ne peut pas être atteint. Avec le <c:catch>, vous pouvez attraper n'importe quel Throwable dans une variable. Avec le <c:choose> (ou <c:if>), vous pouvez gérer le résultat en conséquence.

<%@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> 

Le var="ignore" est obligatoire car il comprendrait par ailleurs tout le contenu de la page dans la JSP.


Cela dit, je n'utiliserais pas JSP pour cela. Préférez un HttpServlet ou Filter au-dessus de JSP lorsque vous souhaitez contrôler, pré-traiter ou post-traiter des demandes. JSP est une technologie de visualisation et doit être utilisée telle quelle. Dans un HttpServlet je ferais plus comme ceci:

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

Vous peut pouvez essayer de vérifier la connectivité de votre serveur à la cible comme dans votre premier exemple, mais il fera attendre le thread pour ce qui n'est probablement pas souhaitable. Le second ne fera pas vraiment ce que vous pensez qu'il fait - il envoie juste un HTTP 302 au client, et le client peut ou non suivre la redirection mais dans tous les cas vous ne recevrez pas d'exception.

+1

Vous pourriez envisager de vérifier dans un thread séparé ou avec la tâche de minuterie à quartz et vérifier si la dernière fois le fil vérifié le site était disponible. –

+0

Oui, cela serait utile vers l'objectif initial ici – ob1

0

Ce n'est pas une bonne idée de le faire. Vous pouvez écrire du code java qui essaie d'ouvrir une connexion au port 80 sur www.google.com et vérifier si vous obtenez un code de réponse 200. Mais sachez que cela va ralentir le temps de rendu de votre page!

Questions connexes