Java培訓Day02——製作疫情地圖(一)
一、前言
此次培訓,是為期三天的網上培訓。最終的目的是製作出疫情地圖。首先我們來看看主要的講課內容大綱。
|-Java語法學習(個人感覺講得還可以,主要圍繞本次培訓作出的講解,沒有像網上的基礎課程那樣,長篇大論,有基礎的童鞋可以看看複習一下的)
|-遊戲化記憶體分析(印象中是拿了植物大戰殭屍這個單機遊戲來講解的,通過抓包的形式,給我們介紹了太陽【這個遊戲的遊戲金幣】在程式開發中就是一個變數)
|-製作自動關機程式
|-IDEA的使用(竟然在培訓班中獎了,今天就來個IDEA寫程式)
|-網路資源定位詳解
|-疫情數據分析讀取
|-對話圖靈機器人
|-手機簡訊發送
Day3
|-疫情地圖展示
|-阿里雲伺服器搭建
|-微信公眾號入口
二、IDEA的使用
1、首先,我們到IDEA官網註冊帳號,然後下載我們的IDEA。這步我們跳過吧,官網雖然英文居多,但是我們可以用Google瀏覽器的自帶翻譯功能輔助,也相信各位童鞋能下載下來。
2、我們的安裝包下載後,也是傻瓜式安裝,基本就是先選路徑,然後選運行的JDK位數(我們1.7以後好像都是64位了,所以選擇64位),然後選安裝的插件,完成後,差不多就是登陸激活的帳號密碼(帳號密碼誰都可以註冊,重要的是我們要有激活碼激活的帳號)
3、安裝好後,我們就先來寫個HelloWorld(這裡說一下IDEA和VScode的一個特點:前一次關閉軟體的介面,這一次打開會顯示那個介面)
|-我們選擇:File→New→Project
|-新建空項目
|-下一步,然後點finish(完成)
|-這個新版本,會在點擊完成項目後,提示你是在當前項目同一窗口展示,還是新窗口展示,我們這裡試試點New Window
|-點擊New Window後會新建一個新窗口和一個新的彈窗Modules,我們點擊Modules選項上的「+」,然後點擊New Module,會有一個新彈窗
|-IDEA真的越來越完善,這一步以前的要手動選JDK的安裝路徑,我們這裡新版本,只要打開後,點擊JAVA,點擊Module SDK的下拉框,會提示你之前在環境變數配好的Java1.8的
|-選擇好JDK後,我們點下面Next,到這一步,我們修改一下Module Name,然後點Finish就完成配置了
|-然後上一個彈窗,就出現了配置好的一些數據,我們直接點下面的OK就可以了
|-到上面為止,我們只創建了項目的工程文件,class還沒創建的
|-接著我們要去新建一個類,在我們eclipse新建類的時候,我們有新建包這個操作,而在我們IDEA中,這一操作我們分開來,先新建包,然後新建類
|-這裡,我們新建好類後,我們寫個HelloWorld來學習一下
|-好的,沒有問題,接下來,我們看看我們的class文件現在保存到哪裡了,我們可以看一下Hello頭頂上的E盤路徑
|-又是新版本更新的功能,我們直接點開上面鏈接,會有一個彈窗,我們直接點到我們包創建的最後
|-好了,我們目前為止,基本的IDEA的基本操作就完成了,下面我們回顧一下上述操作
①創建一個空項目(sendmessage)
②創建一個新模組(sendmessage)
③在sendmessage模組下的Src下創建一個包(com.baidu.CionDa.SendMessage)
④在com.baidu.CionDa.SendMessage包下新建一個類(SendMessage)
⑤在SendMessage類中寫程式碼
⑥在idea中執行程式
|-然後我們看看IDEA中項目結構:
項目project ->模組 ->包 ->java文件
|-接著我們了解一下基本的IDEA操作
|-眼神不好,修改字體:File -> Setting ->Font ->Size(修改16-20基本OK)
|-IDEA中的快捷鍵
|-psvm回車產生public static void main(String[] args){}方法
|-sout回車產生System.out.println();
|-Ctrl+Alt+Space(空格鍵)我們可以通過這個快捷鍵實現:內容提示,程式碼補全等
|-注釋:
單行:選中程式碼,Ctrl+/,再來一次就是取消單行注釋
多行:選中程式碼,Ctrl+Shift+/,再來一次就是取消多行注釋
|-格式化:Ctrl+Alt+L
|-IDEA中模組操作
新建模組(首先,我們的新建模組在前面內容已經涉及到,我們這裡跳過)
刪除模組(模組只在IDEA刪除,在原先的保存路徑並沒有刪除,若要徹底刪除,需要自行前往保存路徑刪除)
導入模組
刪除模組:
導入模組
三、網路資源定位詳解
網路資源又叫URL(統一資源定位符Uniform Resource Locator),通俗地講就是我們的網址
在萬維網上(world wide web) 每一個資訊和資源都有統一且唯一的地址
|-網址的組成部分:
通訊協議://域名:埠號/虛擬路徑?參數列表#錨點
|-通訊協議:
傳輸速率控制(通訊過程中,端與端的傳輸速度);
傳輸編碼控制(通訊過程中,端與端的交流要讀得懂,若我講日語,你聽不懂,那就沒辦法交流下去了);
出錯控制(通訊過程中,端與端之間要是因為網路,人為等原因會中斷通訊)等
|-域名:ip地址的別名
ip地址:是電腦在互聯網中的唯一表示 (公網ip)
|-埠號:
範圍:0-65535之間
http協議訪問時,可以忽略埠號,自動尋找80
https協議訪問時,可以忽略埠號,自動尋找443
|-參數列表(重要):
訪問網路時,給伺服器發送的參數內容.
參數列表由多個參數組成, 參數與參數之間使用&連接
每一個參數又由參數名稱和參數內容組成, 名稱與內容之間使用=號連接
對下面URL(網址進行解釋)
//www.cnblogs.com/raoqinglong/p/13056439.html
該網址傳輸協議是https協議,訪問時會自動定址443,域名為www.cnblogs.com,虛擬路徑raoqinglong/p/13056439
很多人就問:為什麼上面的沒有參數內容?因為我們要向伺服器發送參數才需要的。像上面的URL一樣,我們只是去讀取,去調用而言,沒有要上傳的意思
//account.cnblogs.com/signup?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F
而這個網址是同一個網址的,我們部落格園的註冊地址,這個?後面的就是我們的參數,參數名是returnUrl,參數內容就是https%3A%2F%2Fwww.cnblogs.com%2F
我們可能看不懂這個參數內容,沒關係,我們去解析一下,百度搜索UTF-8在線轉換,你就會得到解析上面https%3A%2F%2Fwww.cnblogs.com%2F這個網址就是//www.cnblogs.com/
|-錨點:
一般在一些購物網站,篇幅比較長,還有模組化的頁面用到,用於快速跳轉到同一頁面的不同標題/模組下。例如我的博文在電腦上看
但是很可惜,不太完善,不會跳標題,有點小尷尬。然後,對於URL的解釋分析,就到這裡了
四、疫情數據分析讀取
在讀取疫情數據前,我們先去學習一下JAVA是怎樣讀取URL的
下面有要標準的使用流程
標準使用流程: //1. 創建一個URL類的對象url URL url = new URL("網址"); //2. 通過URL類的對象url打開網路連接 , 並得到連接對象conn URLConnection conn = url.openConnection(); //3. 通過連接對象 , 得到用於讀取網頁內容的輸入流 is InputStream is = conn.getInputStream(); //4. 將上述的位元組流is 裝飾為字元流 , 將字元流再裝飾為一次能讀取一行的字元流br BufferedReader br = new BufferedReader(new InputStreamReader(is)); //若我們的讀取字元亂碼,我們可以把4換成下面這一句 BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8")); //5. 通過字元流br,讀取一行內容,並將內容存儲到變數text中 String text = br.readLine(); //6. 可以將讀取到的內容text 輸出顯示到控制台 System.out.println(text);
編寫完上面程式碼,通常數據類型的位置會出現紅線 (需要導包) 解決方案:滑鼠懸停在紅線位置,點擊要導入的包即可。
本節任務需要導入的包:
1. java.io.xxx
2. java.net.xxx
3. java.util.xxx
導完包後,還會出現紅線,我們需要拋出異常
我們來一個讀取百度首頁的程式碼:
package com.baidu.cionda.readbaidu; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class ReadBaidu { public static void main(String[] args) throws IOException { //1. 創建一個URL類的對象url URL url = new URL("//www.baidu.com"); //2. 通過URL類的對象url打開網路連接 , 並得到連接對象conn URLConnection conn = url.openConnection(); //3. 通過連接對象 , 得到用於讀取網頁內容的輸入流 is InputStream is = conn.getInputStream(); //4. 將上述的位元組流is 裝飾為字元流 , 將字元流再裝飾為一次能讀取一行的字元流br BufferedReader br = new BufferedReader(new InputStreamReader(is)); //若我們的讀取字元亂碼,我們可以把4換成下面這一句 //BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); //5. 通過字元流br,讀取一行內容,並將內容存儲到變數text中 //我們這裡來讀取四行看看 String text1 = br.readLine(); String text2 = br.readLine(); String text3 = br.readLine(); String text4 = br.readLine(); //6. 可以將讀取到的內容text 輸出顯示到控制台 System.out.println(text1); System.out.println(text2); System.out.println(text3); System.out.println(text4); } } /* |-注釋: 單行:選中程式碼,Ctrl+/,再來一次就是取消單行注釋 多行:選中程式碼,Ctrl+Shift+/,再來一次就是取消多行注釋 |-格式化:Ctrl+Alt+L |-拋出異常:Alt+Shift+Enter |-IDEA中模組操作 新建模組(首先,我們的新建模組在前面內容已經涉及到,我們這裡跳過) 刪除模組(模組只在IDEA刪除,在原先的保存路徑並沒有刪除,若要徹底刪除,需要自行前往保存路徑刪除) 導入模組*/
在IDEA我們居然沒亂碼,要是我們移植到Eclipse就不一樣了,上才藝:
為什麼會這樣呢,就是我們上面提到的UTF-8,我們不同公司的開發項目和使用編碼不同,但是UTF-8是我們通用的國際編碼,裡面包含了中文和英文等國際語言,我們也可以通過上面UTF-8轉換網站,轉換「更多產品」的亂碼看看
我們把上面的百度地址換成我們的//zaixianke.com/yq/all,在這個網址我們可以獲取疫情的實時數據
五、對話圖靈機器人
原理跟我們獲取疫情數據很相似
首先我們要拿到智慧機器人API
伺服器地址: //api.jisuapi.com/iqa/query
參數列表 appkey:秘鑰,值為:62958a3a6ef3c56d
question:與智慧機器人的聊天內容 ,例如:北京天氣
使用方式:
那在我們的程式碼怎麼玩呢?上才藝
package com.CionDa.readbaidu; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; public class ReadBaidu { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub //定義appkey變數 String appkey = "62958a3a6ef3c56d"; //我們的編譯器是Eclipse的話,不能直接發中文,所以要轉UTF-8 String para = URLEncoder.encode("講個笑話","UTF-8"); //1. 創建一個URL類的對象url URL url = new URL("//api.jisuapi.com/iqa/query?appkey="+appkey+"&question="+para); //2. 通過URL類的對象url打開網路連接 , 並得到連接對象conn URLConnection conn = url.openConnection(); //3. 通過連接對象 , 得到用於讀取網頁內容的輸入流 is InputStream is = conn.getInputStream(); //4. 將上述的位元組流is 裝飾為字元流 , 將字元流再裝飾為一次能讀取一行的字元流br //BufferedReader br = new BufferedReader(new InputStreamReader(is)); //若我們的讀取字元亂碼,我們可以把4換成下面這一句 BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); //5. 通過字元流br,讀取一行內容,並將內容存儲到變數text中 //我們這裡來讀取四行看看 String text1 = br.readLine(); //6. 可以將讀取到的內容text 輸出顯示到控制台 System.out.println(text1); } }
|-亂碼處理 :讀取伺服器數據亂碼處理
電腦存儲的都是數字 編碼表:ASCII 65:A 66:B 67:C 97:a 簡體中文國標系列編碼: GBK GB2312 GB18030 UTF-8 unicode 處理的程式碼如下: //在is裝飾為字元流時,指定字符集UTF-8 BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
參數亂碼的處理
將發送給伺服器的中文進行URL編碼即可 URL編碼: 將中文轉換為%+英文字母+阿拉伯數字 String para = URLEncoder.encode("中文文字","UTF-8");
六、手機簡訊發送
簡訊API 簡訊API伺服器地址: //api.jisuapi.com/sms/send
參數列表
appkey:秘鑰,值為:62958a3a6ef3c56d
mobile:接收驗證碼的手機號
content:簡訊內容,必須使用提供的模板,模板中能修改的只有六位驗證碼,模板如下:
恭喜你,作業已完成!驗證碼是:666666。如非本人操作,請忽略本簡訊!【開課吧新職課】
具體使用與上面控制圖靈機器人類似,我們來直接上程式碼
package com.CionDa.sendmessage; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.Scanner; public class SendMessage { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub int identifyingcode = (int) ((Math.random()*9+1)*100000); String para = URLEncoder.encode("恭喜你,作業已完成!驗證碼是:"+identifyingcode+"。如非本人操作,請忽略本簡訊!【開課吧新職課】","UTF-8"); String appkey ="62958a3a6ef3c56d"; System.out.println("請輸入手機號:"); Scanner input = new Scanner(System.in); String moblie = input.nextLine(); //1. 創建一個URL類的對象url URL url = new URL("//api.jisuapi.com/sms/send?appkey="+appkey+"&mobile="+moblie+"&content="+para); //2. 通過URL類的對象url打開網路連接 , 並得到連接對象conn URLConnection conn = url.openConnection(); //3. 通過連接對象 , 得到用於讀取網頁內容的輸入流 is InputStream is = conn.getInputStream(); //4. 將上述的位元組流is 裝飾為字元流 , 將字元流再裝飾為一次能讀取一行的字元流br BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8")); //5. 通過字元流br,讀取一行內容,並將內容存儲到變數text中 String text = br.readLine(); //6. 可以將讀取到的內容text 輸出顯示到控制台 System.out.println(text); } }