目录
0 前置知识
0.1 域名
- 主机名(hostname)
- 定义
电脑 / 服务器的 “名字”(如电脑名LSL),由用户自行设置,无需注册。
- 解析逻辑
本机访问自身主机名时,系统直接读取当前网卡的局域网 IP(无需配置hosts文件);其他设备访问该主机名时,需在对方hosts文件手动配置「IP + 主机名」映射。
- 作用范围
仅本机 / 局域网内有效,与公网域名注册无关。
- 域名(Domain Name)
定义
需付费注册备案的公网 “主机名”(如taobao.com),通过全球 DNS 服务器自动解析。
解析逻辑
无需手动配置,全球设备均可访问;未注册的名字(如LSL)无法在公网解析。
核心区别
主机名是 “内部小名”,域名是 “公网合法名”,二者本质都是 “机器名字”,仅解析方式 / 使用范围不同。
示例
|
特性
|
localhost
|
普通公网域名 (如
taobao.com
)
|
|
作用
|
只指向本机
|
指向公网上的服务器
|
|
注册
|
无需注册,系统自带
|
需要付费注册备案
|
|
解析
|
固定解析为
127.0.0.1
|
通过全球 DNS 服务器解析
|
|
访问范围
|
仅限本机访问
|
全球任何设备都能访问
|
注:localhost 不是一个所有人共享的网站,而是一个 “本地专用词”,谁调用它,它就代表谁自己。
- 域名解析
本地优先
当客户端(浏览器)输入域名(如 www.boyatop.cn)时,系统会优先检查本地 hosts 文件。
- 文件路径
Windows:C:\Windows\System32\drivers\etc\hosts。Linux:/etc/hosts
- 作用
手动配置 “域名 → IP” 的映射关系,优先级高于公网 DNS。
两种情况
- 有匹配项
如果 hosts 文件中存在该域名的 IP 映射,则直接返回该 IP(如 192.168.110.1)。
- 无匹配项
如果 hosts 文件中没有,则通过互联网连接到电信/ 联通等运营商的 DNS 服务器。
运营商的 DNS 服务器会去全球 DNS 网络里,找到 www.boyatop.cn 对应的公网 IP(比如 14.215.177.38),然后返回给你的电脑。
浏览器发起请求
拿到 IP 后,浏览器就会向这个 IP 对应的服务器发起 HTTP 请求,获取网页内容。
验证
如果在C:\Windows\System32\drivers\etc\hosts里面,把百度的ip地址改为127.0.0.1,此时在浏览器访问www.baidu.com就无法正常显示页面。
- 一级域名 vs 二级域名
以 boyatop.cn 为例:
一级域名(顶级域名)
boyatop.cn
这是你花钱从阿里云 / 腾讯云等服务商购买的 “根域名”,是所有子域名的基础。
二级域名
www.boyatop.cn、api.boyatop.cn、m.boyatop.cn
这些是在一级域名基础上 “加前缀” 的子域名,不需要额外购买,只需要在域名服务商的后台做 “DNS 解析” 配置。
DNS 解析配置示例
- @.boyatop.cn → 解析到 111.206.244.146(这是一级域名本身的 IP,@代表空,即地址栏直接输入boyatop.cn)
- www.boyatop.cn → 解析到 111.206.244.146(这是二级域名的 IP)
- JavaWeb 里的 IP + 端口 vs 域名访问
IP + 端口
比如 192.168.1.100:8080
这是最底层的访问方式,直接告诉浏览器去哪个 IP 的哪个端口找服务。
域名访问
比如 www.boyatop.cn
这是对用户友好的方式,背后还是要先解析成 IP,再加上默认端口(HTTP 默认 80,HTTPS 默认 443)。
如果你在服务器上把服务跑在 80 端口,就可以直接用 www.boyatop.cn 访问,不用加端口号。
0.2 InetAddress
在JDK中提供了一个与IP地址相关的InetAddress类,该类用于封装一个IP地址,并提供了一系列与IP地址相关的方法。
- InetAddress getByName(String host)
- 核心功能
根据传入的「主机标识」,获取对应的 IP 地址封装对象(InetAddress)。
- host 参数支持的类型
主机名(如LSL、localhost);
域名(如taobao.com、boyatop.cn);
IP 地址字符串(如172.16.110.200、127.0.0.1)。
- 解析逻辑
优先查本地 hosts 文件 → 再查局域网 / 公网 DNS → 返回对应 IP 的 InetAddress 对象。
- 示例
InetAddress.getByName("LSL") → 返回你电脑 IP(172.16.110.200)的封装对象。
- InetAddress getLocalHost()
- 核心功能
获取「当前运行代码的本机」的 InetAddress 对象(固定指向本机)。
- 无参数
无需传入任何值,直接返回本机 IP + 主机名的封装对象。
- 示例
InetAddress.getLocalHost() → 直接返回你电脑(LSL)的 InetAddress 对象。
- String getHostName()
- 核心功能
从 InetAddress 对象中,获取该 IP 对应的「主机名 / 域名」。
- 调用前提
必须先有 InetAddress 对象(如通过 getByName/getLocalHost获取)。
- 示例
InetAddress addr = InetAddress.getByName("taobao.com");
addr.getHostName(); // 返回"taobao.com"(该IP对应的域名)
- boolean isReachable(int timeout)
- 核心功能
检测该 InetAddress 对象对应的 IP 是否可访问(网络连通性)。
- timeout 参数
超时时间(毫秒),超过该时间未连通则返回 false。
- 场景
用于判断目标主机是否在线、网络是否通畅。
- 示例
InetAddress addr = InetAddress.getByName("localhost");
addr.isReachable(3000); // 3秒内检测本机是否可访问,返回true
- String getHostAddress()
- 核心功能
从 InetAddress 对象中,提取纯字符串格式的 IP 地址(仅返回 IP,无主机名)。
- 无歧义说明
无论传入的是主机名 / 域名 / IP,最终都返回对应的原始 IP 字符串。
- 示例
InetAddress addr = InetAddress.getByName("LSL");
addr.getHostAddress(); // 返回"172.16.110.200"(纯IP字符串)
0.3 搭建外网环境(公网访问)
要让别人从外网访问你的项目,需要这几步:
- 有公网 IP
你的服务器需要有一个能被外网访问的 IP(可以从云服务商购买,比如阿里云 ECS)。
- 购买一级域名
比如 boyatop.cn。
- 配置 DNS 解析
在域名服务商后台,把 www.boyatop.cn 解析到你的公网 IP。
- 启动服务
在服务器上启动你的 JavaWeb 项目,监听 80 或 443 端口。
- 外网访问
别人在浏览器输入 www.boyatop.cn,就能访问到你的项目了。
1136

被折叠的 条评论
为什么被折叠?



