首页 > 其他分享 >Tomcat 服务器学习和使用(一)

Tomcat 服务器学习和使用(一)

时间:2022-08-19 20:49:09浏览次数:92  
标签:xml Web 浏览器 Tomcat 学习 jsp 服务器

原文:JavaWeb 学习总结(二)——Tomcat 服务器学习和使用(一)

一、Tomcat 服务器端口的配置

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

如果想修改 Tomcat 服务器的启动端口,则可以在 server.xml 配置文件中的 Connector 节点进行的端口修改。

例如:将 Tomcat 服务器的启动端口由默认的 8080 改成 8081 端口。

Tomcat 服务器启动端口默认配置

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

将 Tomcat 服务器启动端口修改成 8081 端口

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

这样就把原来默认 Tomcat 默认的的 8080 端口改成了 8081 端口了,需要注意的是,一旦服务器中的 *.xml 文件改变了,则 Tomcat 服务器就必须重新启动,重新启动之后将重新读取新的配置信息。因为已经在 server.xml 文件中将 Tomcat 的启动端口修改成了 8081,所以 Tomcat 服务器启动时就以 8081 端口启动了,如下图所示:

img

访问 Tomcat 服务器也必须以新的访问端口去访问:http://localhost:8081/,如下图所示:

img

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

Web 应用开发好后,若想供外界访问,需要把 Web 应用所在目录交给 Web 服务器管理,这个过程称之为虚似目录的映射。那么在 Tomcat 服务器中,如何进行虚拟目录的映射呢?总共有如下的几种方式:

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

找到 server.xml 文件的 host 元素,如下图所示:

img

<Host></Host>这对标签加上<Context path="/JavaWebApp" docBase="F:\JavaWebDemoProject" />即可将在 F 盘下的 JavaWebDemoProject 这个 JavaWeb 应用映射到 JavaWebApp 这个虚拟目录上,JavaWebApp 这个虚拟目录是由 Tomcat 服务器管理的,JavaWebApp 是一个硬盘上不存在的目录,是我们自己随便写的一个目录,也就是虚拟的一个目录,所以称之为“虚拟目录”,代码如下:

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

         <Context path="/JavaWebApp" docBase="F:\JavaWebDemoProject" />
 </Host>

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

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

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

使用浏览器访问/JavaWebApp这个虚拟目录下的 1.jsp 这个 Web 资源,访问结果如下:

img

1.jsp 可以正常访问,这说明我们已经成功地将将在 F 盘下的 JavaWebDemoProject 这个 JavaWeb 应用映射到 JavaWebApp 这个虚拟目录上了,访问/JavaWebApp/1.jsp就相当于访问F:\JavaWebDemoProject\1.jsp

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

It is NOT recommended to place <Context> elements directly in the server.xml file. This is because it makes modifying the Context configuration more invasive since the main conf/server.xml file cannot be reloaded without restarting Tomcat.

