Java 检查连接/断开的网络连接
我正在使用Java 检查连接/断开的网络连接,java,javascript,Java,Javascript,我正在使用java/servlet和前端JSP开发一个web应用程序 我的页面为用户显示一些信息 有没有合适的方法来检查网络连接是否处于活动状态(开/关)以及哪些连接支持所有浏览器和设备 如果网络瘫痪,我想重定向到另一个带有适当消息的页面 我读过有关使用导航器的内容。联机,但并非所有浏览器都支持它,有时它也会给出错误的结果。大多数浏览器中都有一个本机属性:导航器。联机,但是,目前不同浏览器的实现情况差异很大,这使得它很难在任何实际情况下使用 考虑到这一点,我使用下面的javascript函数检查
java/servlet
和前端JSP
开发一个web应用程序
我的页面为用户显示一些信息
有没有合适的方法来检查网络连接是否处于活动状态(开/关)以及哪些连接支持所有浏览器和设备
如果网络瘫痪,我想重定向到另一个带有适当消息的页面
我读过有关使用
导航器的内容。联机,但并非所有浏览器都支持它,有时它也会给出错误的结果。大多数浏览器中都有一个本机属性:导航器。联机,但是,目前不同浏览器的实现情况差异很大,这使得它很难在任何实际情况下使用
考虑到这一点,我使用下面的javascript函数检查我的页面是否与web连接。它非常简单,可以跨浏览器使用。它通过尝试从服务器加载映像并捕获发生的任何错误来工作:
var isOnline = true;
function onlineCheck(){
var testImg = new Image();
testImg.onerror = function(){
isOnline = false
alert("Web access is unavailable. Please check that you are connected to the internet.")
}
testImg.onload = function(){ isOnline = true; }
testImg.src = "https://www.google.ie/images/srpr/logo4w.png"; //replace this with an image on your site
}
将站点上的testImg.src
更改为1x1像素图像是个好主意。这将更快地加载,因为到您的域的连接可能已经打开。为此,我通常使用动态生成的图像,因为我发现实现几行代码比创建和上载真实图像更容易。以防您想试试这个,我已经包含了用于制作1x1像素图像的PHP代码。您可以轻松地将其应用于JSP:
header( "Content-type: image/gif");
header("Cache-Control: no-cache");
header("Cache-Control: must-revalidate");
printf ("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59);
exit();
判断web应用程序是否有工作连接的唯一正确方法是调用远程服务并等待响应。如果请求失败或超时,则可以假定没有连接
navigator API的问题在于,它只会告诉您设备是否连接到了第一层,无论是路由器还是LAN等,而不是真正连接到internet的设备
很简单,按照下面的思路做一些事情就可以了
var appConnected = false;
function checkConnection() {
var xmlHttp = new XMLHttpRequest();
xmlHttp.timeout = 1000 //Miliseconds - Set this to whatever you feel appropriate for your app
xmlHttp.open('GET', 'http://yourdomain.com/1x1.gif', true);
xmlHttp.onreadystatechange = function () {
switch (xmlHttp.readyState) {
case 4:
var r = xmlHttp.responseText;
if ( xmlHttp.status === 200 ) {
appConnected = true;
} else {
appConnected = false;
}
break;
default:
appConnected = false;
}
};
}
var intervalID = window.setInterval(checkConnection, 5000);
这将是每5秒运行一次-这取决于您的特定用例可能不是那么有效。记住要考虑用户的数据和带宽。
完成轮询连接状态后,请使用
clearInterval(nIntervId);
您的另一个选择可能是在HTML5应用程序缓存中使用回退选项-尽管如果您针对的是较旧的设备,这可能是不可能的。您应该使用每个答案旁边的勾号将答案标记为正确,或者如果您仍然有困难,请留下评论。这看起来是处理网络连接的正确方法。您认为,它需要在图像src url中附加一些唯一的值吗?例如http:///image/srpr/logo4w.ping?new Date()以确保我们不总是引用缓存的图像。另外,您知道phoneGap如何验证网络连接吗?如果您使用的是动态映像,您可以指定不应如上所示进行缓存,否则,是的,我认为在映像src中附加时间戳new Date().getTime()
,也应该做同样的工作。我相信PhoneGap连接到设备操作系统来检查在线状态,而不是通过浏览器或javascript。谢谢,这真的很有帮助。您是否有使用设备操作系统检查在线状态的PhoneGap示例?我没有太多使用PhoneGap,但这似乎是您正在寻找的: