使用Tomcat构建web站点

1.1.web应用的前置知识

①.HTTP协议

web浏览器除了可以在本地硬盘上打开网页文档外,还可以使用HTTP网络协议从网络上web服务器上获取网页文档内容

如图:


web浏览器和web服务器分别代表着TCP网络程序的客户端和服务端。可以把web服务器想象成网络上的一块硬盘,网页文档就放在那块硬盘里,web浏览器从远程的网络硬盘中读取数据远比读取本地的数据复杂的多,因为它与web服务器间需要一问一答的交互过程。但是既然是交互,那就要一个交互的规则,就像一个只会说英语和一个既会说汉语又会说英语的外交官对话时,他们一定会选择用英语对话,只有遵守了这样的规则,他们的交互才能持续,这个规则就是HTTP协议。因为web浏览器会按照HTTP协议的规定向web服务器发送请求,web服务器也会按照HTTP协议的规定向浏览器响应请求。

②.URL

放置在网络上的服务器中的网页文档都应该有一个定位标识,用于唯一性的标识它的位置,也就是地址,只有有了地址,web浏览器定位到它。

③.web服务器

Apache、IIS、Tomcat等,但是Apache和IIS不直接支持JSP/Servlet程序。要想在这些web服务器中运行,就必须要与某种JSP/Servlet引擎进行集成,Tomcat是sun公司推荐的运行JSP/Servlet的容器(引擎),它可以被集成到Apache和IIS中。另外,Tomcat也有web服务器的一些功能,对于一般的应用,完全可以使用Tomcat作为web服务器运行。

④.网站系统的组成

通常来说,只要在一台机器上安装了web服务器软件,从功能上讲,这台机器就是一个web服务器。对于一个大型的网站系统来说,通常有区域代理服务器、负载均衡’web服务器、应用服务器、缓存、数据库系统等组成。简单的网站,只需要一个web服务器就够了。


1.2.配置web站点的虚拟根目录

        ①.概述

一个web资源的URL中的资源路径部分,www.zhangpeng.com/project/index.html,其中"/project/index.html"就是由web服务器的某个本地目录中的资源所映射成的虚拟路径。"/project/index.html"的第一个"/"表示站点的根目录,它对应到web服务器的本地文件系统的一个目录。"/project/"表示站点根目录下的一个名叫"project"的子目录,"/project/index.html"可理解为子目录"project"下的名为"index.html"的文件。

要想让浏览器通过HTTP协议访问到某台计算机中的目录内容,除了这台计算机必须有web服务器软件外,还要将该目录映射成虚拟的web站点目录。将web服务器(即web服务器软件所在的计算机)的本地文件系统的某个目录映射成虚拟web站点目录的过程,叫发布。

②.虚拟web目录的映射原理

一个web站点上必须有且只能有一个虚拟根目录,其他的虚拟目录必须以根目录子孙目录的形式出现,根目录用"/"表示,根目录与该目录下的子目录或者资源文件都以"/"进行分隔。假设将d:\test目录映射成web站点的根目录,那么浏览器访问的资源路径与本地文件系统的对应关系,如图:

一个web站点除了可以设置一个虚拟根目录外,还可以设置若干个虚拟子目录。一个文件系统目录可以被映射成一个或者多个虚拟web目录,但是一个虚拟的web目录只能对应一个本地文件系统目录。虚拟web子目录名称可以是多级目录结构的形式。例如本地文件系统上的"D:/project"可以映射成"/serv/index"的虚拟web子目录。当浏览器请求某个路径的资源时,Tomcat会按照最长路径匹配原则进行处理。

1.3.设置web站点的根目录

两种方式

①.<Tomcat主目录>/webapps/ROOT目录可以自动的映射成虚拟根目录,在建立自己的web站点时,可以先删除Tomcat提供的ROOT目录下的原始内容,然后将自己想要提供给外部访问的资源复制到ROOT目录下。

②.打开<Tomcat>主目录/conf/server.xml文件,找到<context>元素,这个元素用于将本地文件系统中的一个目录映射成一个可供web浏览器访问的虚拟web目录。其中,path用来指定web虚拟目录的路径,当设置为空时,表示的是整个web站点的根目录;docbase指定该虚拟web目录所映射到的本地文件系统的目录,可以使用绝对路径和相对于<Tomcat主目录>/webapps的相对目录。

<context   path=""  docbase="D:/project"/> 相当于把D:/project目录配置成web站点的根目录。
将web服务器上某个文件系统的目录映射成web站点的根目录后,就可以使用浏览器来访问这个目录及其子目录下的资源了。