Individual Context elements may be explicitly defined:

  • In an individual file at /META-INF/context.xml inside the application files. Optionally (based on the Host's copyXML attribute) this may be copied to $CATALINA_BASE/conf/[enginename]/[hostname]/ and renamed to application's base file name plus a ".xml" extension.
  • 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.
  • Inside a Host element in the main conf/server.xml.

2.2、虚拟目录的映射方式二:让 Tomcat 服务器自动映射

Tomcat 服务器会自动管理 webapps 目录下的所有 Web 应用,并把它映射成虚似目录。换句话说,Tomcat 服务器 webapps 目录中的 Web 应用,外界可以直接访问。

例如:把 F 盘下的 JavaWebDemoProject 这个 JavaWeb 应用直接 copy 到 Tomcat 服务器 webapps 目录中,如下图所示:

img

此时 Tomcat 服务器就会自动为 JavaWebDemoProject 这个 JavaWeb 应用映射一个同名的虚拟目录/JavaWebDemoProject,然后就可以使用浏览器访问这个 JavaWeb 应用的资源了,如下图所示:

img

2.3、虚拟目录的映射方式三

参考 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 文件的名字可以任意取,比如下面的 aa.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。

img

在 aa.xml 文件中添加 Context 元素映射 JavaWeb 应用,代码如下:

<Context docBase="F:\JavaWebDemoProject" />

注意:在 Context 元素中并没有指明 path 属性来设置虚拟目录的名称,那么F:\JavaWebDemoProject映射的虚拟目录名称是什么呢,就是当前正在编辑的这个 xml 文件的名称 aa。

img

使用这种方式映射虚拟目录的最大好处是修改了配置文件后不用重启 Tomcat 服务器,比如将 aa.xml 修改成 bb.xml,Tomcat 服务器会自动 Undeploying context [/aa],然后自动 Deploying configuration descriptor D:\apache-tomcat-7.0.53\conf\Catalina\localhost\bb.xml:

img

三、Tomcat 服务器配置虚似主机

3.1、配置虚拟主机

配置虚似主机就是配置一个网站。

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

img

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

例如:http://localhost:8080/JavaWebDemoProject/1.jsp,这个 URL 地址访问的就是名称是 localhost 的那台虚拟主机下的 JavaWebDemoProject 这个应用里面的 1.jsp 这个 Web 资源。

我们可以使用如下的方式配置一个虚拟主机,例如:

<Host name="www.gacl.cn" appBase="F:\JavaWebApps">
      
</Host>

这里我们新配置一个虚拟主机,虚拟主机的 name 是“www.gacl.cn”,虚拟主机“www.gacl.cn”现在管理着 JavaWebApps 文件夹下的所有 Web 应用,平时我们在互联网上使用域名“www.baidu.com”访问百度的网站时,其实就是在访问一个名称是“www.baidu.com”的虚拟主机,所以当我们要访问 name 是“www.gacl.cn”的这个虚拟主机时,就可以使用“域名(www.gacl.cn)”去访问,注意一下appBase="F:\JavaWebApps",这里的 JavaWebApps 文件夹代表的不是一个项目的根目录,而是一个存放了一个或者多个 JavaWeb 应用的文件夹,如下图所示:

img

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

img

3.2、Windows 系统中注册域名

配置的主机 (网站) 要想通过域名被外部访问,必须在 DNS 服务器或 Windows 系统中注册访问网站时使用的域名,找到“C:\Windows\System32\drivers\etc”目录下的 hosts 文件,如下图所示:

img

编辑这个文件,将新添加的网站的域名和 IP 地址绑定在一起,这样我们就可以在浏览器中使用 www.gacl.cn 这个域名去访问 name 是 www.gacl.cn 那个虚拟主机里面管理的那些 Web 应用了。

img

使用浏览器通过域名“www.gacl.cn”访问“www.gacl.cn”这个虚拟主机下的 JavaWebDemo1 这个 Web 应用下的 1.jsp 这个 Web 资源,“www.gacl.cn”这个虚拟主机开放了一个 8080 端口,用户只能通过这个 8080 端口去访问 JavaWebDemo1 这个 Web 应用下的 1.jsp 这个 Web 资源。

img

四、浏览器与服务器交互的过程

4.1、浏览器与服务器交互图

img

当我们打开浏览器,在浏览器的地址栏中输入 URL 地址http://www.gacl.cn:8080/JavaWebDemo1/1.jsp去访问服务器上的 1.jsp 这个 Web 资源的过程中,浏览器和服务器都做了什么操作呢,我们是怎么在浏览器里面看到 1.jsp 这个 Web 资源里面的内容的呢?

浏览器和服务器做了以下几个操作:

1、浏览器根据主机名“www.gacl.cn”去操作系统的 Hosts 文件中查找主机名对应的 IP 地址。

2、浏览器如果在操作系统的 Hosts 文件中没有找到对应的 IP 地址,就去互联网上的 DNS 服务器上查找“www.gacl.cn”这台主机对应的 IP 地址。

3、浏览器查找到“www.gacl.cn”这台主机对应的 IP 地址后,就使用 IP 地址连接到 Web 服务器。

4、浏览器连接到 Web 服务器后,就使用 http 协议向服务器发送请求,发送请求的过程中,浏览器会向 Web 服务器以 Stream (流) 的形式传输数据,告诉 Web 服务器要访问服务器里面的哪个 Web 应用下的 Web 资源,如下图所示:

img

这就是浏览器向 Web 服务器发请求时向服务器传输的数据,解释一下“GET /JavaWebDemo1/1.jsp HTTP/1.1”这里面的内容:

GET:告诉 Web 服务器,浏览器是以 GET 的方式向服务器发请求。

/JavaWebDemo1/1.jsp:告诉 Web 服务器,浏览器要访问 JavaWebDemo1 应用里面的 1.jsp 这个 Web 资源。

HTTP/1.1:告诉 Web 服务器,浏览器是以 HTTP 协议请求的,使用的是 1.1 的版本。

5、浏览器做完上面 4 步工作后,就开始等待,等待 Web 服务器把自己想要访问的 1.jsp 这个 Web 资源传输给它。

6、服务器接收到浏览器传输的数据后,开始解析接收到的数据,服务器解析“GET /JavaWebDemo1/1.jsp HTTP/1.1”里面的内容时知道客户端浏览器要访问的是 JavaWebDemo1 应用里面的 1.jsp 这个 Web 资源,然后服务器就去读取 1.jsp 这个 Web 资源里面的内容,将读到的内容再以 Stream (流) 的形式传输给浏览器,如下图所示:

img

这个就是 Web 服务器传输给浏览器的数据。

7、浏览器拿到服务器传输给它的数据之后,就可以把数据展现给用户看了,如下图所示:

img

看到的这个“JavaWebDemo1”就是浏览器解析服务器发送回来的数据后的效果

服务器发送回来的数据:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 102
Date: Mon, 19 May 2014 14:25:14 GMT

<html>
    <head>
        <title>JavaWebDemo1</title>
    </head>
    <body>
        JavaWebDemo1
    </body>
</html>

这就是浏览器和服务器的交互过程。

五、JavaWeb 应用的组成结构

开发 JavaWeb 应用时,不同类型的文件有严格的存放规则,否则不仅可能会使 Web 应用无法访问,还会导致 Web 服务器启动报错。

img

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

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

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

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

web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">

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

</web-app>

这就是 web.xml 这个文件的格式。

标签:xml,Web,浏览器,Tomcat,学习,jsp,服务器
From: https://www.cnblogs.com/Higurashi-kagome/p/16601837.html

相关文章