前言
学习WEB技术的第一个任务就是学会自己创建虚拟主机,并尝试访问网络服务器文件。本篇为使用NetBeans软件配置Apache Tomcat虚拟机的学习记录。
环境搭建
首先我们需要在Java环境下运行NetBeans,我们先下载并安装Java SE Development Kit。打开甲骨文官网,选择适合你电脑的版本进行下载:
下载地址:
Download
接下来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服务器先。
接下来再次点击右键,找到最后的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"/>
下一步就是我们需要指向manger和ROOT地址。
下面的步骤适用于我们网站文件与管理文件不在默认的文件夹时(网站文件默认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端口可以改为你修改后的端口。正常情况如图:
做完这些,我们尝试访问新建虚拟主机的测试文件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),则表示我们已经成功。
常见问题:
- 返回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虚拟机的学习记录。如有任何问题欢迎在评论区留言。
Comments 10 条评论
博主 骆小北
这是一条私密评论
博主 Hoyue
@骆小北 302说明被临时重定向了,请确保你的主机名对应你的IP,即在hosts中成功对应。如果你改变网络连接(更换地址),你的本机IP将会被改变,此时你需要重新获取IP并修改hosts文件,这可能是重定向的原因。如果这不能解决,你可以在关于页面中找到我的联系方式具体看看。
博主 1912702522
这是一条私密评论
博主 Hoyue
@1912702522 这个是正常情况,一段时间没有操作就会出现Connection closed by foreign host. 如果是一开始就出现这个的话请检查一下你的hosts修改情况,在网络更换后本机IP会出现变化,试试重新设置看看。如有其他问题,你可以通过邮件或继续回复交流。
博主 yushan
这是一条私密评论
博主 Hoyue
@yushan 同学你好,在Windows下telnet连接后需要按下
ctrl+]
后才会进入可视化界面,同时可能服务器设置的连接时间较短,建议GET命令内容通过复制粘贴写入。MacOS的话,可以试试修改编码。如果你还有其他问题,欢迎继续回复讨论,或者你可以添加我的微信询问。为了验证身份保护个人信息安全,请通过你的学校邮箱向我的邮件发送信息后才可添加微信,谢谢。博主 Catherine
这是一条私密评论
博主 Hoyue
@Catherine 你是说怎么调节terminal的样式嘛,你可以试试在terminal的偏好设置 – 描述文件 – 文本下有一个背景图像的,可以在这里修改。同时文本的字体、颜色等都可以自定义。还想要更高级的美化你就自己搜索一下吧,网上有很多,我手里没有Mac我也不太清楚
博主 Felix
为什么我输入GET以后没法换行 回车就直接输出了 我telnet了我的服务器+端口号 输入st发现连接成功 之后输入GET就显示“无效指令,输入?来查看指令”然后就是.o .q等telnet指令 GET没法和host分行一起输出 而且GET指令无效QAQ
博主 Hoyue
@Felix 你可以试试先把GET的两行命令复制到剪切板后在使用Telnet,它这个确实有时候超时时间很短,来不及输入,或者你在换行时尝试使用shift + enter换行。再多试试吧,不行的话可以继续回复,或按照本帖之前的回复写到的方式联系我