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

    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);
    
    
        }
    
    }
  • 相关阅读:
    SpringBoot Shiro 配置自定义密码加密器
    SpringBoot Druid 配置详解
    UOJ #164. 【清华集训2015】V | 线段树
    BZOJ 4552 [Tjoi2016&Heoi2016]排序 | 二分答案 线段树
    51nod 1462 树据结构 | 树链剖分 矩阵乘法
    BZOJ 3503 [CQOI2014]和谐矩阵
    BZOJ 4004 [JLOI2015]装备购买 | 线性基
    BZOJ 4785 [Zjoi2017]树状数组 | 二维线段树
    LOJ #2145. 「SHOI2017」分手是祝愿
    LOJ #2141. 「SHOI2017」期末考试
  • 原文地址:https://www.cnblogs.com/Cion-Da/p/13055146.html
Copyright © 2020-2023  润新知