Tomcat服务器进击

一、Tomcat服务器端口配置更改

Tomcat的所有配置都放在conf文件夹之中,server.xml文件就是配置的核心文件。

现在呢,我们需要将8080端口设置成8088端口。

启动端口默认:

<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

在server.xml配置文件中的Connector节点进行的端口修改就可以啦。

    <Connector port="8088" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

这时,我们试下http://127.0.0.1:8088/ 发现无法访问。原因就在于,在server.xml张修改内容后,只有重启tomcat才会生效。因为当服务器运行时更改config下的*.xml,服务器并不能读取到,只有在预加载,也就是启动程序时,才会重新读入配置信息。

二、Tomcat服务器虚拟目录的映射方式

虚拟目录映射方式一:在server.xml文件的host元素中配置

虚拟目录的映射:把web应用所在目录交给web服务器管理,以供外界访问。

下面,我们进行tomcat下虚拟目录的映射。

我们来看下server.xml文件的host元素:

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

我们在<host></host>中加入<Context path="/JavaWeb" docBase="D:\JavaProject" />,

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
          <Context path="/JavaWeb" docBase="D:\JavaProject" />
      </Host>

在D盘下有一个JavaProject目录,而JavaWeb则是不存在的,<Context path="/JavaWeb" docBase="D:\JavaProject" />就是将D:\javaProject目录映射到虚拟的/JavaWeb上。

JavaWeb这个虚拟目录是由Tomcat服务器管理的,JavaWeb是一个硬盘上不存在的目录,人为所以写的一个目录,也就是虚拟的一个目录,所以称之为"虚拟目录"。

重启tomcat运行下:

说明

Context表示上下文,代表的就是一个JavaWeb应用,Context元素有两个属性,

1.path:用来配置虚似目录,必须以"/"开头。

2.docBase:配置此虚似目录对应着硬盘上的Web应用所在目录。

注意:在Tomcat6之后中,不再建议在server.xml文件中使用配置context元素的方式来添加虚拟目录的映射,因为每次修改server.xml文件后,Tomcat服务器就必须要重新启动后才能重新加载server.xml文件。

 虚拟目录映射方式二:让tomcat服务器自动映射

tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚似目录。说白了就是:tomcat服务器webapps目录中的web应用,外界可直接访问。

把上面的测试目录D:\JavaProject的JavaProject直接copy到webapps。访问http://127.0.0.1:8088/javaProject/test.html:

此时Tomcat服务器就会自动为javaProject这个JavaWeb应用映射一个同名的虚拟目录"/javaProject”。

虚拟目录映射方式三:增加.XML文件方式

参考Tomcat服务器文档:

  In individual files (with a ".xml" extension) in the $CATALINA_BASE/conf/[enginename]/[hostname]/ directory. The context path and version will be derived from the base name of the file (the file name less the .xml extension). This file will always take precedence over any context.xml file packaged in the web application's META-INF directory.

  意思就是:在tomcat服务器的\conf\Catalina\localhost目录下添加一个以xml作为扩展名的文件,xml文件的名字可以任意取,比如123.xml,注意这一句话"The context path and version will be derived from the base name of the file",这一句话的意思就是"context元素的path属性源自于是这个xml文件的名字",上面提到过,Context元素的path属性是用来配置虚似目录的名称的,所以虚似目录的名称就是这个xml文件的名称。

  说明:$CATALINA_BASE指的就是tomcat服务器根目录。[enginename]指的是Tomcat服务器使用的引擎名称,Tomcat使用的引擎是Catalina。

\conf\Catalina\localhost 目录下新建文件123.xml,内容:

<Context docBase="D:\JavaProject" />

上面的Context 并没有使用第一种的path,那么D:\JavaProject对应的虚拟目录应该是哪个呢?就是当前新建的这个XML的文件名。

保存后,不重启tomcat,访问http://127.0.0.1:8088/123/test.html:

 如果我们更改了文件名呢?

Tomcat服务器会自动Undeploying context [/123],然后自动信息: 

org.apache.catalina.startu
p.HostConfig.deployDescriptor Deploying configuration descriptor C:\Java\apache-
tomcat-9.0.0.M13\conf\Catalina\localhost\12345.xml

TomCat配置虚拟主机

配置虚拟主机

 配置虚似主机就是配置一个网站。在Tomcat服务器配置一个虚拟主机(网站),需要修改conf文件夹下的server.xml这个配置文件,使用Host元素进行配置,打开server.xml,可以看到Tomcat服务器自带的一个名称为localhost的虚拟主机(网站):

平时我们将开发好的JavaWeb应用放到webapps文件夹下,然后就可以使用"http://localhost:端口号/JavaWebAppName"的方式去访问了,其实访问的就是name是"localhost"的那台虚拟主机(Host),这台虚拟主机管理webapps文件夹下的所有web应用。

那我们怎样去配置个虚拟主机呢?简单点,模仿localhost:

<Host name="www.eric12345.com" appBase="D:\JavaProject"> 

</Host>

注意这里的appBase指的不是一个项目的根目录,而是一个存放了一个或者多个JavaWeb应用的文件夹:

就好像是Tomcat服务器的webapps文件夹一样,里面可以存放很多的JavaWeb应用。

上面我们新配置一个虚拟主机,虚拟主机的name是"www.eric2345.com",虚拟主机"www.eric2345.com"现在管理着JavaProject文件夹下的所有web应用,平时使用域名"www.baidu.com"访问百度的网站时,其实就是在访问一个名称是"www.baidu.com"的虚拟主机,所以当我们要访问name是"www.eric2345.com"的这个虚拟主机时,就可以使用"域名(www.eric2345.com)"去访问。当然,目前直接访问肯定跪掉,需要一点小设置;

在C:\Windows\System32\drivers\etc下,需要更改下hosts文件:

 

然后,访问我们的网址http://www.eric12345.com:8080/HelloWorldWeb1/test.html:

浏览器与服务器交互原理简介

为什么这样可以访问成功呢?来看下浏览器访问网址及相应的原理图:

 

当我们输入网址http://www.eric12345.com:8080/HelloWorldWeb1/test.html敲回车后,

1.浏览器先去查本地的host文件下有没有我们的“www.eric12345.com”主机名,有的话就找到它对应的IP地址了;

2.如果上一步没找到,那么浏览器会去互联网的DNS服务器去找,找到匹配的IP地址。

3.有了IP地址,我们就可以通过IP和服务器链接。

4.连接好,我们就会向它发起HTTP请求。

5.6.7.web服务器就根据HTTP请求的报头信息(浏览器向服务器发请求的请求方式、浏览器要访问哪个应用下的哪一个web资源、请求参数信息)

8.开始根据以上信息进行数据解析

9.把数据结果返回

 JavaWeb应用部署时的目录结构

结构图:

WebRoot →Web应用所在目录,一般情况下虚拟目录要配置到此文件夹中。

     WEB-INF此文件夹必须位于WebRoot文件夹里面,而且必须以这样的形式去命名,字母都要大写。

      web.xml配置文件,有格式要求,此文件必须以这样的形式去命名,并且必须放置到WEB-INF文件夹中。

对于web.xml的格式可以直接从Tomcat中参考:

找到Tomcat目录下的webapps\ROOT\WEB-INF这个目录下的web.xml文件,把这个文件拷贝到我们自己新建的WEB-INF文件夹中,并修改这个web.xml文件,把里面的注释删除掉,只留下如下所示的代码即可:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>

</web-app>

 

 

 

posted @ 2016-11-16 13:42  Eric-Lee  阅读(331)  评论(0编辑  收藏  举报