日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 用sevlet实现ip定位以及天气预报的功能

發布時間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 用sevlet实现ip定位以及天气预报的功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近兩天想實現一個登陸網站就可以自動顯示該地區的的天氣情況。很是苦惱。慢慢研究然后才其所得。
研究的思路大致是這樣的。ip 定位–>通過位置獲取天氣。首先聲明一下,以前國家氣象局的接口已經被封,以前直接傳一個json數據就有天氣情況,現在需要手動解析下。
所以,這樣的實際思路為:ip獲取地址(操作獲取城市名稱)------百度下載各城市對應編號---------io字符串處理(你方便得到的)------通過城市名獲取編號---------通過編號組成網頁url訪問---------截取你所需要的部分。
1:首先,你要做的事可以通過ip訪問到你的地理位置,百度地圖api免費并且挺好用的。百度api
http://api.map.baidu.com/location/ip //HTTP協議

https://api.map.baidu.com/location/ip //HTTPS
協議你要先申請下才能獲取ak,你要訪問的地址 其實是http://api.map.baidu.com/location/ip?ak=“你的ak”;如果有ip加上:&ip="";他返回的是一個json串,你可以用阿里的fastjson解析他,獲取你想要的東西。
2:有了地址之后,在上中國氣象局官網

你會發現每個城市都有一個編號,你可以百度復制到然后通過io字符串處理例如這樣

通過百度接口獲取的名稱,在通過io按照行讀取遍歷找到這個城市的編號,返回
3:通過返回的號拼接地址,抓取,谷歌瀏覽器先抓包分析要抓去的層次內容:

下面先附上沒涉及web端的測試代碼:爬取分析工具:jsuop fastjson
獲取地址 調用方法主類

