前言

学习WEB技术的第一个任务就是学会自己创建虚拟主机,并尝试访问网络服务器文件。本篇为使用NetBeans软件配置Apache Tomcat虚拟机的学习记录。


环境搭建

首先我们需要在Java环境下运行NetBeans,我们先下载并安装Java SE Development Kit。打开甲骨文官网,选择适合你电脑的版本进行下载:

下载地址: Download

Windows系统和MacOS系统建议下载Installer一键安装!

接下来installer只需要一直点next即可,如果不是下载installer的,你可能需要添加系统变量。

接下来我们安装NetBeans,进入官网下载:

下载地址: Download

我们同样选择适合自己电脑的版本下载安装。安装过程非常简单,这里就省略。

接着我们还需要下载Apache Tomcat作为服务器。进入Tomcat官网,选择Tomcat 8以上的任何一个版本即可,点击Download。

官网: 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"即可

下一步就是我们需要指向manger和ROOT地址。

在最新版本中,只要在前面server.xml中正确填写绝对路径,下面的两处可以跳过!!!
 

下面的步骤适用于我们网站文件与管理文件不在默认的文件夹时(网站文件默认ROOT、管理文件默认manger),若为默认可以不添加ROOT.xml与manger.xml

首先在conf文件夹下打开Catalina文件夹,新建文件夹,名字为我们自己命名的Hostname。然后将Catalina Home目录下的webapps-host-manager-WEB-INF下的manager.xml复制到刚才新建的文件夹里。同时我们创建一个新文件ROOT.xml。

我们编辑manager.xml,删除除了<Context>主标签与</Context>之外的内容,并把docBase路径改为你新建的主机的路径下的manger。注意是你的主机的路径,而不是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操作
 

做完这些,我们尝试访问新建虚拟主机的测试文件text.txt。首先因为Windows系统默认关闭了Telnet功能,我们需要在系统的设置中搜索“Windows功能”,找到里面的telnet客户端,勾上确定等待一会即启用了Telnet。

接下来在命令行中输入下列命令,这里记得把hostname改为自己主机的名字

telnet Hostname 8080

回车后会清空所有内容来到不可视化Telnet客户端中。我们需要同时按下键盘CTRL键和']'键(反中/大括号键),出现Telnet提示后再回车进入可视化输入状态。

接下来我们对服务器发送GET命令:

GET /test.txt HTTP/1.1
HOST: hostname

这里需要根据你的测试文件和hostname修改对应位置。输入后回车两次,如果成功GET数据(200 OK),则表示我们已经成功。

常见问题:

非常重要的一点:修改文件后需要重启Tomcat服务器!!!或者一开始编辑时关闭Tomcat服务器,编辑好后再启动。

  • 返回404

    • 返回404一般为主机配置不正确。我们首先在浏览器中访问http://hostname:8080检测是否正常访问,若出现404,说明配置不正确,请检查server.xml与前文描述是否相符
    • 若能正常访问,但访问到/test.txt时404,则说明hostname被部署到了原来的localhost上,请检查你是否未跳过手动配置部分,并尝试删除手动配置文件让其自动配置。(即跳过查IP之前的两处修改,指向manger和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

找到eth0网卡下的IP地址记下来。

接下来继续在终端,输入命令行:

sudo vi /etc/hosts

输入本机密码后,会自动打开hosts文件,键盘输入i(插入),我们插入下面代码:

yourip www.webprog.org

YourIP改为你的本机IP,最后按 esc 键退出插入页面,再按住shift+:键,输入wq,再enter键保存退出。

于是我们回到NetBeans重启Tomcat后,在终端输入测试:

telnet www.webprog.org 8080

连接上本机后,模拟浏览器发送GET请求

GET /test.txt HTTP/1.1
HOST: www.webprog.org

成功如图:

常见问题:

  • 找不到Telnet命令
    部分⼈的mac上是没有安装telnet⼯具的,我们需要安装Telnet工具:
brew install telnet

如果终端报错,说找不到 brew 命令,说明你还没下载 Homebrew,请在搜索引擎中搜索安装Homebrew。如果下载telnet速度很慢,多半是因为中国大陆网络连接问题,可以在境外下载或者使用镜像。具体请咨询搜索引擎。

  • tomcat无法运行
    因为修改server.xml⽂件不当,改变它原来的结构,或者删除了⼀些标签导致的,如果遇到这种问题,建议优先检查server.xml⽂件。一般可能有:端口被占用,可以尝试修改端口。2.java环境出故障,这种问题相对较难解决,建议重启电脑,或者重装tomcat

后记

以上为使用NetBeans配置Tomcat虚拟机的学习记录。如有任何问题欢迎在评论区留言。