­

Java培训Day02——制作疫情地图(一)

一、前言

此次培训,是为期三天的网上培训。最终的目的是制作出疫情地图。首先我们来看看主要的讲课内容大纲。

  Day1

    |-Java语法学习(个人感觉讲得还可以,主要围绕本次培训作出的讲解,没有像网上的基础课程那样,长篇大论,有基础的童鞋可以看看复习一下的)

    |-游戏化内存分析(印象中是拿了植物大战僵尸这个单机游戏来讲解的,通过抓包的形式,给我们介绍了太阳【这个游戏的游戏金币】在程序开发中就是一个变量)

    |-制作自动关机程序

  Day2

    |-IDEA的使用(竟然在培训班中奖了,今天就来个IDEA写程序)

    |-网络资源定位详解

    |-疫情数据分析读取

    |-对话图灵机器人

    |-手机短信发送

  Day3

    |-疫情地图展示

    |-阿里云服务器搭建

    |-微信公众号入口

 

二、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(网址进行解释)

//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);


    }

}

 

Tags: