一、前言
此次培训,是为期三天的网上培训。最终的目的是制作出疫情地图。首先我们来看看主要的讲课内容大纲。
|-Java语法学习(个人感觉讲得还可以,主要围绕本次培训作出的讲解,没有像网上的基础课程那样,长篇大论,有基础的童鞋可以看看复习一下的)
|-游戏化内存分析(印象中是拿了植物大战僵尸这个单机游戏来讲解的,通过抓包的形式,给我们介绍了太阳【这个游戏的游戏金币】在程序开发中就是一个变量)
|-制作自动关机程序
|-IDEA的使用(竟然在培训班中奖了,今天就来个IDEA写程序)
|-网络资源定位详解
|-疫情数据分析读取
|-对话图灵机器人
|-手机短信发送
|-疫情地图展示
|-阿里云服务器搭建
|-微信公众号入口
二、IDEA的使用
1、首先,我们到IDEA官网注册账号,然后下载我们的IDEA。这步我们跳过吧,官网虽然英文居多,但是我们可以用谷歌浏览器的自带翻译功能辅助,也相信各位童鞋能下载下来。
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(网址进行解释)
https://www.cnblogs.com/raoqinglong/p/13056439.html
该网址传输协议是https协议,访问时会自动寻址443,域名为www.cnblogs.com,虚拟路径raoqinglong/p/13056439
很多人就问:为什么上面的没有参数内容?因为我们要向服务器发送参数才需要的。像上面的URL一样,我们只是去读取,去调用而言,没有要上传的意思
https://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这个网址就是https://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("https://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转换网站,转换“更多产品”的乱码看看
我们把上面的百度地址换成我们的https://zaixianke.com/yq/all,在这个网址我们可以获取疫情的实时数据
五、对话图灵机器人
原理跟我们获取疫情数据很相似
首先我们要拿到智能机器人API
服务器地址: https://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("https://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服务器地址: https://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("https://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); } }