response.sendRedirect - 检查重定向是否已启动

时间:2010-05-31 07:52:14

标签: java jsp redirect response

从JSP我只想重定向到另一个页面......

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

我可以查看google.com是否已启动,然后重定向(或写一个其他消息)...

类似的东西:

<% 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页面,我没有任何可用的库(如Apache Gmons for http GET方法)。

3 个答案:

答案 0 :(得分:0)

可以尝试检查服务器与目标之间的连接,就像在第一个示例中一样,但它会使线程等待这可能是不可取的。

第二个不会真正做你认为它做的事情 - 它只是向客户端发送一个HTTP 302,客户端可能会或可能不会遵循重定向,但无论如何你不会从中获得异常。< / p>

答案 1 :(得分:0)

这是恕我直言,这不是一个好主意。 您可以编写试图在www.google.com上打开与端口80的连接的Java代码,并检查是否收到200响应代码。 但请注意,这会降低页面渲染时间!

答案 2 :(得分: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。当您想要控制,预处理或后处理请求时,首选上面的HttpServletFilter 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?
    }
}