在解决问题的时候,我们往往寻找的是最合适的方法,最效率的方式.
Java可以做很多东西,可以开发win系统的软件,可以开发单片机,也可以开发网站的后端,前端,可以做人工智能运算,可以做大数据处理等等.
这里教你的是应用最广的Java Web后端开发,包括浏览器网页的后端,手机应用的后端,电脑软件的后端,总之就是用户在各种机器,设备上看到的内容,资料,电影,图片,都是客户端从后端的服务器获取的.后端的服务器运行的程序提供这些接口给客户端调用.
电子设备访问服务器的过程
如下图所示,用户通过各种软件应用访问互联网,通过网络地址,域名链接等找到后端服务器的接口层总入口(API总网关),后端服务器中运行的各种服务层程序,将资源层的数据,文件,图片,视频等返回给用户.
普通程序员只需要开发服务层的服务.我们学的Java语言,所以就用Java开发.随着你的技能掌握的越多你能做的就越多.
也有些定位不同,有些人更关注硬件服务器,资源层的维护,有些人关注整体架构,有些人关注代码业务.
域名网址URL
URL是Uniform Resource Location的缩写,译为“统一资源定位符”。我们最常见的使用浏览器访问网站.
第一和第二部分是必须的.第三部分如果没有的话,默认就是网站地址的首页.
https和http的区别
首先https比http安全很多.现在很多网站默认都会从http跳转到https协议.比如:
http://github.com #浏览器访问这个网址,总是会重定向到如下网址.
https://github.com
IP地址
IP地址就是你电脑或者服务器等设备在互联中的地址,类似于你的家庭地址一样,是唯一的,可以收快递的地址.现在有IPv4和IPv6两个版本.因为IPv4不够用了,所以它扩容了.我们平时开发用IPv4就够了.
计算机的世界是0,1组成的二进制表示.在硬件底层是二进制进行计算的.
IP地址(IPv4)由32位二进制数组成,分为4段(4个字节),每一段为8位二进制数(1个字节),每一段8位二进制,中间使用英文的标点符号“.”隔开.日常使用中为了便于记忆和识别,转换成十进制表示.
IP的范围是: 0255.0255.0255.0255
查看自己的IP: 13x.22x.8x.20x
你的IP和你的地区有关,这个和手机号码一样,可以区分是哪个国家哪个省份城市的.
域名
刚刚我们说到日常使用中用十进制表示IP地址,方便记忆.
同样的,在平时访问网站的时候,如果用IP,简直会逼疯人,就跟现实中,别人问你收快递的地址,你告诉他你家的经度和纬度.
比如我们访问淘宝网购物的时候,浏览器中显示的内容,都是访问域名,然后解析成IP,然后到那个IP的服务器获取图片,文字,各种商品内容.
打开命令行,输入:
ping www.taobao.com #该IP有时候是变换的,因为服务器可能会更换.
有些系统或工具会一直保持ping的状态,使用快捷键结束.(Ctrl/Command + c) (window用Ctrl,mac用Command键)
说明: ping命令用来验证和域名/IP之间的连接是否正常.我们看到那里有时间=12ms,16ms.这表明你从自己电脑到该IP来回花费的时间.
端口
上面淘宝网站的IP地址对应的服务器,就像售票大厅一样.它有很多个售票窗口,如果窗口关了,那你就得换个窗口买票.
网络服务器一般为http开放80端口,为https开放443端口,你可以去这个服务器的80,443端口获取网站内容.
http://www.taobao.com:80 #http默认是80端口,浏览器会不显示它
https://www.taobao.com:443 #https默认是443端口,浏览器会不显示它
端口一般用到的是1到65535,其中1-1023为系统端口,自己开发调试的时候用1024以上的.
域名和IP的替换
底层原理实现有些不同,导致ping域名有些请求超时.
而用域名直接替换IP有些不能访问.
http://218.98.30.235:80 #淘宝网站不能这样替换.
http://13.250.177.223:80 #github网站可以访问,并重定向.
网络访问的逻辑
当你访问网络上的资源,实际上做的过程大概是这样的:
- 你在家附近的网络里询问大家,知道www.taobao.com的IP是啥吗?知道的话,告诉我.
- 你的网络里有个负责查看这个域名的服务器叫做DNS(这是区级别的),它就从数据仓库里找,如果找到IP就告诉你,如果没有找到,就跑到更高级别的DNS服务器(城市级别的),如果有就返回,没有就跑到省级别的,一直到国际顶级DNS级别.最终返回IP
- 如果没有找到,就访问失败.如果找到,就去对应IP的端口请求数据.
- 这个过程中,你的请求中带有自己的IP,通过中间的路由到达目的地IP服务器.
- 目的地IP服务器,确认你的请求后,又通过中间的路由发送数据到你的IP电脑上.
- 路由就跟快递站点一样.先把你的快递发送到最近的快递站,然后发送到城市级别的快递总站,快递总站发货到目的地省份,城市的快递总站,然后再到目的地附近的快递站点,最后送到你家.
开发中常用的IP
测试自己开发的服务项目时,都是通过下面的ip+端口号访问的.
127.0.0.1 #回环地址,可以简单理解成访问自己的电脑
localhost #默认本地自己的电脑
一个最简单的Java Web项目
1.注册账号
注册一下https://github.com和https://gitee.com.一般大家开源的代码都在这里.你自己的代码也会放在这里.
公司的代码一般会自己搭建代码服务器.只是IP或者域名不同,代码管理逻辑都是通过git,都一样.
2.获取教程Github开源地址
扫码最下方小程序(或者搜索 “Java一浅一深” ), 点击复制github开源地址.
3.获取easy-java项目地址
3.1打开浏览器,输入/粘贴上一步复制的github开源地址
3.2选择easy-java项目
3.3点击Star,关注项目更新.
3.4点击Clone or download
3.5点击复制项目的链接
4.下载项目
打开git Bash/Terminal终端,输入:
cd ~/IdeaProjects/ #定位当前路径到IDEA开发工具的默认项目路径下
pwd #查看当前路径,不同的操作系统,路径不同.下面要用.
下载GitHub的项目,输入:
git clone https://github.com/XXX替换复制的路径XXX/easy-java.git #这里git clone 后面的路径为刚刚复制的路径
以后github项目代码更新了,需要使用git pull命令.
cd ~/IdeaProjects/项目名称 #这里项目名称为easy-java
git pull #从github上拉取最新的代码.
5.使用IDEA打开项目
打开IDEA软件.
5.1 点击File --> open…
5.2 找到项目的路径(该项目路径是你刚刚下载项目的地址,pwd查看。和我的不一样。)
5.3 选中pom.xml文件
5.4 OK
5.5 Open as Project
5.6 可能弹出下面对话框,选择’New Window’.
6.启动easy-java项目
6.1 等待几分钟,下载项目的依赖,插件等.
6.2 等待下载完成,依次点击包路径src->main->java->github->brad->easy->a004
右键WhatJavaCanDoApplication -> Run (所有程序的入口都是从Main开始的)
(如果报错: Error: java: 错误: 不支持发行版本5 , 请认真阅读之前的文章.)
6.3 如下图,启动了一个Java Web 程序,对外提供数据服务接口.
1).Java项目程序从操作系统申请了内存空间等各种资源,作为一个软件进程启动了. 对应的进程PID是每次启动动态生成的,在系统里是唯一的,就跟身份证号码一样.
- 同时申请了端口, 8080端口. 从外面访问这个服务进程的数据,需要通过端口.这个服务进程是由Tomcat应用服务器提供的,你可以理解成售票厅的售票员,你在窗口提出来的购票需求,都是售票员去进行协调查询给你反馈结果的.我们的应用服务器有好几种,常见的开源服务器软件还有Jetty,Nginx,Apache等.
3).启动这个Tomcat Web Server进程花费了3秒.其中JVM启动了接近4秒.
这里的Tomcat是Java代码开发的,需要依赖JVM来启动,所以在加载JVM虚拟机后,再加载Tomcat容器.
启动时间和你代码的启动的复杂程度有关.
7.What Java Can Do ?
打开浏览器,在浏览器中输入如下链接.请求得到服务器的响应,返回数据.一步一步操作感受下.
http://localhost:8080/title #获取一篇文章的标题 --字符串类型(String)
http://localhost:8080/content #获取一篇文章的内容 --字符串类型(String)
http://localhost:8080/time #获取一个事情的时间日期 -- 日期类型
http://localhost:8080/int # 获取当前天气的温度数据 -- 整型(int)
http://localhost:8080/string #获取用户的个人信息数据 --字符串类型(String)
http://localhost:8080/double #获取账户的余额 -- 双精度浮点数类型 (double),可以理解成是小数.
http://localhost:8080/boolean # 判断账户余额是否有钱买房?是还是否 -- 布尔类型(boolean)
http://localhost:8080/list # 获取银行排队的人数 -- 数组 (String[]),后面会解释.
http://localhost:8080/img # 获取一张图片的地址,并在浏览器中访问 -- url链接
http://localhost:8080/html #获取一个网页的地址,并在浏览器中访问 --url链接,网页有基本的功能.
对应的在IDEA的控制台打印出如下图的内容.真实开发就是比这些稍微复杂一点,多一些请求参数,多一点业务逻辑,多一些技术技巧等.
在控制台使用System.out.println打印这些内容,记录接口访问的记录.在线上的生产环境是用Log日志记录的.后面会讲.
打印这些内容,是为了分析统计,或者出现意外的时候进行排查错误.以后会讲.
该项目的技术用法这里暂时不用记,其它内容需要记忆,这些概念,比如进程PID,服务器容器Tomcat,端口号概念,URL请求接口,请求响应的概念等.
扫码关注小程序,进群讨论提问,获取源代码.获得最新更新,关注下方公众号.
本文版权归作者所有,欢迎转载,但未经作者同意, 必须保留小程序和二维码,且在文章首行位置标注如下转载说明:
文章转载自 “原文链接URL”, 作者: 柳五苏世_Brad