网址来自Play Framework 2中的表单。我想检查网址是否真的存在。
所以似乎可以通过结合两个接近来完成。
模型中是否存在使用注释的内置类似功能?
How to create a custom validator in Play Framework 2.0?
How to check if a URL exists or returns 404 with Java?
编辑:对于赏金,您可以提供URL验证器(不是内置)的实现。
答案 0 :(得分:4)
基本上,您需要对目标网址执行HTTP HEAD
请求,并检查您是否有可接受的响应代码。可接受的响应代码可能是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;
}
}