代码之家  ›  专栏  ›  技术社区  ›  Trick

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

  •  3
  • Trick  · 技术社区  · 15 年前

    从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页面,我没有任何可用的库(比如用于HTTP GET方法的ApacheCommons)。

    3 回复  |  直到 15 年前
        1
  •  0
  •   BalusC    15 年前

    在纯JSP中,我将获取JSTL(只是 jstl-1.2.jar 在里面 /WEB-INF/lib ) <c:import> <c:catch> 为此。这个 <C:进口& GT; 会扔 IOException ( FileNotFoundException )当无法到达另一侧时。与 <C:渔获量& 你可以抓住任何 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是一种视图技术,应该按原样使用。在一个 HTTPSServices 我更喜欢这样:

    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?
        }
    }
    
        2
  •  0
  •   ob1    15 年前

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

    第二个不会像您认为的那样做——它只是向客户机发送一个HTTP302,客户机可能会或者可能不会遵循这个重定向,但在任何情况下,您都不会从中得到异常。

        3
  •  0
  •   Patrick Cornelissen    15 年前

    这样做不是个好主意。 您可以编写Java代码,试图在www. Google网站上打开与端口80的连接,并检查是否得到200响应代码。 但请注意,这会减慢页面呈现时间!

    推荐文章