Tomcat配置虚拟路径以及用顶级域名方式访问web应用

 

一、配置虚拟路径    

  Tomcat默认的项目部署目录是其根目录下的webapps目录,也就是说,你想要发布自己的项目,就必须将其打包放在webapps下。那么,问题来了,如果我们不想移动项目的原有位置,还想让tomcat帮我们管理这个应用,该怎么办呢?那就需要一定的配置了。tomcat提供了几种配置方案。在cmd中启动tomcat服务器,打开浏览器,输入http://localhost:8080/ 回车,进入tomcat主页,找到documentation或configuration链接,点击进入:

这里写了几种方式:

      (1)修改tomcat/conf/server.xml文件,这种方式配置起来感觉最方便,但每次修改都要重启服务器。

找到文件最后的host标签,再加入context标签,context首字母大写,如下:

<?xml version="1.0" encoding="UTF-8"?>

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
  <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

  <GlobalNamingResources>
    <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
  </GlobalNamingResources>

  <Service name="Catalina">
    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" maxSwallowSize="-1"/>
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

    <Engine defaultHost="localhost" name="Catalina">
        <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
    </Realm>
      <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>
        
        <!--加入的内容-->
        <Context path="/buyBook" docBase="F:/Project/Book"/>
      </Host>

    </Engine>
  </Service>
</Server>

context标签的docBase是具体的web应用的路径,也就是你要发布的项目,Project可以认为是工程目录,一个工程目录下可以有多个web应用。path相当于对这个路径起个别名,在浏览器输入http://localhost:8080/buyBook就相当于访问这个目录。我要访问Book目录下的1.html,就可以直接输入http://localhost:8080/buyBook/1.html。当然别名可以为空,即path="", 这种情况下访问1.html就可以直接输入http://localhost:8080/1.html。不过对于多个web应用还是起个别名比较好。

       (2):在conf/catalina/localhost/下新建xxx.xml,在里面加入context标签。这时,xxx就相当于上面那种方法的path属性,即访问的别名。

内容为:

<!--此时,path由文件名指定,所以就不用写了-->
<Context path="" docBase="F:/Project/Book"/>

直接在浏览器敲http://localhost:8080/buyBook/1.html 回车即可访问1.html。

这种方式修改配置文件名或内容后,不用重启服务器,直接就能访问。

tomcat还支持多级虚拟路径,例如将上面的buyBook.xml修改为:a#b#c.xml

访问时就要这样:http://localhost:8080/a/b/c/1.html

二、配置域名

       可能有很多像我一样初学Web的同学很好奇,为什么在浏览器输入www.baidu.com就能访问百度主页,而我们开发时要输入http://localhost:8080/项目名/....,其实www.baidu.com是主机名,baidu.com是域名,输入主机名,回车后,系统首先要从本机查找主机名对应的IP地址,如果找到的话就直接访问对应的IP地址,如果找不到,就要从DNS域名解析服务器中查找。一个主机名对应着一台服务器上的资源,因此我们可以访问到服务器上的资源。

在server.xml中host标签就是配置主机对应的资源:

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>
</Host>

可以看到tomcat将localhost主机对应的资源设置为webapps下的资源。这就是我们应该将项目部署在webapps下面的原因。

那我们能不能也直接敲www.baidu.com来访问我们自己的web应用呢?当然可以。不过我们要在DNS解析前告诉浏览器应该访问的IP地址。在c:/Windows/System32/drivers/etc目录下的hosts文件中配置了对应域名的IP地址,我们只需将www.baidu.com指向本机就Ok了。

然后再在server.xml文件中加入自己的host标签,同时将port端口号改为80,这样访问的时候就不用指定端口了。完整配置如下

<?xml version="1.0" encoding="UTF-8"?>

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
  <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

  <GlobalNamingResources>
    <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
  </GlobalNamingResources>

  <Service name="Catalina">

    <!--原来的8080要修改-->
    <Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" maxSwallowSize="-1"/>
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

    <Engine defaultHost="localhost" name="Catalina">
        <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
    </Realm>
      <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>
      </Host>

        <!--自己写的host标签-->
      <Host appBase="F:/Project" autoDeploy="true" name="www.baidu.com" unpackWARs="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt"/>
        <Context path="" docBase="F:/Project/Book"/>
      </Host>

    </Engine>
  </Service>
</Server>

效果:

注意:web项目下最好有个index.html,因为默认把index.html作为主页,如果是其他页面,要在主机名后面加上访问的路径。

最后,修改的东西最好测试后再修改过来,不然后期学习过程中可能造成不必要的麻烦。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值