前言
学习 WEB 技术的第一个任务就是学会自己创建虚拟主机,并尝试访问网络服务器文件。本篇为使用 NetBeans 软件配置 Apache Tomcat 虚拟机的学习记录。
环境搭建
首先我们需要在 Java 环境下运行 NetBeans,我们先下载并安装 Java SE Development Kit。打开甲骨文官网,选择适合你电脑的版本进行下载:
下载地址:https://www.oracle.com/java/technologies/downloads/
Windows 系统和 MacOS 系统建议下载 Installer 一键安装!

接下来 installer 只需要一直点 next 即可,如果不是下载 installer 的,你可能需要添加系统变量。
接下来我们安装 NetBeans,进入官网下载:
下载地址:https://netbeans.apache.org/download/nb16/

我们同样选择适合自己电脑的版本下载安装。安装过程非常简单,这里就省略。
接着我们还需要下载 Apache Tomcat 作为服务器。进入 Tomcat 官网,选择 Tomcat 8 以上的任何一个版本即可,点击 Download。

我们以 Tomcat 8 为例,我们点击 download 后进入下载页,找到适合我们系统的进行下载:
一般来说:Windows 系统选择 64-bit Windows zip 文件即可,MacOS/Linux 选择 zip 文件即可。

下载好后,我们将其解压到一个没有中文和特殊字符的目录下。
接下来我们在 NetBeans 里配置 Tomcat,首先打开 NetBeans,点击菜单上的 Window,找到 servers,然后右键 add server:

接下来我们选择第一个,服务器为 Tomcat。经过一段时间的自动寻找,然后我们在这个 Server Location 旁边点击 browse,选择我们解压好的 Tomcat 文件夹。然后再下方的 username 和 password 处填写自己随意定义的用户名与密码。

我们运行好了以后对着我们的服务器右键(或双击),点击 start。没有报错的话我们的 Tomcat 就已经配置完成了。我们打开浏览器,输入 http://localhost:8080,如果出现如下网页,则配置成功。

可能出现的问题有下面几种:
- Starting failed, 8080 port is in used.
说明 8080 端口被占用了,检查 NetBeans 中 Tomcat 是否已经 stop 或是哪个程序占用了端口。对于 Windows 系统,我们可以在命令行中输入:netstat -ano可以找到所有占用的端口,找到占用 8080 端口的程序 PID,把它杀掉即可。我们再输入命令:taskkill /f /pid PID(PID 处填刚才找到的 PID),操作后即可解除端口占用。

对于 MacOS/Linux 系统,操作更加简单,只需要在终端输入:sudo lsof -i tcp:8080 找到 PID,接下来执行:sudo kill -9 PID 杀掉即可。
- Tomcat with the same Catalina home folder is already been registered.
这里是说 Tomcat 的 Catalina 目录已经被注册过了,我们只需要更改路径即可。你可以复制原文件夹到一个新文件夹,改变了路径重试。 - 【MAC】Starting failed, check whether #path.sh and scripts was executable.
这个可能是因为 MacOS 系统的权限限制,我们需要给它提升权限。我们先找到报错的那个 sh 文件路径,在终端中输入:chmod 777 #path.sh。执行后我们直接把文件路径在命令行中打一遍回车即可。
配置虚拟主机
我们已经成功搭建好了 Tomcat 服务器,接下来我们尝试搭建 Tomcat 虚拟主机。但在这之前,先了解一下 Tomcat 的一些基本概念。
Tomcat 基本概念
Tomcat 是常见的免费的 web 服务器,我们可以通过 Tomcat 服务器搭建虚拟主机。
虚拟主机
虚拟主机(virtual host)就是一个虚拟的网站托管主机。一个 tomcat 下可以配置多个虚拟主机,一个虚拟主机相当于一个独立的网站,tomcat 内置了一个虚拟主机,即 localhost。
假设两个网站是运行在 Tomcat 中的两个虚拟主机,我的博客网站:https://hoyue.fun,搜索引擎:https://google.com 等等,它们都可以是一个独立的虚拟主机。我们可以把虚拟主机看成一个个文件夹,它们之间互不干扰,访问路径也不同,在这里即主机名(Host name)不同。
web 应用
一个虚拟主机下可以管理多个 web 应用,每个 web 应用相当于网站中的一个功能模块,web 应用内部按照固定结构保存该功能模块的各种 web 资源。
例如,我在博客网站下关于页面:https://hoyue.fun/about_links/,分享分类页面:https://hoyue.fun/share/ 它们是不同的功能模块,我们可以把它们都称为 web 应用。我们可以把它看为虚拟主机文件夹下不同的子文件夹。
创建新主机(Windows)
我们知道了一些基础的 Tomcat 概念后,我们可以知道 Tomcat 内置了一个 localhost 主机。我们现在要做的就是创建一个新的主机,它平行于 localhost(与 localhost 处于同一文件夹下)。
首先,在创建主机之前,为了避免等会重启时出错导致端口占用问题,我们先在 NetBeans 中右键新建的 Tomcat - stop 关闭 Tomcat 服务器先。
如果未停止 Tomcat 而进行修改很有可能修改无效或下次无法启动!!!

