Natural

           

          jsp內(nèi)嵌google天氣

          做網(wǎng)站的時(shí)候有時(shí)需要個(gè)天氣預(yù)報(bào)的功能。可以利用google的api來(lái)獲取目標(biāo)城市的天氣預(yù)報(bào)。。
          常用的做法是先獲取天氣的xml存到本地,再解析出當(dāng)天的日期顯示到頁(yè)面上。

          獲取天氣的bean
           1 package com.company.utils;
           2 
           3 import java.io.BufferedReader;
           4 import java.io.BufferedWriter;
           5 import java.io.File;
           6 import java.io.FileOutputStream;
           7 import java.io.IOException;
           8 import java.io.InputStream;
           9 import java.io.InputStreamReader;
          10 import java.io.OutputStreamWriter;
          11 import java.io.Writer;
          12 import java.net.URL;
          13 
          14 import javax.xml.parsers.DocumentBuilder;
          15 import javax.xml.parsers.DocumentBuilderFactory;
          16 
          17 import org.w3c.dom.Document;
          18 import org.w3c.dom.NodeList;
          19 
          20 public class GetWeather {
          21 
          22     /**
          23      * 傳入選入的城市
          24      */
          25     public String getWeather(String cityName, String fileAddr) {
          26         // 獲取google上的天氣情況,寫(xiě)入文件
          27         try {
          28             URL url = new URL("http://www.google.com/ig/api?hl=zh_cn&weather="
          29                     + cityName);
          30             InputStream inputstream = url.openStream();
          31             String s, str;
          32             BufferedReader in = new BufferedReader(new InputStreamReader(inputstream));
          33             StringBuffer stringbuffer = new StringBuffer();
          34             Writer out = new BufferedWriter(new OutputStreamWriter(
          35                     new FileOutputStream(fileAddr), "utf-8"));
          36             while ((s = in.readLine()) != null) {
          37                 stringbuffer.append(s);
          38             }
          39             str = new String(stringbuffer);
          40             out.write(str);
          41             out.close();
          42             in.close();
          43         } catch (IOException e) {
          44             e.printStackTrace();
          45         }
          46 
          47         // 讀取需要的數(shù)據(jù)
          48         File file = new File(fileAddr);
          49         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
          50         String str = null;
          51         try {
          52             DocumentBuilder builder = factory.newDocumentBuilder();
          53             Document doc = builder.parse(file);
          54             NodeList nodelist1 = (NodeList) doc.getElementsByTagName("forecast_conditions");
          55             NodeList nodelist2 = nodelist1.item(0).getChildNodes();
          56             str = nodelist2.item(4).getAttributes().item(0).getNodeValue()
          57                     + ",溫度:"
          58                     + nodelist2.item(1).getAttributes().item(0).getNodeValue()
          59                     + "℃-"
          60                     + nodelist2.item(2).getAttributes().item(0).getNodeValue()
          61                     + "";
          62         } catch (Exception e) {
          63             e.printStackTrace();
          64         }
          65         return str;
          66     }
          67     
          68 }
          69 

          利用servlet來(lái)獲取目標(biāo)城市的天氣。google的天氣api是用城市名的拼音。
          當(dāng)然,xml的存儲(chǔ)路徑可以用request獲取web應(yīng)用的根目錄,存到應(yīng)用的根目錄上去。畢竟linux系統(tǒng)是沒(méi)有C盤(pán)的……
           1 package com.company.servlet;
           2 
           3 import java.io.IOException;
           4 import java.io.PrintWriter;
           5 import java.text.DateFormat;
           6 
           7 import javax.servlet.ServletException;
           8 import javax.servlet.ServletOutputStream;
           9 import javax.servlet.http.HttpServlet;
          10 import javax.servlet.http.HttpServletRequest;
          11 import javax.servlet.http.HttpServletResponse;
          12 
          13 import com.company.utils.GetWeather;
          14 
          15 public class servletWeather extends HttpServlet {
          16 
          17 
          18     private static final String APP_TODAY_WEATHER = "app_today_weather";    //applcation中的天氣屬性名
          19     private static final String cityName = "hangzhou";                        //天氣預(yù)報(bào)對(duì)象——城市名(用拼音)
          20     private static final String cityName_ZH = "杭州";                        //天氣預(yù)報(bào)對(duì)象——城市名(中文)
          21     private static final String fileAddr = "C:/" + cityName + ".xml";        //用來(lái)存儲(chǔ)天氣預(yù)報(bào)的xml文件的路徑名
          22     
          23     protected void processRequest(HttpServletRequest request,
          24                                   HttpServletResponse response) throws
          25         ServletException, IOException {
          26         response.setContentType("text/html;charset=utf-8");
          27         
          28         //獲取今天的日期
          29         java.util.Date nowDate = new java.util.Date();
          30         DateFormat dateformat = DateFormat.getDateInstance();
          31         String todayDate = dateformat.format(nowDate);
          32         
          33         
          34         // 獲取application中存儲(chǔ)的天氣
          35         String today_weather = (String)request.getSession().getServletContext().getAttribute(APP_TODAY_WEATHER);
          36         
          37         // 如果application中存儲(chǔ)的天氣為空,則重新獲取一下;并存到application中
          38         if(today_weather == null || "".equals(today_weather))
          39         {    
          40             today_weather = getTodayWeather();
          41             today_weather = todayDate + " " + cityName_ZH + " " + today_weather;
          42             request.getSession().getServletContext().setAttribute(APP_TODAY_WEATHER, today_weather);
          43         }
          44         else
          45         {    // 如果application中存儲(chǔ)的天氣不是今天的,則重新獲取一下;并存到application中
          46             int flag = today_weather.indexOf(todayDate);
          47             if(flag < 0)
          48             {
          49                 today_weather = getTodayWeather();
          50                 today_weather = todayDate + " " + cityName_ZH + " " + today_weather;
          51                 request.getSession().getServletContext().setAttribute(APP_TODAY_WEATHER, today_weather);
          52             }
          53         }
          54 
          55         PrintWriter responsePrintWriter = response.getWriter();
          56         
          57         // 輸出天氣(字符串)到頁(yè)面
          58         responsePrintWriter.write(today_weather);
          59         
          60         //以下關(guān)閉輸入流!
          61         responsePrintWriter.flush();
          62         responsePrintWriter.close();
          63     }
          64     
          65     /**
          66      * 獲取今天的天氣
          67      * @return String
          68      */
          69     public String getTodayWeather()
          70     {
          71         GetWeather ggw = new GetWeather();
          72         return ggw.getWeather(cityName, fileAddr);
          73     }
          74 
          75     protected void doGet(HttpServletRequest request,
          76                          HttpServletResponse response) throws ServletException,
          77         IOException {
          78         processRequest(request, response);
          79     }
          80 
          81     protected void doPost(HttpServletRequest request,
          82                           HttpServletResponse response) throws ServletException,
          83         IOException {
          84         processRequest(request, response);
          85     }
          86 
          87 }
          88 



          web.xml中需要配置一下servlet
          <servlet>
              
          <servlet-name>servletWeather</servlet-name>
              
          <servlet-class>com.company.servlet.servletWeather</servlet-class>
          </servlet>
          <servlet-mapping>
              
          <servlet-name>servletWeather</servlet-name>
              
          <url-pattern>/servletWeather</url-pattern>
          </servlet-mapping>

          ok,只要在jsp頁(yè)面調(diào)用一下這個(gè)servlet就好了
          <div>
          <iframe frameborder="0"  src="servletWeather"></iframe>
          </div>



          posted on 2010-03-24 22:11 此號(hào)已被刪 閱讀(917) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(8)

          隨筆分類(83)

          隨筆檔案(78)

          文章檔案(2)

          相冊(cè)

          收藏夾(7)

          最新隨筆

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 达日县| 阳新县| 景宁| 措勤县| 远安县| 郧西县| 汨罗市| 年辖:市辖区| 扶风县| 沂水县| 鹤壁市| 东莞市| 鄱阳县| 宝清县| 灵丘县| 哈巴河县| 苍梧县| 互助| 安仁县| 清河县| 宜兰县| 宁国市| 志丹县| 富阳市| 庆城县| 固镇县| 营山县| 鄂托克旗| 阳江市| 锡林浩特市| 吴江市| 桃源县| 叙永县| 德令哈市| 兰坪| 玛沁县| 佛冈县| 梅州市| 鱼台县| 葫芦岛市| 新民市|