1.3.配置web站点的虚拟子目录  

①.打开<Tomcat>主目录/conf/server.xml文件,设置<context>元素,一个<Host>元素表示一个web站点,其中可以包含多个<contedxt>元素,每个<context>子元素分别对应该站点下的一个虚拟web目录。<context>元素指定的虚拟web子目录名称与本地文件系统的目录名称没有必然的关联,两者的名称可以不一致,例如,<Tomcat主目录>/conf/server.xml文件中的<Host>下增加一条<context path="/zhangpeng" docbase="D:/zpeng512" />,即可将本地计算机下的D:/zpeng512映射成web站点的虚拟w子目录。一个虚拟目录,就是一个独立的web应用程序。为了便于web应用程序的发布,通常将一个web应用程序打成一个war包。server.xml文件中的<context>元素的docbase除了指向一个目录外,它还可以指向一个war文件。

②.如果<Host>元素指定的appbase目录<默认为<Tomcat主目录/webapps目录>>中的xml文件中包含<context>元素的设置,这和直接包含在server.xml文件中的<Host>中的效果是一样的。

③.<Tomcat主目录>/conf/Catalina/localhost/路径名.xml

④.如果<Host>中appbase指定的目录下的子目录中包含WEB-INF/web.xml文件,这些子目录将会自动被设置成独立的web应用程序,其虚拟路径就是在该子目录的名称前面加上"/"。

1.4.部署描述符(web.xml)

一个web虚拟目录就是一个独立的web程序,每个web应用程序都有独立的web配置的信息,每个web应用的配置信息都保存在各自所映射的文件系统目录下的"WEB-INT/web.xml"中。web.xml用于web应用程序部署信息,因此叫做部署描述符。由于每个web应用程序都有相同的配置特性,为了避免在每个web应用中重复设置这些特性,Tomcat在conf/web.xml文件中设置了对所有web应用起作用的配置信息,也就是所有web应用默认的配置信息,每个web应用的web.xml用于在tomcat下conf/web.xml的基础上增加或者覆盖一些设置信息,一个web应用程序中的web.xml只对web应用程序自己有效。

1.5.配置虚拟主机

①.浏览器访问web资源的过程

浏览器访问web资源时,会根据协议名、IP(主机)、端口等信息与web服务器建立网络连接。由于主机名比IP更容易记忆,人们通常在URL中使用主机名,而不是IP地址。主机名会被DNS解析成IP地址,再通常IP地址与web服务器建立连接。

②.虚拟主机及实现原理

在一台机器上可以使用tomcat创建多个web站点,并为每个web站点设置不同的虚拟根目录和虚拟子目录,每个web站点作为各自独立的网站分配给不同的公司或部门。通过这种方式,各个公司或部门可以共用同一台服务器,而用户感觉每个公司或部门都有各自独立的网站。多个没有实力的在Internet上架设自己的web服务器的公司可以联合租用同一台web服务器,对外提供各自的web服务而互不影响,这就是虚拟主机的解决方案。因为多个虚拟主机的web站点是创建在同一台web服务器中的,不管web浏览器访问哪一个站点,请求都会发送到这台服务器中,那么这台服务器是怎么区分这个请求是请求的哪一个站点呢?这就需要考虑两个因素:一.web服务器的每个站点必须设置不同的标识信息;二.web浏览器发出连接请求中必须包含web站点的标识信息。

虚拟主机分为:基于主机名的虚拟主机和基于端口号的虚拟主机。

配置:

 <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
 
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<span style="white-space:pre">		</span>
      </Host><span style="white-space:pre">	</span>  
<span style="white-space:pre">	</span>
    </Engine>
  </Service>
  
   <Service name="Catalina2">
  


    <Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    <Engine name="Catalina2" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/> 
<span style="white-space:pre">		</span><!--如果docBase的路径是相对于appBase的,那么没必要配置虚拟子目录,因为appBase下的目录都会被自动映射成虚拟子目录-->
      <Host name="localhost"  appBase="D:/mkmk"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<span style="white-space:pre">			</span><Context  path="/zhangp5"    docBase="/mk"  />
      </Host>
<span style="white-space:pre">	</span>  <Host name="www.zp.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
<span style="white-space:pre">		</span><Context  path="/zhangp4"    docBase="D:/mkmk/mk"  />
<span style="white-space:pre">		</span><Context  path="/zhangp5"    docBase="/mk"  />
<span style="white-space:pre">		</span>
      </Host><span style="white-space:pre">	</span>  <span style="white-space:pre">	</span>  
    </Engine>
  </Service>






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值