import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL;import org.jsoup.Jsoup; import org.jsoup.nodes.Document;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject;public class 地址 {public static void main(String[] args) throws IOException{Document doc=Jsoup.connect("http://api.map.baidu.com/location/ip?ak=nZFzpfoHLDVD3pEPGaSrGCYebppWx7ge").ignoreContentType(true).get();// System.out.println(doc.text());JSONObject jsonObj = JSON.parseObject(doc.text()); // System.out.println(jsonObj);JSONObject jsonObj1=jsonObj.getJSONObject("content").getJSONObject("address_detail");String jsonObj2=(String) jsonObj1.get("city");System.out.println(jsonObj2);//這就是城市名/** 獲取城市對應編號*/city city=new city();String number= city.getcity(jsonObj2);System.out.println(number);/** 獲取天氣信息*/String weather=new search().weather(number);System.out.println(jsonObj2 ":" weather);} }

返回城市編號

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;public class city {public city(){}public String getcity(String city) throws IOException{{String citynumber="";File file=new File("E:/bianhao2.txt");FileReader in=new FileReader(file);BufferedReader buf=new BufferedReader(in);String s="";while((s=buf.readLine())!=null){String a[]=s.split(":");//System.out.println(a[0]);if(a[0].equals(city.substring(0, city.length()-1))){citynumber=a[1];}} in.close();buf.close();//System.out.println(citynumber);return citynumber; }} }

返回天氣信息,簡單爬蟲不做過多解釋

import java.io.IOException;import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;public class search {public search() {}public String weather(String bianhao) throws IOException{String url="http://www.weather.com.cn/weather/" bianhao ".shtml";Document doc=Jsoup.connect(url).get();Elements links=doc.getElementsByClass("sky skyid lv3 on");//System.out.println(links.text());return links.text();} }

上述是測試主機。如果整合到web上,有幾點注意的
1:request方法獲取客戶端ip正常事可以的,但是獲取本機會是ipv6。并且這個ip也查不到地理位置,所以就需要判斷是否為本機,如果市本機就默認使用不帶ip(不帶ip是解析本機)。
2:通過session傳遞數據。跳轉到該網頁但url不變。
3:輸入流,這就是很坑的地方,如果正常的字符流在windows上是沒問題的,但是部署到linnux服務器上會亂碼,并且linux的sevlet不好調試還得從新導入。試了很多方法才發現原來是我的字符編碼沒設置好(設置成utf不行你可以試試)。注意流的關閉
4:sesson.jsp網頁自行設計,傳遞的內容只需session.getAttribute(“tf”),即可獲取。注意訪問頁面第一次要訪問sevlet。我也不知道為什么。
sevlet代碼為

import java.io.*;import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject;public class weather extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");//防止亂碼response.setCharacterEncoding("UTF-8");String path=this.getServletContext().getRealPath("/");String ip=request.getRemoteAddr();String localip=request.getLocalAddr();//System.out.print(ip " " localip " " ip.equals(localip));String url="http://api.map.baidu.com/location/ip?ak=nZFzpfoHLDVD3pEPGaSrGCYebppWx7ge";if(!ip.equals(localip)){url ="&ip=" ip;}Document doc=Jsoup.connect(url).ignoreContentType(true).get();// System.out.println(doc.text());JSONObject jsonObj = JSON.parseObject(doc.text()); // System.out.println(jsonObj);JSONObject jsonObj1=jsonObj.getJSONObject("content").getJSONObject("address_detail");String jsonObj2=(String) jsonObj1.get("city");//獲取城市名稱// System.out.println(jsonObj2);String number= getcity(request, jsonObj2, path);// System.out.println(number);String weather=jsonObj2 ":" getweather(number);// System.out.println(weather); request.getSession().setAttribute("tf",weather);RequestDispatcher dis= request.getRequestDispatcher("session.jsp");//傳輸數據dis.forward(request,response);// }public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}//解析中國天氣網public String getweather(String bianhao) throws IOException{String url="http://www.weather.com.cn/weather/" bianhao ".shtml";Document doc=Jsoup.connect(url).get();Elements links=doc.getElementsByClass("sky skyid lv3 on");//System.out.println(links.text());return links.text();}//返回城市代碼號public String getcity(HttpServletRequest request,String city,String path) throws IOException{{String citynumber="";File file=new File(path "image/bianhao2.txt");//System.out.print(file.getAbsolutePath());citynumber=file.getAbsolutePath();//FileReader in=new FileReader(file);InputStreamReader isr = new InputStreamReader(new FileInputStream(file),"GB2312");BufferedReader buf=new BufferedReader(isr); String s="";while((s=buf.readLine())!=null){String a[]=s.split(":");//System.out.println(a[0]);if(a[0].equals(city.substring(0, city.length()-1))){ citynumber=a[1];return citynumber; } } isr.close();buf.close();//System.out.println(citynumber);return citynumber; }} }

祝君好運,一起加油。

總結

以上是生活随笔為你收集整理的java 用sevlet实现ip定位以及天气预报的功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产综合视频 | 黑人专干日本人xxxx | 91久色 | 午夜999 | 欧美不卡 | 91高清在线视频 | 免费激情| 亚洲美女在线视频 | 在线免费观看福利 | 大黑人交xxx极品hd | 99碰碰| 午夜精品久久久久久久99黑人 | 国产15页| 国产尤物av尤物在线看 | 国产精品久久 | 国内精久久久久久久久久人 | a视频在线观看免费 | 93久久精品日日躁夜夜躁欧美 | 黄色一级淫片 | 精品婷婷色一区二区三区蜜桃 | 精品一区二区三区久久 | 免费av在线网址 | 69精品无码成人久久久久久 | 日韩av网站大全 | 亚洲啊啊啊啊啊 | 日韩精品一区在线 | 九九九视频在线观看 | 国产二区在线播放 | 国产欧美一区二区三区另类精品 | 亚洲精品久久视频 | 人人澡人人看 | 色原网| 无码人妻精品一区二区蜜桃网站 | k8yy毛片 | 高h喷水荡肉少妇爽多p视频 | exo妈妈mv在线播放高清免费 | 色综合久久久无码中文字幕波多 | 高清国产视频 | jlzzjlzz亚洲日本少妇 | 色综合天天综合网天天狠天天 | 日韩成人精品视频 | 先锋资源中文字幕 | 美女被叉叉的影院 | 菲律宾黄色片 | 潘金莲三级野外 | 精品无人国产偷自产在线 | 一区二区三区四区在线 | 中文字幕在线观看的网站 | 色香天天 | 久久天天东北熟女毛茸茸 | 男男一级淫片免费播放 | 91精品国产视频 | 久久国产一级 | 性欧美bb | 影音先锋中文字幕人妻 | 欧美国产一区二区在线观看 | 91网在线播放 | 亚洲乱码视频在线观看 | 青青草手机视频在线观看 | 亚洲国产精品久久久久婷蜜芽 | 福利视频在线播放 | 六月丁香激情 | 一本久久a精品一合区久久久 | 伊人网伊人影院 | 91啪在线观看 | 奇米第四色在线 | 激情五月深爱五月 | 日韩欧美精品国产 | 欧美福利网 | 亚欧精品在线观看 | 国产午夜视频 | 国产sm主人调教女m视频 | 国产精品丝袜黑色高跟鞋的设计特点 | 欧美色婷婷 | 在线观看视频99 | 国产免费无码一区二区 | 香蕉视频亚洲一级 | 欧美精品一区二区三区三州 | 91免费视频网 | 午夜免费播放观看在线视频 | 日韩大片在线观看 | 欧美黄色一级片视频 | 国产破处视频 | 中文字幕第一 | 四虎在线视频 | av站| 黄色日本网站 | 亚洲男女| 91成人在线免费观看 | 雷电将军和丘丘人繁衍后代视频 | 久久99精品久久久久久水蜜桃 | 欧美激情精品 | 欧美日韩少妇精品 | 无码国产69精品久久久久网站 | 亚洲最新av | 天天色影综合网 | aaaaa级片| 亚色一区| 夜夜嗨av色一区二区不卡 |