首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用HTTP响应代码检查外部URL内容是否正确加载到JSP页面中的<IFRAME>

如何使用HTTP响应代码检查外部URL内容是否正确加载到JSP页面中的<IFRAME>
EN

Stack Overflow用户
提问于 2010-02-19 02:22:38
回答 2查看 5.5K关注 0票数 1

我正在研究一种解决方案,它允许将外部URL内容加载到JSP页面的<iframe>元素中。但是,在显示任何内容之前,JSP代码将首先检查iframe的src URL中包含的HTTP响应,如果返回200/OK,则显示它,否则将显示自定义消息或另一个页面。我只想在服务器端做这件事。

有没有一种方法可以在不使用AJAX /用户端脚本的情况下实现它,这可能会有潜在的跨浏览器不兼容性?

EN

回答 2

Stack Overflow用户

发布于 2010-02-19 02:58:56

您可以使用JSTL (just drop jstl-1.2.jar in /WEB-INF/lib) c:import标签来导入外部资源,如果URL无效,则会抛出FileNotFoundException,然后可以使用c:catch标签捕获该URL。最后,您可以使用JSTL来检查是否显示c:choose或最终的错误。

这是一个SSCCE,复制‘n’粘贴‘n’运行它(安装了JSTL ):

代码语言:javascript
复制
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 2291085</title>
    </head>
    <body>
        <c:set var="url" value="http://google.com" />
        <c:catch var="e">
            <c:import url="${url}" varReader="ignore" />
        </c:catch>
        <c:choose>
            <c:when test="${empty e}">
                <iframe src="${url}"></iframe>
            </c:when>
            <c:otherwise>
                <p>Error! ${e}</p>
            </c:otherwise>
        </c:choose>
    </body>
</html>

http://google.com更改为http://google.com/foo或其他无效内容,您将看到显示的是错误。

请注意,我使用varReader="ignore"对其进行缓冲但未读,这样它就不会被完全拖入其中,这可能很昂贵,因为毕竟您两次请求相同的URL。

更新:另外,您也可以使用Servlet,它在java.net.URLConnection的帮助下在doGet()方法中对请求进行预处理。这里有一个启动示例。

代码语言:javascript
复制
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    URL url = new URL("http://google.com");
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    int status = connection.getResponseCode(); // 200 = OK, 404 = Not Found, etc.

    if (status == 200) {
        request.setAttribute("url", url);
    } else {
        // Do your thing to set custom message or request another page.
    }

    request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
}

page.jsp中的...and只需如下所示

代码语言:javascript
复制
<c:if test="${not empty url}">
    <iframe src="${url}"></iframe>
</c:if>

将servlet映射到/foo之类的url-pattern上,并在http:/example.com/contexty/foo上调用它。

票数 5
EN

Stack Overflow用户

发布于 2010-02-19 04:22:35

<iframe>的实际加载将会发生,因为客户端会加载它。肯定有更好的方法来验证URL,而不是试图通过JSP包含它。用Java做,或者干脆根本不做:让服务器返回一个“找不到”的页面,该页面运行一些Javascript来隐藏iframe。(如果用户在关闭Javascript的情况下浏览,则会显示错误。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2291085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档