接下来再次点击右键,找到最后的 Properties(属性),并找到 Tomcat 的 Catalina Home 和 Catalina Base 路径(可以相同可以不同)。

接着我们在 Catalina Base 路径中,创建一个文件夹,名字为自己准备创建的 Hostname,例如我这里新建一个 hoyue。注意,此时新建的文件夹必须和 webapps 文件夹在同一目录下,因为 webapps 里是 localhost 的主机配置文件,我们新建的主机与 localhost 平行。

接下来我们复制 webapps 里的 host-manager、manager 和 ROOT 文件夹到我们新建的文件夹里,并且点开 ROOT 文件夹。这里就是我们的虚拟主机网站默认文件了,这里就不过多修改,我直接添加一个 test.txt 文件里面随意输入,之后我们访问这个文件来验证虚拟主机即可。
这里仅仅为演示,实际上应该上传网站文件,以便搭建网站。

接下来回到 Catalina Base 路径,访问 conf 文件夹,我们需要编辑 server.xml、tomcat-users.xml 文件。这里使用 sublime text 演示,当然你也可以直接记事本。
首先在 server.xml 69 行左右,我们可以在这里修改端口号。

接下来我们需要在文件末尾,</Host> 之后(大约 167 行后),插入我们新的 Host 定义:
<Host name="HOSTNAME" appBase="PATH" unpackWARs="true" autoDeploy="true"></Host>我们需要把 HOSTNAME 改为你新建的文件夹的名字,PATH 改为你新建文件夹的路径。如图:

这个地方很容易错:我们新插入的代码段必须要在 </Host> 外,因为 </Host> 是链接到上一个 <Host> 的,放在里面会导致嵌套,服务器运行会直接出错。
同时,我们还可以在 tomcat-users.xml 文件中创建一个新用户来管理这个新主机。插入到最后标签前即可,此时默认的新用户名和密码均为 tomcat,你可以自己修改。
<user roles="manager-gui, manager-script, manager-jmx, admin-gui, admin-script" password="tomcat" username="tomcat"/>在这一步中,我们也可以不新建一个用户,可以给我们的用户中 roles 后面字段改为
"manager-gui, manager-script, manager-jmx, admin-gui, admin-script"即可。

下一步就是我们需要指向 manager 和 ROOT 地址。
在最新版本中,只要在前面
server.xml中正确填写绝对路径,下面的两处可以跳过!!!
下面的步骤适用于我们网站文件与管理文件不在默认的文件夹时(网站文件默认 ROOT、管理文件默认 manager),若为默认可以不添加 ROOT.xml 与 manager.xml。
首先在 conf 文件夹下打开 Catalina 文件夹,新建文件夹,名字为我们自己命名的 Hostname。然后将 Catalina Home 目录下的 webapps/host-manager/WEB-INF 下的 manager.xml 复制到刚才新建的文件夹里。同时我们创建一个新文件 ROOT.xml。

我们编辑 manager.xml,删除除了 <Context> 主标签与 </Context> 之外的内容,并把 docBase 路径改为你新建的主机的路径下的 manager。注意是你的主机的路径,而不是 conf 中刚刚新建的文件夹的路径。

在 ROOT.xml 中,添加下列代码:
<Context path="" docbase="PATHOFROOT" />在 PATHOFROOT 这里,填写虚拟主机的 ROOT 路径:

至此,我们已经配置完成了,接下来我们还需要进行映射,才能让我们的 Hostname(hoyue)正常在浏览器中访问。因为浏览器默认访问的地址为公网地址,我们没有给它配置域名解析,故不会找到真正的地址。
下面步骤与上面无关,下面不能跳过
我们打开命令行,查询我们的内网 ip。输入 ipconfig,回车即可找到内网 ip,我们记录下来。

接着我们访问下面目录:C:\Windows\System32\drivers\etc,找到 Hosts 文件。右键编辑,在文件末尾处添加一句:
yourip Hostname这里的 yourip 改为刚才找到的 ip,Hostname 改为你创建的主机名,例如:

接下来我们回到 NetBeans,启动 Tomcat 验证是否配置成功。我们在浏览器访问 http://Hostname:8080,看看是否能正常访问 Tomcat 默认页面。Hostname 改为你的主机,8080 端口可以改为你修改后的端口。 正常情况如图:

当然,如果你一开始的主机名填写的就是你的内网 IP 时,就不需要进行修改 Hosts 操作
做完这些,我们尝试访问新建虚拟主机的测试文件 test.txt。首先因为 Windows 系统默认关闭了 Telnet 功能,我们需要在系统的设置中搜索“Windows 功能”,找到里面的 telnet 客户端,勾上确定等待一会即启用了 Telnet。

