异步请求时判断远程服务中断和本地服务器中断

编程技术  /  houtizong 发布于 2年前   117

先说 一下我们的需求:

本地服务使用TCP/IP从远程取得数据,本地动态展示远程传递的数据!

当远程服务没有连接或异常或者没有返回数据,当本地服务宕机时给予提示!

当服务返回空的数据时不处理!

也就是说这个请求有四种清空需要处理:远程服务中断,本地服务中断,本地返回转发正确消息,本地服务转发或返回空消息。

为防止网络抓取盗版,请访问我的博客获得更多信息,点击连接或访问:http://cuisuqiang.iteye.com/

 

测试例子首先创建一个Servlet,这个请求去初始化一个网络连接,如果初始化成功则返回true。

package com.servlet;import java.io.*;import java.net.Socket;import javax.servlet.*;import javax.servlet.http.*;@SuppressWarnings("serial")public class GetMess extends HttpServlet {public GetMess() {super();}public void destroy() {super.destroy();}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();String isConnSucc = "false";try {Socket socket = new Socket("127.0.0.1", 8000);System.out.println(socket.getLocalPort());isConnSucc = "true";} catch (Exception e) {e.printStackTrace();}out.write(isConnSucc);out.flush();out.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}public void init() throws ServletException {}}

 

在web.xml中配置这个请求:

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <servlet>    <servlet-name>GetMess</servlet-name>    <servlet-class>com.servlet.GetMess</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>GetMess</servlet-name>    <url-pattern>/GetMess</url-pattern>  </servlet-mapping>    <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

 

在JSP页面中做一些处理:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">        <title>远程数据获取</title>    <script type="text/javascript">function testConn(){var xmlhttp = getXMLHttpRequest();xmlhttp.onreadystatechange=function() {if (xmlhttp.readyState==4 && xmlhttp.status==200) {var res = xmlhttp.responseText;if("false"==res){alert("无法取得远程信息!");}else if("null"==res){// 没有返回数据时一般是不处理的//alert("服务器没有返回数据!");}else{alert("已经取得远程信息!");// 一般如果获得数据成功,那么应该间隔继续访问去获得数据setTimeout(testConn, 1000);}}else if (xmlhttp.readyState==4 && xmlhttp.status==12029) {// 连接状态中12029为网络异常alert("本地服务网络中断!无法继续服务!");}}var url = "<%=basePath %>GetMess";xmlhttp.open("POST",url,true);xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");xmlhttp.send("time=" +  + Math.random());}function getXMLHttpRequest(){var xmlhttp;if (window.XMLHttpRequest) {xmlhttp=new XMLHttpRequest();}else {xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}return xmlhttp;}    </script>  </head>    <body onload="testConn();">    页面自动加载!<br>  </body></html>

 

更为人性化的提示信息可以自己扩展,这里只要服务返回正确就会间隔请求,相当于一个递归调用!

 

关于XMLHttpRequest的使用,你可以访问我的博客其他连接

关于解析返回的内容你可以访问:

解析JSON解析XML

 

关于异步请求中返回消息状态的内容,给出以下清单以查询!

对象XMLHttpRequestreadyState属性包括五种可能的取值: 0: (未初始化)send方法还没有被调用1: (加载中)已调用了send方法,请求还在处理2: (已加载)send方法已完成,整个应答已接收3: (交互中) 正在解析应答4: (已完成) 应答已经解析,准备好进行下一步处理属性status的含义:0**:未被始化 1**:请求收到,继续处理 2**:操作成功收到,分析、接受 3**:完成此请求必须进一步处理 4**:请求包含一个错误语法或不能完成 5**:服务器执行一个完全有效请求失败 100——客户必须继续发出请求(Continue)101——客户要求服务器根据请求转换HTTP协议版本(Switching protocols)200——交易成功(OK)201——提示知道新文件的URL(Created)202——接受和处理、但处理未完成(Accepted)203——返回信息不确定或不完整(Non-Authoritative Information)204——请求收到,但返回信息为空(No Content)205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件(Reset Content)206——服务器已经完成了部分用户的GET请求(Partial Content)300——请求的资源可在多处得到(Multiple Choices)301——删除请求数据(Moved Permanently)302——在其他地址发现了请求数据(Found)303——建议客户访问其他URL或访问方式(See Other)304——客户端已经执行了GET,但文件未变化(Not Modified)305——请求的资源必须从服务器指定的地址得到(Use Proxy)306——前一版本HTTP中使用的代码,现行版本中不再使用307——申明请求的资源临时性删除(Temporary Redirect)400——错误请求,如语法错误(Bad Request)401——请求授权失败(Unauthorized)402——保留有效ChargeTo头响应(Payment Required)403——请求不允许(由于服务器上文件或目录的权限设置导致资源不可用)(Forbidden)404——没有发现文件、查询或URl(没有找到指定的资源)(Not Found)405——用户在Request-Line字段定义的方法不允许(Method Not Allowed)406——根据用户发送的Accept拖,请求资源不可访问(Not Acceptable)407——类似401,用户必须首先在代理服务器上得到授权(Proxy Authentication Required)408——客户端没有在用户指定的饿时间内完成请求(Request Timeout)409——对当前资源状态,请求不能完成(Conflict)410——服务器上不再有此资源且无进一步的参考地址(Gone)411——服务器拒绝用户定义的Content-Length属性请求(Length Required)412——一个或多个请求头字段在当前请求中错误(Precondition Failed)413——请求的资源大于服务器允许的大小(Request Entity Too Large)414——请求的资源URL长于服务器允许的长度(Request-URI Too Long)415——请求资源不支持请求项目格式(Unsupported Media Type)416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段(Requested Range Not Suitable)417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求(Expectation Failed)500——服务器产生内部错误(Internal Server Error)501——服务器不支持请求的函数(Not Implemented)502——服务器暂时不可用,有时是为了防止发生系统过载(Bad Gateway)503——服务器过载或暂停维修(Service Unavailable)504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长(Gateway Timeout)505——服务器不支持或拒绝支请求头中指定的HTTP版本(HTTP Version Not Supported )12029——an unknown error occurred while processing the request on the server. the status code returned from the server was : 12029(原因:网络不通)

 

以上内容仅供参考!

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客