1

URL 来自 Play Framework 2 中的表单。我想检查 URL 是否真的存在。

所以似乎可以通过结合两种方法来完成。

在模型中是否有使用注释的内置类似功能?

如何在 Play Framework 2.0 中创建自定义验证器?

如何检查 URL 是否存在或使用 Java 返回 404?

编辑:对于赏金,您可以提供 URL 验证器的实现(不是内置的)。

4

1 回答 1

4

基本上,您需要对目标 URL 执行 HTTPHEAD请求并检查您是否获得了可接受的响应代码。可接受的响应代码可能是 OK (200)、暂时移动 (???) 和其他将导致页面的代码,如果不是现在至少很快。

为什么HEAD?因为GET将下载整个页面并且HEAD只会下载 HTTP 标头。在这种情况下,这将花费更少的时间和时间不是朋友。验证应该很快完成,并且发出 HTTP 请求需要时间。在这几秒钟内(或更多,取决于服务器和网络负载),用户会想知道发生了什么并感到沮丧。除非您可以显示其中一个动画进度指示器,让他知道验证其输入需要一些时间。

您应该像那些密码强度验证器那样执行此操作,一旦焦点离开输入控件并且在显示结果的一侧有一个动画指示器,就会在后台 AJAX 调用中验证值。同时用户可以填写其他信息。

代码将是这样的:

public class UrlExistenceValidator ... {
    public boolean isValid(Object object) {
        if (!(object instanceof String)) {
            return false;
        }

        final String urlString = (String) object;

        final URL url = new URL(urlString);
        final HttpURLConnection huc =  (HttpURLConnection) url.openConnection();
        huc.setRequestMethod("HEAD");
        huc.connect();

        final int code = huc.getResponseCode();
        return code != 404;
    }
}
于 2013-10-21T14:32:47.837 回答