我的家園

          我的家園

          先說 一下我們的需求:

          本地服務使用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

           

          關于異步請求中返回消息狀態的內容,給出以下清單以查詢!

          對象XMLHttpRequest
          readyState屬性包括五種可能的取值: 
          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(原因:網絡不通)


          以上內容僅供參考!


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 交口县| 巴东县| 赤壁市| 岳阳市| 西昌市| 青州市| 滨州市| 甘德县| 铅山县| 彝良县| 阿城市| 仁怀市| 闽清县| 永昌县| 呼伦贝尔市| 克拉玛依市| 镇平县| 望谟县| 遵义市| 新营市| 西和县| 佳木斯市| 上杭县| 湖北省| 闵行区| 宿迁市| 阜城县| 中宁县| 龙口市| 七台河市| 哈密市| 安义县| 隆林| 衡南县| 山阴县| 韩城市| 永吉县| 东山县| 卢氏县| 咸宁市| 青川县|