接下来在命令行中输入下列命令,这里记得把 Hostname 改为自己主机的名字:
telnet Hostname 8080
回车后会清空所有内容来到不可视化 Telnet 客户端中。我们需要同时按下键盘 CTRL 键和 ] 键(反中/大括号键),出现 Telnet 提示后再回车进入可视化输入状态。
接下来我们对服务器发送 GET 命令:
GET /test.txt HTTP/1.1HOST: hostname这里需要根据你的测试文件和 hostname 修改对应位置。输入后回车两次,如果成功 GET 数据(200 OK),则表示我们已经成功。

常见问题:
非常重要的一点:修改文件后需要重启 Tomcat 服务器!!!或者一开始编辑时关闭 Tomcat 服务器,编辑好后再启动。
-
返回 404
-
返回 404 一般为主机配置不正确。我们首先在浏览器中访问
http://hostname:8080检测是否正常访问,若出现 404,说明配置不正确,请检查server.xml与前文描述是否相符。 -
若能正常访问,但访问到
/test.txt时 404,则说明 hostname 被部署到了原来的localhost上,请检查你是否未跳过手动配置部分,并尝试删除手动配置文件让其自动配置。(即跳过查 IP 之前的两处修改,指向 manager 和 ROOT 地址部分) -
或者尝试将
ROOT.xml里的语句写到server.xml中<Host name=你的主机名称 ...></Host>之间。因为此时ROOT.xml中指定 localhost 的 Root Context 可能与自动部署的不同,则会出错。即下面代码在你添加的<Host></Host>之间:<Context path="" docbase="PATHOFROOT" />
-
-
返回 400
服务器告诉客户端它发送了一条异常请求。请检查你的命令是否输入正确。或者是主机名未正确绑定,你可以尝试执行ping hostname以验证是否正确解析主机。如果还出现其他问题可以尝试重启 Tomcat。 -
Tomcat start failed.
配置出错,建议每一步进行检查或者重新来。如果是端口被占用,按照前文的杀除方法或者更换端口尝试。 -
反复登录失败
可以尝试使用我们在tomcat-users.xml里新建的用户名密码尝试。 -
如果还出现其他问题,欢迎在底部评论区留言或找到关于页面的联系方式交流。
创建新主机(MacOS)
我们在环境搭建处成功部署 Tomcat 后,我们先在 NetBeans 中关闭 Tomcat。我们同样在双击服务器后点击 Properties(属性),并找到 Tomcat 的 Catalina Home 和 Catalina Base 路径(可以相同可以不同)。

打开 Catalina Base 文件夹,新建文件夹例如:webproghost。
在 webproghost 中新建 ROOT 文件夹,在 ROOT 文件夹下新建 test.txt 文件并写入内容。

接下来修改 server.xml 文件,我们打开 Catalina Base 目录,并修改 Catalina Base/conf/server.xml 文件。我们在 </Host> 之后、</Engine> 之前插入:
<Host name="Hostname" appBase="相对PATH" unpackWARs="true"autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context docBase="绝对PATH" path="" /></Host>此时我们第一处填写我们的主机名,我们可以写为你想访问的地址,这里用 www.webprog.org 举例;第二处相对 PATH 填写 webprog 即可;第三处绝对 PATH 填写绝对地址,例如:docBase="/usr/local/apachetomcat9.0.44/webproghost/ROOT"。
PS:要查看某个文件夹的绝对路径,只需打开一个终端,将文件夹拖入终端,终端就会显示该文件夹的绝对路径。
故如图:

至此,server.xml 文件修改完成。
我们接下来修改 Hosts 文件:首先是获取 IP,终端输入:ifconfig。
找到网卡下的 IP 地址记下来。

接下来继续在终端,输入命令行:
sudo vi /etc/hosts输入本机密码后,会自动打开 hosts 文件,键盘输入 i(插入),我们插入下面代码:
yourip www.webprog.orgyourip 改为你的本机 IP,最后按 esc 键退出插入页面,再按住 shift+: 键,输入 wq,再 enter 键保存退出。
于是我们回到 NetBeans 重启 Tomcat 后,在终端输入测试:
telnet www.webprog.org 8080连接上本机后,模拟浏览器发送 GET 请求:
GET /test.txt HTTP/1.1HOST: www.webprog.org成功如图:

常见问题:
-
找不到 Telnet 命令
部分人的 mac 上是没有安装 telnet 工具的,我们需要安装 Telnet 工具:Terminal window brew install telnet如果终端报错,说找不到
brew命令,说明你还没下载 Homebrew,请在搜索引擎中搜索安装 Homebrew。如果下载 telnet 速度很慢,多半是因为中国大陆网络连接问题,可以在境外下载或者使用镜像。具体请咨询搜索引擎。 -
tomcat 无法运行
因为修改server.xml文件不当,改变它原来的结构,或者删除了一些标签导致的,如果遇到这种问题,建议优先检查server.xml文件。一般可能有:端口被占用,可以尝试修改端口;Java 环境出故障,这种问题相对较难解决,建议重启电脑,或者重装 tomcat。
后记
以上为使用 NetBeans 配置 Tomcat 虚拟机的学习记录。如有任何问题欢迎在评论区留言。