Java學習

          java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

           

          本站 JAVA 天氣預報實例

          大致步驟是
          1 利用soap向webservice endpoint進行請求,取回請求結果
          2 把結果顯示在web界面上,web界面采用Java+Jsp
          一 WeatherReport類
          方法 1 構造soap請求(請求格式請見上面的鏈接),用用戶輸入的城市名稱鑲在此請求里面

          java 代碼

          /**
          * 獲取SOAP的請求頭,并替換其中的標志符號為用戶輸入的城市
          *
          * 編寫者:王景輝
          *
          * @param city
          * 用戶輸入的城市名稱
          * @return 客戶將要發送給服務器的SOAP請求
          */
          private static String getSoapRequest(String city) {
          StringBuilder sb = new StringBuilder();
          sb
          .append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"
          + "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
          + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
          + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
          + "<soap:Body> <getWeatherbyCityName xmlns=\"http://WebXml.com.cn/\">"
          + "<theCityName>" + city
          + "</theCityName> </getWeatherbyCityName>"
          + "</soap:Body></soap:Envelope>");
          return sb.toString();
          }


          方法 2 向endpoint發送上述SOAP請求,并設置一些請求屬性,返回一個服務器端的InputStream(XML文檔流)

          java 代碼

          /**
          * 用戶把SOAP請求發送給服務器端,并返回服務器點返回的輸入流
          *
          * 編寫者:王景輝
          *
          * @param city
          * 用戶輸入的城市名稱
          * @return 服務器端返回的輸入流,供客戶端讀取
          * @throws Exception
          */
          private static InputStream getSoapInputStream(String city) throws Exception {
          try {
          String soap = getSoapRequest(city);
          if (soap == null) {
          return null;
          }
          URL url = new URL(
          "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx");
          URLConnection conn = url.openConnection();
          conn.setUseCaches(false);
          conn.setDoInput(true);
          conn.setDoOutput(true);

          conn.setRequestProperty("Content-Length", Integer.toString(soap
          .length()));
          conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
          conn.setRequestProperty("SOAPAction",
          "http://WebXml.com.cn/getWeatherbyCityName");

          OutputStream os = conn.getOutputStream();
          OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
          osw.write(soap);
          osw.flush();
          osw.close();

          InputStream is = conn.getInputStream();
          return is;
          } catch (Exception e) {
          e.printStackTrace();
          return null;
          }
          }


          方法 3 解析方法2返回的XML文檔流,并用特定的符號分隔,以便我們在Jsp頁面進行結果分析

          java 代碼

          /**
          * 對服務器端返回的XML進行解析
          *
          * 編寫者:王景輝
          *
          * @param city
          * 用戶輸入的城市名稱
          * @return 字符串 用,分割
          */
          public static String getWeather(String city) {
          try {
          Document doc;
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          dbf.setNamespaceAware(true);
          DocumentBuilder db = dbf.newDocumentBuilder();
          InputStream is = getSoapInputStream(city);
          doc = db.parse(is);
          NodeList nl = doc.getElementsByTagName("string");
          StringBuffer sb = new StringBuffer();
          for (int count = 0; count < nl.getLength(); count++) {
          Node n = nl.item(count);
          if(n.getFirstChild().getNodeValue().equals("查詢結果為空!")) {
          sb = new StringBuffer("#") ;
          break ;
          }
          sb.append(n.getFirstChild().getNodeValue() + "#\n");
          }
          is.close();
          return sb.toString();
          } catch (Exception e) {
          e.printStackTrace();
          return null;
          }
          }

          二 weatherInfo.jsp頁面

          核心功能是解析 方法3 所返回的字符串,向endpoint進行請求時,一個XML文檔片段是

          xml 代碼


          <?xml version="1.0" encoding="utf-8" ?>
          <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://WebXml.com.cn/">
          <string>湖南</string>
          <string>長沙</string>
          <string>57687</string>
          <string>57687.jpg</string>
          <string>2007-12-26 14:35:26</string>
          <string>7℃ / 6℃</string>
          <string>12月26日 小雨</string>
          <string>西北風<=3級</string>
          <string>7.gif</string>
          <string>7.gif</string>
          <string>今日天氣實況:多云;7.4℃;風向/風力:西北風2級;空氣質量:較差;紫外線強度:最弱</string>
          <string>穿衣指數:感冒指數:溫度較低,…… 請您在旅游時注意增加衣物。</string>
          <string>8℃ / 5℃</string>
          <string>12月27日 小雨</string>
          <string>西北風<=3級</string>
          <string>7.gif</string>
          <string>7.gif</string>
          <string>10℃ / 4℃</string>
          <string>12月28日 小雨</string>
          <string>西北風<=3級</string>
          <string>7.gif</string>
          <string>7.gif</string>
          <string>長沙市位于湖南省東部偏北, …… 市區年均降水量1361.6毫米。……<string>
          </ArrayOfString>


          在Jsp中解析的代碼如下,基本上是對字符串的操作,截取及截取長度的控制

          java 代碼

          //穿衣指數
          s1 = str.substring(str.indexOf("穿衣指數:"),str.indexOf("穿衣指數:")+4) ;
          s1Content = str.substring(str.indexOf("穿衣指數:")+5,str.indexOf("感冒指數:")) ;
          //感冒指數
          s2 = str.substring(str.indexOf("感冒指數:"),str.indexOf("感冒指數:")+4) ;
          s2Content = str.substring(str.indexOf("感冒指數:")+5,str.indexOf("晨練指數:")) ;

          //晨練指數
          s3 = str.substring(str.indexOf("晨練指數:"),str.indexOf("晨練指數:")+4) ;
          s3Content = str.substring(str.indexOf("晨練指數:")+5,str.indexOf("交通指數:")) ;
          //交通指數
          s7 = str.substring(str.indexOf("交通指數:"),str.indexOf("交通指數:")+4) ;
          s7Content = str.substring(str.indexOf("交通指數:")+5,str.indexOf("中暑指數:")) ;
          //中暑指數
          s4 = str.substring(str.indexOf("中暑指數:"),str.indexOf("中暑指數:")+4) ;
          s4Content = str.substring(str.indexOf("中暑指數:")+5,str.indexOf("防曬指數:")) ;
          //防曬指數
          s5 = str.substring(str.indexOf("防曬指數:"),str.indexOf("防曬指數:")+4) ;
          s5Content = str.substring(str.indexOf("防曬指數:")+5,str.indexOf("旅行指數:")) ;
          //旅行指數
          s6 = str.substring(str.indexOf("旅行指數:"),str.indexOf("旅行指數:")+4) ;
          s6Content = str.substring(str.indexOf("旅行指數:")+5) ;


          運行附件:http://localhost:8080/yourProject/tianqi.jsp

          好了,基本上核心代碼就是上邊那些了!不僅如此,加入我們想要在自己的系統里加入飛機票,火車票,股票信息等等之類的功能,只要有相應的webservice,我們都可以實現

          文檔來源 http://mhqawjh.javaeye.com/blog/150954

          源代碼 點擊下面現在下載按鈕

          這里感謝 技工窩 mhqawjh 博客地址 http://mhqawjh.javaeye.com/

          posted on 2009-04-08 14:25 找個美女做老婆 閱讀(1883) 評論(2)  編輯  收藏

          評論

          # re: 本站 JAVA 天氣預報實例 2012-12-25 11:20 dgqjava

          真心很垃圾~  回復  更多評論   

          # re: 本站 JAVA 天氣預報實例 2013-12-17 11:59 梁建民

          很好很實用  回復  更多評論   


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


          網站導航:
           

          導航

          統計

          公告

          本blog已經搬到新家了, 新家:www.javaly.cn
           http://www.javaly.cn

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 温宿县| 汝城县| 广水市| 来宾市| 黎平县| 阳曲县| 时尚| 株洲县| 隆德县| 来宾市| 房产| 门头沟区| 平果县| 吉隆县| 镇坪县| 丹寨县| 竹溪县| 邵阳市| 潢川县| 河源市| 民权县| 嵊泗县| 龙南县| 额尔古纳市| 杭州市| 乌拉特后旗| 建湖县| 阿尔山市| 商河县| 金湖县| 博湖县| 平舆县| 九台市| 曲靖市| 蛟河市| 石棉县| 峨山| 兴国县| 宁远县| 崇州市| 环江|