……

Tomcat上如何配置虚拟主机以及如何访问在webapps文件夹外的资源

前言

最近学习到Java web技术,然后接触到Tomcat服务器。(记得配置好java jdk的环境变量哦)下载完毕,解压后,进入bin目录下,找到starup.bat文件,双击它即可启动Tomcat服务器;双击shutdown.bat文件即可关闭Tomcat服务器。当然,粗暴点直接关闭cmd命令框或者按住ctrl+c也是可以关闭Tomcat服务器的。如下图所示:

 

 

 上图是我安装版本的目录,可能因为版本不同,目录会不一样,但是那些都是不重要的文件,功能还是一样的。

 

 

 

启动的命令框如图所示:

 

启动之后,不要关闭这个窗口,打开浏览器(最好打开谷歌浏览器),在浏览器地址栏中输入:http://localhost:8080/index.jsp,就可以访问tomca服务器上的资源了,当然了你输入localhost:8080也是可以的,因为这个地址直接映射了上面那个,就直接找index.jsp了。如下图所示:

 

 

好吧,好像废话太多了,下面正式进入正题。

 

 Tomcat 配置虚拟主机

上面讲到的localhost,从英文翻译过来就是:本地主机。Tomcat服务器可以将当前主机虚拟成多个主机,称为虚拟主机,每个虚拟主机下可以部署多个web应用。虚拟主机及其web应用在:conf/server.xml文件中进行配置。server.xml是Tomcat中一个非常重要的配置文件,Tomcat启动时要读取该文件定义的配置。

 

 

 打开这个文件,这里我用的是:Editplus打开的:

 

 

 至于这个文件中各个标签的作用,可以参考地址:https://www.cnblogs.com/LinkinPark/p/5233086.html 这里面讲的很详细

一开始我们在浏览器地址栏中输入的地址是localhost,代表本机,也就是127.0.0.1这是代表本机的ip地址,当然了如果你的电脑联网了,那就会有一个ip地址,在cmd中输入:ipconfig就能查看,然后用联网的ip代替localhost也是可以的,始终代表的是你这台电脑。如果你想访问局域网中另外一台服务器,那就要换成那台服务器的ip地址进行访问。

那么为何localhost是可以代表本机呢,打开:C:\Windows\System32\drivers\etc 下有个hosts文件 这是电脑的配置文件,如下图:

 

 

 

 文件开头也为这个文件的作用做了说明,主要是说这个文件是电脑ip地址的配置,可以看到127.0.0.1 映射的正是:localhost,也就是两者是相等的关系。那么在这里,我复制,然后添加了一个,将127.0.0.1 映射为:ljf 然后保存。(记得要去掉前面的#号哦,不然就是注释了) 这是配置虚拟主机的第一步,更改hosts文件。

 

第二步,往server.xml配置文件中添加<Host></Host>,xml文件是严格区分大小写的,最好复制上面的进行改动会好一点。如下图:

 

我这里直接复制了上面的localhost的过来,然后更改name为:ljf即可,然后保存,重启Tomcat,更改为配置文件都要重启服务器哦,这是为了让配置生效,虽然<Host>中有个属性:reloadable:true(如果为true,说明改动文件后会重新加载;如果为false,改动后不重新加载)但是为了保险起见还是重启一下吧。然后用localhost:8080访问,当然是没问题的,将其换成ljf:8080也是没有问题的:

 

 

 

 

 

 

 这样虚拟主机就完成了,虽然是不同的名字,但是映射的都是同一台主机,那么这样做的意义是什么呢?有些公司啊,需要多个域名,便于消费者访问,但是又没钱开多台服务器,只能共用一台咯,可能就是减少开支吧。

如何配置访问webapps文件夹以外的资源?

在浏览器中输入:localhost:8080/index.jsp访问的是webapps文件夹下的ROOT文件夹的index.jsp文件,那如果我想访问webapps文件夹以外的资源,可以吗?当然是没问题的!

在<Host>中appBase所定义目录下的每一个目录都会自动映射为一个web应用,其url根路径就是目录名,如图:

 

appBase定义的是webapps目录,Tomcat默认将webapps目录下的ROOT目录设置为了其默认的目录,所以我们这里没有看到<context path=>的设置,并且在CatalinaHome/conf/web.xml全局配置文件中,配置了欢迎页面为index/html/index.htm/index.jsp(位置靠前,优先访问,找不到再往下找)这也是为什么输入localhost:8080/index.jsp就能访问webapps目录下的ROOT文件夹中的index.jsp文件的原因。

 

 

 

 接下来,我们手动设置一个web目录映射。

首先在E盘下,新建一个文件夹,名为:nihao,然后在该文件夹中放入一个名为:index.html文件以及一个名为:inde.jsp的文件

 

接下来,在<Host></Host>中加入:<Context  path="/ljfsm" docBase="E:\nihao"/>

 

 

然后保存,重启服务器,打开浏览器,输入:http://ljf:8080/ljfsm/index.html是可以访问到资源的

 

 

 

 

 

 

为了说明上图访问的不是webapps文件夹下的文件,可以再在浏览器中输入:http://ljf:8080/ljfsm/inde.jsp(inde.jsp是E盘nihao文件夹独有的文件)

 

 

 

 如上图,可以访问到资源,说明配置成功了。ljfsm映射的就是:E:\nihao文件夹下的资源。这样的好处是:可以将web应用源程序放在服务器上任一磁盘、任一目录下,而不仅仅是webapps文件夹下,这样方便了网站的维护和管理。

 注意:

  1. ”<Context path=“中path的路径必须以“/”开头 这里的path的值映射的就是:docBase中的地址
  2. appBase和docBase都是指明访问资源的所在位置,如果其中一个写全了,另一个不用写也可以,如上图就是这种情况,也可以分开写,例如:appBase="E:\"  docBase="/nihao"也是可以的 ,反正其中一个的路径正确即可

那如果docBase与appBase的路径发生冲突了呢?我将nihao文件夹复制到D盘下,然后更改里面文件的名字:

 

 

 下图是E盘的文件的名字:

 

 

 server.xml配置如下:

 

 

 然后保存,重启服务器,在浏览器栏中输入:http://ljf:8080/ljfsm/inde.jsp(inde.jsp是E盘中的文件),是可以显示页面的,说明可以访问E盘中的资源,如下图:

 

 

 输入:http://ljf:8080/ljfsm/in.jsp(in.jsp是D盘中的文件),提示找不到,报404错误:

 

说明如果两者地址冲突的话,是以:docBase中的路径为准的。

关于appBase和docBase目录之间的关系,可以参考这个地址:https://blog.csdn.net/liuxuejin/article/details/9104055

因为刚开始学习Tomcat,所以有些认识可能不是特别准确,如果有写错的地方,恳请各位大佬赐教。

 

posted on 2020-07-06 14:01  钱不够用阿  阅读(1547)  评论(0编辑  收藏  举报