日韩性视频-久久久蜜桃-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定位以及天气预报的功能的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: free性满足hd国产精品久 | 天堂网一区二区 | 亚洲成人黄色网 | 久久久综合网 | 91精品一区二区三区在线观看 | 亚洲六月婷婷 | 嫩嫩av| 狠狠操夜夜 | 一区二区欧美日韩 | 97视频资源 | 亚洲日本成人在线观看 | 午夜国产在线观看 | 国产一区二区三区三州 | 亚洲一区免费在线观看 | 国产ts人妖系列高潮 | 午夜影音 | 91插插插影库永久免费 | 无码国产69精品久久久久同性 | 亚洲v国产v欧美v久久久久久 | 午夜刺激视频 | 久久爱综合 | 成人激情电影在线观看 | 免费在线观看黄色片 | 成人免费av在线 | 久久久久久伊人 | 黑帮大佬和我的三百六十五天 | 中文字幕精品一区二区三区视频 | 日批视频免费在线观看 | 国产一区啪啪 | 二区国产 | 四虎www| 一区二区三区www污污污网站 | 国产专区第一页 | 国产免费午夜 | 999精品视频在线观看 | 99久久久无码国产精品不卡 | 欧美日韩国产二区 | 精品中文字幕一区二区三区 | 妖精视频一区二区三区 | 欧洲金发美女大战黑人 | 肌肉猛男裸体gay网站免费 | 国产三区在线视频 | 在线观看亚洲专区 | 亚洲成人激情av | www.超碰 | 五月综合在线 | 成人动漫久久 | 在线观看一区 | 亚洲污视频 | 青青国产精品 | 国产青青在线 | 能免费看av的网站 | 调教少妇视频 | 91在线无精精品一区二区 | 午夜av在线播放 | 国产高清一级片 | 就爱操av| 欧美啪啪小视频 | 偷拍亚洲视频 | 极品少妇在线观看 | 国产在线视频在线观看 | 国产91熟女高潮一区二区 | 国产欧美一区二区三区精品酒店 | 欧美视频在线看 | 日本男人天堂网 | 久久久久久日产精品 | 中文字幕第九页 | 欧美视频在线观看一区 | 国产又爽又黄游戏 | 奇米视频在线观看 | 青青青草视频在线观看 | 五月天婷婷伊人 | 成人午夜大片 | 人人干人人模 | 亚洲深夜福利视频 | 麻豆高清免费国产一区 | 亚洲一区二区三区观看 | 日韩性生活大片 | 日本精品一区二区三区四区的功能 | 久久久久久无码午夜精品直播 | 国产午夜精品一区二区三区欧美 | 另类激情综合 | jiz亚洲| 丁香亚洲| 无码丰满熟妇 | www.蜜桃av| 亚洲天堂爱爱 | 美女视频一区二区 | 高清日韩av | 在线一区二区三区四区 | 国产伦精品一区二区三区免费视频 | 自拍偷拍视频网站 | 日韩欧美第一区 | 久久99国产视频 | 人妻少妇精品无码专区二区 | 成人久久 | 日本午夜精品 | 久久激情网站 | www.777含羞草|