【服务器】TOMCAT (on MAC)

本文详细介绍了在Mac上安装、配置、优化TOMCAT服务器的步骤,包括修改端口、配置虚拟目录、理解TOMCAT体系结构、解决乱码问题以及处理多版本安装。同时,讨论了Tomcat的连接器模式(BIO、NIO、APR)及其性能差异,强调了Apache与Tomcat的整合和Tomcat调优策略,如线程池设置、HTTP Connector参数调整等。
摘要由CSDN通过智能技术生成

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

  • 查看版本
    cd /Library/Tomcat-9.0.13/bin
    sh version.sh
    可查看到Server number: 9.0.13.0

  • 打开
    cd /Library/Tomcat-9.0.13/bin
    ./startup.sh
    (若Permission denied,赋予超级管理员权限sudo chmod 755 *.sh,再次./startup.sh

  • 查看
    浏览器输入 http://localhost:8080/

  • 关闭
    cd /Library/Tomcat-9.0.13/bin
    ./shutdown.sh

  • 于IDEA上配置:
    Run/Debug Configuration
    左上角单击+ - Tomcat Server - Local
    第一步,输入配置的Tomcat的Name;
    第二步,点击配置Tomcat:Configuration;
    第三步,在弹出的Application Servers中配置Tomcat Home(Library - Tomcat)和Library( - bin);Apply。

介绍

  • 是由 Apache 开发的一个Servlet 容器,实现了对 Servlet 和 JSP 的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。他可以运行你按照J2EE中的Servlet规范编写好的Java程序。
  • 简单的说它是一个Web网站的运行容器,把你写好的网站放进去就可以运行。
  • 由于 Tomcat 本身也内含了一个 HTTP 服务器,它也可以被视作一个单独的 Web 服务器。但是,不能将 Tomcat 和 Apache HTTP 服务器混淆,Apache HTTP 服务器是一个用 C 语言实现的 HTTP Web 服务器;这两个 HTTP web server 不是捆绑在一起的。Tomcat 包含了一个配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。
  • Apache只支持静态网页html,tomcat支持jsp动态网页。
  • Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展,处理动态网页部分。

war模式与war exploded的区别

  • war模式:将WEB工程以包的形式上传到服务器 ;
    发布模式,看名字也知道,这是先打成war包,再发布;

  • war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;
    直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。
    war exploded 适合开发模式,可以部署多个项目调试代码,不会跑到别的项目里面去,因为他不会把项目拷贝到webapp目录下。


Tomcat调优

可以从如下几个方面考虑优化:

  • 1.Tomcat 运行模式
  • 2.Tomcat 配置优化
  • 3.JVM 优化
  • 4.内核参数优化

————————————————————————————

  • 提问:Tomcat的缺省(默认)端口是多少,怎么修改

8080
Conf下的Serverl.xml中,修改:

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

(找准此段代码,要认准:protocal=HTTP这一项)
————————————————————————————

  • 提问:Tomcat Connector(Tomcat连接器)有几种运行模式(优化)?

Tomcat Connector(Tomcat连接器)有BIO、NIO、APR三种运行模式;

BIO
传统的Java I/O操作,同步且阻塞IO;
bio(blocking I/O):Tomcat在默认情况下就是以bio模式运行的。
这可以从守护线程的信息看出来:
Daemon Thread [ajp-bio-8080-AsyncTimeout](Running)

BIO的缺点:
1.当客户端多时,会创建大量的处理线程。每个线程都要占用栈空间和一些CPU时间。
2.阻塞可能带来频繁的上下文切换,而大部分的上下文切换是无意义的。
就一般而言,bio模式是三种运行模式中性能最低的一种。

NIO

Java 1.4开始支持,同步阻塞 或 同步非阻塞IO;
nio(non-blocking I/O)是非阻塞I/O操作。nio是一个基于缓冲区并能提供非阻塞I/O操作的Java API,它拥有比bio更好的并发运行性能。要让Tomcat以nio模式来运行也比较简单,我们只需要修改下server.xml文件:

<Connector port="8080" protocol="org.apache.coyote.http11.HttpNioProtocol"
               connectionTimeout="20000"
               redirectPort="8443"  />

守护线程的信息变了:
Daemon Thread [ajp-nio-8080-ClientPoller-0](Running)

NIO的工作原理包括:
1.由一个专门的线程来处理所有的 I/O 事件、并负责分发。
2.事件驱动机制,而不再同步地去监视事件。
3.线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的,减少无谓的线程切换。

NIO采用了 双向通道 channel 进行数据传输,而不是单向的 流 stream
在通道上我们可以注册指定的事件,一共有以下四种事件:
1.服务端接收客户端连接事件OP_ACCEPT(16)
2.客户端连接服务端事件 OP_CONNECT(8)
3.读事件 OP_READ(1)
4.写事件 OP_WRITE(4)

服务端和客户端各自维护一个管理通道的对象,我们称之为selector,该对象能检测一个或多个通道上的事件。
以服务端为例,如果服务端的selector上注册了读事件,某时刻客户端给服务端发送了一些数据,BIO这时会调用read()方法阻塞地读取数据,而NIO的服务端会在selector中添加一个读事件。
服务端的处理线程会轮询地访问selector,如果访问selector时发现有感兴趣的事件到达则处理这些事件;
如果没有感兴趣的事件到达则处理线程会一直阻塞,直到感兴趣的事件到达为止。

APR

apr(Apache portable Run-time libraries/Apache可移植运行库)
是Apache HTTP服务器的支持库。

Tomcat 7 使用的 Connector 默认启用 Apr 协议,但需要系统安装 Apr 库,否则就会使用 bio 方式。

在apr模式下,Tomcat将以JNI(Java Native Interface)的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大提高Tomcat对静态文件的处理性能。
Tomcat apr是在Tomcat上运行高并发应用的首选模式。

如果Tomcat不在apr模式下运行,在启动Tomcat的时候,我们可以在日志信息中看到类似如下信息:
十二月 02, 2016 8:24:09 下午 org.apache.catalina.core.AprLifecycleListener init 信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:

要让Tomcat以apr模式运行,Tomcat 7.0前后有差别:

Tomcat 7.0.30之后,只需要再次修改protocol为:
org.apache.coyote.http11.Http11AprProtocol

Tomcat 7.0.30之前,需要以下三个组件的支持:
1.APR library[APR库]
2.JNI wrappers for APR used by Tomcat (libtcnative)[Windows上一个名为tcnative-1.dll的动态链接库文件]
3.OpenSSL libraries[OpenSSL库]

————————————————————————————

  • 提问:Tomcat怎么优化/调优?

一、Tomcat本身的优化

修改一下 xml 配置文件中的参数,调整最大连接数,超时等。此外,我们安装 Tomcat 时,优化就已经开始了。

1、工作方式选择

为了提升性能,首先就要对代码进行动静分离,让 Tomcat 只负责 jsp 文件的解析工作。如采用 Apache 和 Tomcat 的整合方式,他们之间的连接方案有三种选择,JK、http_proxy 和 ajp_proxy。
相对于 JK 的连接方式,后两种在配置上虽简单,灵活性方面也一点都不逊色。
但就稳定性而言,JK 最能经受考验,所以建议采用 JK 的连接方式。

2、Connector连接器的配置

之前文件介绍过的 Tomcat 连接器的三种方式: bio、nio 和 apr,三种方式性能差别很大,apr 的性能最优, bio 的性能最差。而 Tomcat 7 使用的 Connector 默认就启用的 Apr 协议,但需要系统安装 Apr 库,否则就会使用 bio 方式。

3、配置文件优化

配置文件优化其实就是对 server.xml 优化,可以大大提高 Tomcat 的处理请求的能力,下面我们来看 Tomcat 容器内的优化。

默认配置下,Tomcat 会为每个连接器创建一个绑定的线程池(最大线程数 200),服务启动时,默认创建了 5 个空闲线程随时等待用户请求。

首先,打开 ${TOMCAT_HOME}/conf/server.xml,搜索【<Executor name=“tomcatThreadPool”】,开启并调整为:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="20" maxSpareThreads="50" maxIdleTime="60000"/>

然后,修改<Connector …>节点,增加 executor 属性,搜索【port=“8080”】,调整为

<Connector executor="tomcatThreadPool"

port="8080" protocol="HTTP/1.1"

URIEncoding="UTF-8"

connectionTimeout="30000"

enableLookups="false"

disableUploadTimeout="false"

connectionUploadTimeout="150000"

acceptCount="300"

keepAliveTimeout="120000"

maxKeepAliveRequests="1"

compression="on"

compressionMinSize="2048"

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"

maxThreads :Tomcat 使用线程来处理接收的每个请求,这个值表示 Tomcat 可创建的最大的线程数,默认值是 200

minSpareThreads:最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10。

maxSpareThreads:最大备用线程数,一旦创建的线程超过这个值,Tomcat 就会关闭不再需要的 socket 线程。

上边配置的参数,最大线程 500(一般服务器足以),要根据自己的实际情况合理设置,设置越大会耗费内存和 CPU,因为 CPU 疲于线程上下文切换,没有精力提供请求服务了,最小空闲线程数 20,线程最大空闲时间 60 秒,当然允许的最大线程连接数还受制于操作系统的内核参数设置,设置多大要根据自己的需求与环境。当然线程可以配置在“tomcatThreadPool”中,也可以直接配置在“Connector”中,但不可以重复配置。

URIEncoding:指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它 WEB 服务器软件配置方便,需要分别指定。

connnectionTimeout: 网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒,可根据检测实际情况,适当修改。

enableLookups: 是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置为 false。

disableUploadTimeout:上传时是否使用超时机制。

connectionUploadTimeout:上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。

acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100个。

keepAliveTimeout:长连接最大保持时间(毫秒),表示在下次请求过来之前,Tomcat 保持该连接多久,默认是使用 connectionTimeout 时间,-1 为不限制超时。

maxKeepAliveRequests:表示在服务器关闭之前,该连接最大支持的请求数。超过该请求数的连接也将被关闭,1表示禁用,-1表示不限制个数,默认100个,一般设置在100~200之间。

compression:是否对响应的数据进行 GZIP 压缩,off:表示禁止压缩;on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off,压缩数据后可以有效的减少页面的大小,一般可以减小1/3左右,节省带宽。

compressionMinSize:表示压缩响应的最小值,只有当响应报文大小大于这个值的时候才会对报文进行压缩,如果开启了压缩功能,默认值就是2048。

compressableMimeType:压缩类型,指定对哪些类型的文件进行数据压缩。

noCompressionUserAgents="gozilla, traviata": 对于以下的浏览器,不启用压缩。

如果已经对代码进行了动静分离,静态页面和图片等数据就不需要 Tomcat 处理了,那么也就不需要配置在 Tomcat 中配置压缩了。

以上是一些常用的配置参数属性,当然还有好多其它的参数设置,还可以继续深入的优化,HTTP Connector 与 AJP Connector 的参数属性值,可以参考官方文档的详细说明:

https://tomcat.apache.org/tomcat-7.0-doc/config/http.html

https://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html
————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————

  • 提问:

————————————————————————————


配置

提问:NginX + TOMCAT 负载均衡?
配合查看:Nginx + 反向代理,页面搜索:NginX + Tomcat 实现负载均衡
https://blog.csdn.net/weixin_42915286/article/details/90373041
————————————————

提问:在IDEA中,将SpringMVC项目war exploded配置到TOMCAT根目录下

为什么要这样配置?
因为在IDEA中配置SpringMVC项目,项目默认保存在制定位置;
在项目中实现上传文件功能(若保存在本地文件夹),检测文件是否显示在本地文件夹中,直接查看项目文件夹无效;
而直接查看TOMCAT根目录下的webapps,又不存在该项目文件夹,如图:
在这里插入图片描述

我们需要在IDEA设置中将项目war exploded部署到TOMCAT根目录下:

Run/Debug Configuration 中,最好设置下Application context名;
在这里插入图片描述
点击“一支笔”LOGO,进入Artifacts模块,设置Output directory;
在这里插入图片描述
在TOMCAT - webapps 下新建一个文件夹为项目存储地址,最好命名为项目名;

在这里插入图片描述

在这里插入图片描述
重启项目即可生效。
——————————————————————————————————
在IDEA中使用一个Tomcat部署两个项目
一个Tomcat部署两个项目的时候必须要配置不同的Application Context才可以区分不同的项目,后面可以加上/,如/one/形式,但启动时会报错,不过不影响访问。
在这里插入图片描述
然后启动tomcat,直接在浏览器中根据不同的url访问不同的项目即可。
——————————————————————————————————
在IDEA中多个Tomcat来部署多个不同的项目
该方式适合中大型项目,多项目之间互不干扰。
https://blog.csdn.net/alexshi5/article/details/79917962

——————————————————————————————————

Server.xml

https://www.cnblogs.com/kismetv/p/7228274.html

如何在Server.xml中修改端口号?
文档中有三处port填写处,分别代表不同意思;
第二行protocol="HTTP/1.1"处:更改浏览器输出的URL
修改示范:

<Server port="8005" shutdown="SHUTDOWN"> // 比如:8085 改成 8086
<Connector port="8080" protocol="HTTP/1.1" // 比如:8080 改成 8081
<Connector port="8009" protocol="AJP/1.3" // 比如:8009 改成 8010

————————————————
Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。

通过配置Connector,可以控制请求Service的协议及端口号。在第一部分的例子中,Service包含两个Connector:

1 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
2 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

(1)通过配置第1个Connector,客户端可以 通过8080端口号使用http协议访问Tomcat
其中,protocol属性规定了请求的协议,port规定了请求的端口号,redirectPort表示当强制要求https而请求是http时,重定向至端口号为8443的Connector,connectionTimeout表示连接的超时时间。

在这个例子中,Tomcat监听HTTP请求,使用的是8080端口,而不是正式的80端口;实际上,在正式的生产环境中,Tomcat也常常监听8080端口,而不是80端口。这是因为在生产环境中,很少将Tomcat直接对外开放接收请求,而是在Tomcat和客户端之间加一层代理服务器(如nginx),用于请求的转发、负载均衡、处理静态文件等;通过代理服务器访问Tomcat时,是在局域网中,因此一般仍使用8080端口。

(2)通过配置第2个Connector,客户端可以 通过8009端口号使用AJP协议访问Tomcat
AJP协议负责和其他的HTTP服务器(如Apache)建立连接;在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。之所以使用Tomcat和其他服务器集成,是因为Tomcat可以用作Servlet/JSP容器,但是对静态资源的处理速度较慢,不如Apache和IIS等HTTP服务器;因此常常将Tomcat与Apache等集成,前者作Servlet容器,后者处理静态资源,而AJP协议便负责Tomcat和Apache的连接。

安装

  • 下载:官网有压缩包 https://tomcat.apache.org/download-90.cgi
    在这里插入图片描述
    下载解压放入电脑盘(建议Library)(为求方便,此时把文件名改成了Tomcat;若要安装多版本,当然写Tomcat+版本号 更好);
  • 配置:设置文件的读写执行权限。(配置了他,浏览器localhost:xxxx才可显示首页)
    打开Terminal输入 sudo chmod 755 /Library/Tomcat/bin/*.sh 回车(这里需要输入管理员密码);(sudo为系统超级管理员;755 代表用户对该文件拥有读,写,执行的权限;同组其他人员拥有执行和读的权限,没有写的权限,其他用户的权限和同组人员权限一样;777代表user,group ,others ,都有读写和可执行权限。)

在这里插入图片描述
在IDEA中部署:
输入Tomcat Home和Tomcat base directory:都写/Library/Tomcat根目录URL
在这里插入图片描述
此图红色报错原因:
最初安装tomcat9时,根目录就叫Tomcat;后来将根目录文件名改成Tomcat-9.0.13;
而根目录中的jsp.api和servlet.api的URL还未更新成Tomcat-9.0.13,更新即可消除报错。

安装后必备修改

1.SpringMVC中,TOMCAT对GET和POST请求处理方式是不同的;
TOMCAT映射GET方法后,文本中的中文本应无乱码(POST方法出现乱码应该配置过滤器+静态资源不过滤),如若出现乱码,应该在server.xml中修改<Connector>如下:

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

详细信息与后续问题参考:
【框架】Spring MVC 介绍 + 问题汇总 https://blog.csdn.net/weixin_42915286/article/details/84325143
页面搜索server.xml

2.允许文件读写(单独复制一份Tomcat,用来作为文件服务器,为了跨服务器文件上传)
https://www.cnblogs.com/libo0125ok/p/7773898.html
/Library/Tomcat/conf/web.xml中添加此段:

        <init-param>
            <param-name>randomly</param-name>
            <param-value>false</param-value>
        </init-param>

在这里插入图片描述
3.Server.xml做一些端口修改(单独复制一份Tomcat,用来作为文件服务器,为了跨服务器文件上传)
https://www.cnblogs.com/libo0125ok/p/7773898.html
/Library/Tomcat-8.5.37/conf/server.xml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

特别注意:

若TOMCAT在IDE中部署不起来,可能是根目录下/Library/Tomcat-8.5.37/conf/server.xml有部署代码,如:

<Context docBase="springmvcdemo" path="/imgae" reloadable="true" source="org........"/></Host>
</Engine>
</Service>
</Server>

需要把这几行代码删除。

MAC上安装多个版本TOMCAT的方法

此处需要安装两个版本,已经存在Tomcat-9.0.13,需要新增一个Tomcat-8.5.37

官网下载Tomcat-8.5.37,并安装;

一./Library/Tomcat-8.5.37/conf/server.xml需要修改:

1.Server Port

<Server port="8005" shutdown="SHUTDOWN">
——————————————————————————————————————————
<Server port="8015" shutdown="SHUTDOWN">

2.Connector

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

3.AJP

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 
—————————————————————————————————————————————————————————————————
<Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />

————————————————————

二./Library/Tomcat-8.5.37/bin/startup.bat需要修改:

把其中所有CATALINA_HOME替换为CATALINA_HOME_8081

————————————————————

三./Library/Tomcat-8.5.37/bin/catalina.bat需要修改:

把其中所有CATALINA_HOME替换为CATALINA_HOME_8081

————————————————————
最后,如上文普通安装所示:
配置文件的读写执行权限。(配置了他,浏览器localhost:xxxx才可显示首页)
打开Terminal输入 sudo chmod 755 /Library/Tomcat-8.5.37/bin/*.sh 回车。
————————————————————
启动服务器;
浏览器中打开 localhost:8081 试试。
————————————————————
IDEA中部署:
在这里插入图片描述

Tomcat - logs - CATALINA

logs文件夹存放Tomcat 的日志文件,打开logs文件夹,可以看到里面的log文件,其中有一个以"catalina.yyyy-MM-dd.log"形式命名的log文件,例如"catalina.2014-05-17.log"日志文件就是记录Tomcat服务器2014-05-17这一天的运行情况。
在这里插入图片描述

在这里插入图片描述

日志信息里面清楚的记录了Tomcat服务器的运行情况,如果因为8080端口被占用而无法正常启动,就会记录如上图所示的异常信息,通过查看异常信息,我们就可知道Tomcat服务器为什么不能够正常启动了!

总结:当Tomcat服务器无法正常启动时,首先检查是否配置了JAVA_HOME环境变量,然后再检查Tomcat服务器启动时的端口是否被别的应用程序占用了。

TOMCAT 伺服器端口的配置

TOMCAT - conf - servel.xml

Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件
如果想修改Tomcat服务器的启动端口,则可以在server.xml配置文件中的Connector节点进行的端口修改

在这里插入图片描述

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

  • BEFORE
    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
  • AFTER
    <Connector port="8081" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />

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

访问Tomcat服务器也必须以新的访问端口去访问:http://localhost:8081/

TOMCAT 伺服器虚拟目录的映射方式(3种)

  • Web应用开发好后,若想供外界访问,需要把web应用所在目录交给web伺服器管理,这个过程称之为虚似目录的映射

  • 1.在server.xml文件的host元素中配置

  • 2.让TOMCAT服务器自动映射

  • 3.在/conf/Catalina/localhost下自主添加.xml文件

1.在server.xml文件的host元素中配置

  • 找到server.xml文件的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元素有两个属性,

  • 1.path:用来配置虚似目录,必须以"/"开头。
  • 2.docBase:配置此虚似目录对应着硬盘上的Web应用所在目录。
    使用浏览器课访问"/JavaWebApp"这个虚拟目录下的1.jsp这个web资源

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

It is NOT recommended to place 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.

2.让TOMCAT服务器自动映射

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

例如:

  • 把电脑中的JavaWebDemoProject这个JavaWeb应用直接copy到tomcat服务器webapps目录中;
  • 此时Tomcat服务器就会自动为JavaWebDemoProject这个JavaWeb应用映射一个同名的虚拟目录"/JavaWebDemoProject",然后就可以使用浏览器访问这个JavaWeb应用的资源了。例如 http://localhost:8080/JavaWebDemoProject/1.jsp

3.在/conf/Catalina/localhost下自主添加.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文件的名字可以任意取,比如取名为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;

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

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

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

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

Tomcat服务器配置虚似主机(即配置一个网站)

在Tomcat服务器配置一个虚拟主机(网站),需要修改/Library/Tomcat/conf/server.xml这个配置文件,其中可以看到Tomcat服务器自带的一个名称为localhost的虚拟主机(网站),上文中已展示图片,使用<Host>...</Host>元素进行配置。

平时我们将开发好的JavaWeb应用放到webapps文件夹下,然后就可以使用http://localhost:端口号/JavaWebAppName的方式去访问了。

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

<Host name="www.gacl.cn" appBase="/xxx/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="/xxx/JavaWebApps",这里的JavaWebApps文件夹代表的不是一个项目的根目录,而是一个存放了一个或者多个JavaWeb应用的文件夹

通过hosts在系统中注册域名

编辑这个文件,将新添加的网站的域名和IP地址绑定在一起,这样我们就可以在浏览器中使用www.gacl.cn这个域名去访问name是www.gacl.cn那个虚拟主机里面管理的那些web应用了
编辑hosts方法:command+shift+G - 输入/private/etc/hosts - 启用editor编辑;
在这里插入图片描述
使用浏览器通过域名"www.gacl.cn"访问"www.gacl.cn"这个虚拟主机下的JavaWebDemo1这个web应用下的1.jsp这个web资源,"www.gacl.cn"这个虚拟主机开放了一个8080端口,用户只能通过这个8080端口去访问JavaWebDemo1这个web应用下的1.jsp这个web资源。
例如:

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

浏览器与服务器交互图
在这里插入图片描述

  • 服务器发送回来的数据:
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服务器启动报错.
在这里插入图片描述

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

WEB-INF:此文件夹必须位于WebRoot文件夹里,而且必须字母都要大写

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

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

Tomcat的体系结构

Tomcat服务器的启动是基于一个server.xml文件的。
Tomcat启动的时候首先会启动一个Server,Server里面就会启动Service,Service里面就会启动多个Connector,每一个连接器都在等待客户机的连接,当有用户使用浏览器去访问服务器上面的web资源时,首先是连接到Connector,Connector是不处理用户的请求的,而是将用户的请求交给一个Engine去处理**(Engine首先对接Client的请求)**,Engine接收到请求后就会解析用户想要访问的Host,然后将请求交给相应的Host,Host收到请求后就会解析出用户想要访问这个Host下面的哪一个Web应用,一个web应用对应一个Context。

参考博客:
http://www.cnblogs.com/xdp-gacl/p/3729033.html
https://www.cnblogs.com/xdp-gacl/p/3744053.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值