web服务器和客户端大致工作流程为:客户端向web服务器发送一个HTTP请求,web服务器接收一个请求,向客户端响应一个http请求。这里面会涉及服务端(Servlet-side服务器处理数据)技术,如:socket、公共调用接口(CGI,FastCGI,servlets)、动态异步传输(ajax)、Web Service(rest\soap)、服务器插件、数据库(ODBC/JDBC)等技术。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,可解析http协议,它使用服务器端技术。
下载好的tomcat文件如下:
根目录有可执行文件夹(bin)、配置文件夹(conf)、lib(库文件夹)、logs(日志)、temp(临时文件夹)、webapps(网页应用程序)、work(运行时生成的文件夹),以及license、notice几个文件。
LICENSE:许可证,记录tomcat的一些条款,一些开源的协议。
NOTICE:注意事项。记录tomcat的新的通知,公告。
RELEASE-NOTES:发行版本说明,一些捆绑的API,新特性等等。
RUNNING.txt:运行环境以及怎样配置参数,变量,启动等等。
bin
bin文件夹下面放的是可执行性文件。其中:bat/exe文件是windows下可执行的脚本文件;sh文件时Linux/Unix下可执行的脚本文件。
bootstrap.jar 从文件名可以看出这个jar包是引导程序jar包,是tomcat的启动入口程序。
catalina.bat tomcat启动、关闭脚本,shutdown.bat 、service.bat、digest.bat 、version.bat 都是它的拆分,如:catalina start、catalina run、catalina stop。
catalina.sh文件作用同catalina.bat,在Linux/Unix系统下运行。
catalina-tasks.xml 配置文件,主要是引入各种jar包。
commons-daemon-native.tar.gz Linux/Unix下。
configtest.bat 检测语法是否正确的脚本文件。
cpappend.bat 这个脚本可以这样理解,classpath(cp)append就是将指定参数添加到classpath里面。
digest.bat 加密工具,digest -a md5 -e utf-8 1 (表示采用加密算法为md5,字符编码为utf-8,加密字符串为1)。
service.bat 注册tomcat为服务或者守护进程,service install 安装tomcat服务,service uninstall 卸载tomcat服务。
setclasspath.bat 设置类路径和环境变量。
shutdown.bat 主要是检查catalina.bat 执行所需环境,并调用catalina.bat 批处理文件关闭tomcat服务。
startup.bat 主要是检查catalina.bat 执行所需环境,并调用catalina.bat 批处理文件启动tomcat服务。
tcnative-1.dll 加速器组件,可以提高性能。
tomcat8.exe 将tomcat为服务后启动tomcat8.exe,开启tomcat服务
tomcat8w.exe 类似于tomcat8.exe,启动tomcat为守护进程。
tomcat-juli.jar Apache Tomcat由一个自己的实现了java.util.logging多个关键元素的实现。这个实现被称为“JULI”。实现的核心组件是定制化的LogManager,可以获取运行在Tomcat中的不同web应用(以及不同的class loader)。他支持为应用配置单独的日志配置。当有web应用从内在中是被卸载时,会接到Tomcat的通知,以便他所引用的类可以被清除,避免内存泄露。
tomcat-native.tar.gz 里面放的是tomcat本地的library。
tool-wrapper.bat 用于digest脚本系统内部。这是最常用的tomcat命令行工具,用于封装可用于设置环境变量的脚本,并调用classpath中设置的完全符合限定的主要方法。
version.bat 一般是用来判断系统版本获取系统版本信息等。
conf
conf目录主要是用来存放tomcat的一些配置文件。
server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码 等等
web.xml可以设置tomcat支持的文件类型 ,context.xml可以用来配置数据源之类的 ,tomcat-users.xml用来配置管理tomcat的用户与权限
server.xml 配置文件也表明了tomcat各组件之间的关系。
(1)Tomcat中只有一个Server,一个Server可以有多个Service,一个Service可以有多个Connector和一个Container;
(2) Server掌管着整个Tomcat的生死大权;
(4)Service 是对外提供服务的;
(5)Connector用于接受请求并将请求封装成Request和Response来具体处理;
(6)Container用于封装和管理Servlet,以及具体处理request请求;
各组件介绍:
1、服务器(server):Tomcat的一个实例,通常一个JVM只能包含一个Tomcat实例;因此,一台物理服务器上可以在启动多个JVM的情况下在每一个JVM中启动一个Tomcat实例,每个实例分属于一个独立的管理端口。这是一个顶级组件。
2、服务(service):一个服务组件通常包含一个引擎和与此引擎相关联的一个或多个连接器。给服务命名可以方便管理员在日志文件中识别不同服务产生的日志。一个server可以包含多个service组件,但通常情下只为一个service指派一个server。
连接器类组件:
3、连接器(connectors):负责连接客户端(可以是浏览器或Web服务器)请求至Servlet容器内的Web应用程序,通常指的是接收客户发来请求的位置及服务器端分配的端口。默认端口通常是HTTP协议的8080,管理员也可以根据自己的需要改变此端口。一个引擎可以配置多个连接器,但这些连接器必须使用不同的端口。默认的连接器是基于HTTP/1.1的Coyote。同时,Tomcat也支持AJP、JServ和JK2连接器。
容器类组件:
4、引擎(Engine):引擎通是指处理请求的Servlet引擎组件,即Catalina Servlet引擎,它检查每一个请求的HTTP首部信息以辨别此请求应该发往哪个host或context,并将请求处理后的结果返回的相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个host组件。
5、主机(Host):主机组件类似于Apache中的虚拟主机,但在Tomcat中只支持基于FQDN的“虚拟主机”。一个引擎至少要包含一个主机组件。
6、上下文(Context):Context组件是最内层次的组件,它表示Web应用程序本身。配置一个Context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置。Context组件也可包含自定义的错误页,以实现在用户访问发生错误时提供友好的提示信息。
被嵌套类(nested)组件:
这类组件通常包含于容器类组件中以提供具有管理功能的服务,它们不能包含其它组件,但有些却可以由不同层次的容器各自配置。
7、阀门(Valve):用来拦截请求并在将其转至目标之前进行某种处理操作,类似于Servlet规范中定义的过滤器。Valve可以定义在任何容器类的组件中。Valve常被用来记录客户端请求、客户端IP地址和服务器等信息,这种处理技术通常被称作请求转储(request dumping)。请求转储valve记录请求客户端请求数据包中的HTTP首部信息和cookie信息文件中,响应转储valve则记录响应数据包首部信息和cookie信息至文件中。
8、日志记录器(Logger):用于记录组件内部的状态信息,可被用于除Context之外的任何容器中。日志记录的功能可被继承,因此,一个引擎级别的Logger将会记录引擎内部所有组件相关的信息,除非某内部组件定义了自己的Logger组件。
9、领域(Realm):用于用户的认证和授权;在配置一个应用程序时,管理员可以为每个资源或资源组定义角色及权限,而这些访问控制功能的生效需要通过Realm来实现。Realm的认证可以基于文本文件、数据库表、LDAP服务等来实现。Realm的效用会遍及整个引擎或顶级容器,因此,一个容器内的所有应用程序将共享用户资源。同时,Realm可以被其所在组件的子组件继承,也可以被子组件中定义的Realm所覆盖。
引擎(Engine):引擎是指处理请求的Servlet引擎组件,即Catalina Servlet引擎,它从HTTPconnector接收请求并响应请求。它检查每一个请求的HTTP首部信息以辨别此请求应该发往哪个host或context,并将请求处理后的结果返回的相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个host组件。
<Server>元素
它代表整个容器,是Tomcat实例的顶层元素.由org.apache.catalina.Server接口来定义.它包含一个<Service>元素.并且它不能做为任何元素的子元素.
<Server port="8005" shutdown="SHUTDOWN" debug="0">
1>className指定实现org.apache.catalina.Server接口的类.默认值为org.apache.catalina.core.StandardServer
2>port指定Tomcat监听shutdown命令端口.终止服务器运行时,必须在Tomcat服务器所在的机器上发出shutdown命令.该属性是必须的.
3>shutdown指定终止Tomcat服务器运行时,发给Tomcat服务器的shutdown监听端口的字符串.该属性必须设置
<Service>元素
该元素由org.apache.catalina.Service接口定义,它包含一个<Engine>元素,以及一个或多个<Connector>,这些Connector元素共享用同一个Engine元素
<Service name="Catalina">
<Service name="Apache">
第一个<Service>处理所有直接由Tomcat服务器接收的web客户请求.
第二个<Service>处理所有由Apahce服务器转发过来的Web客户请求
1>className 指定实现org.apahce.catalina.Service接口的类.默认为org.apahce.catalina.core.StandardService
2>name定义Service的名字
<Engine>元素
每个Service元素只能有一个Engine元素.元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求.由org.apahce.catalina.Engine接口定义.
<Engine name="Catalina" defaultHost="localhost" debug="0">
1>className指定实现Engine接口的类,默认值为StandardEngine
2>defaultHost指定处理客户的默认主机名,在<Engine>中的<Host>子元素中必须定义这一主机
3>name定义Engine的名字
在<Engine>可以包含如下元素<Logger>, <Realm>, <Value>, <Host>
<Host>元素
它由Host接口定义.一个Engine元素可以包含多个<Host>元素.每个<Host>的元素定义了一个虚拟主机.它包含了一个或多个Web应用.
<Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">
1>className指定实现Host接口的类.默认值为StandardHost
2>appBase指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于<CATALINA_HOME>的相对目录.如果没有此项,默认为<CATALINA_HOME>/webapps
3>autoDeploy如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用
4>unpackWARs如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为WAR文件
5>alias指定主机别名,可以指定多个别名
6>deployOnStartup如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用如果Web应用中的server.xml没有相应的<Context>元素,将采用Tomcat默认的Context
7>name定义虚拟主机的名字
在<Host>元素中可以包含如下子元素
<Logger>, <Realm>, <Value>, <Context>
<Context>元素
它由Context接口定义.是使用最频繁的元素.每个<Context元素代表了运行在虚拟主机上的单个Web应用.一个<Host>可以包含多个<Context>元素.每个web应用有唯一的一个相对应的Context代表web应用自身.servlet容器为第一个web应用创建一个ServletContext对象.
<Context path="/sample" docBase="sample" debug="0" reloadbale="true">
1>className指定实现Context的类,默认为StandardContext类
2>path指定访问Web应用的URL入口,注意/myweb,而不是myweb了事
3>reloadable如果这个属性设为true, Tomcat服务器在运行状态下会监视在WEB-INF/classes和Web-INF/lib目录CLASS文件的改运.如果监视到有class文件被更新,服务器自重新加载Web应用
3>cookies指定是否通过Cookies来支持Session,默认值为true
4>useNaming指定是否支持JNDI,默认值为了true
在<Context>元素中可以包含如下元素
<Logger>, <Realm>, <Resource>, <ResourceParams>
<Connector>元素
由Connector接口定义.<Connector>元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果.
<Connector port="8080" maxThread="50" minSpareThreads="25" maxSpareThread="75"
enableLookups="false" redirectPort="8443" acceptCount="100" debug="0"
connectionTimeout="20000" disableUploadTimeout="true" />
<Connection port="8009" enableLookups="false" redirectPort="8443" debug="0"
protocol="AJP/1.3" />
第一个Connector元素定义了一个HTTP Connector,它通过8080端口接收HTTP请求;第二个Connector元素定义了一个JD Connector,它通过8009端口接收由其它服务器转发过来的请求.
Connector元素共用属性
1>className指定实现Connector接口的类
2>enableLookups如果设为true,表示支持域名解析,可以把IP地址解析为主机名.WEB应用中调用request.getRemoteHost方法返回客户机主机名.默认值为true
3>redirectPort指定转发端口.如果当前端口只支持non-SSL请求,在需要安全通信的场命,将把客户请求转发至SSL的redirectPort端口
HttpConnector元素的属性
1>className实现Connector的类
2>port设定Tcp/IP端口,默认值为8080,如果把8080改成80,则只要输入http://localhost即可。因为TCP/IP的默认端口是80
3>address如果服务器有二个以上ip地址,此属性可以设定端口监听的ip地址.默认情况下,端口会监听服务器上所有的ip地址
4>bufferSize设定由端口创建的输入流的缓存大小.默认值为2048byte
5>protocol设定Http协议,默认值为HTTP/1.1
6>maxThreads设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200
7>acceptCount设定在监听端口队列的最大客户请求数量,默认值为10.如果队列已满,客户必须等待.
8>connectionTimeout定义建立客户连接超时的时间.如果为-1,表示不限制建立客户连接的时间
JkConnector的属性
1>className实现Connector的类
2>port设定AJP端口号
3>protocol必须设定为AJP/1.3
元素名
| 属性
| 解释
|
server | port | 指定一个端口,这个端口负责监听关闭tomcat的请求 |
shutdown | 指定向端口发送的命令字符串 | |
service | name | 指定service的名字 |
Connector(表示客户端和service之间的连接) | port | 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求 |
minProcessors | 服务器启动时创建的处理请求的线程数 | |
maxProcessors | 最大可以创建的处理请求的线程数 | |
enableLookups | 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址 | |
redirectPort | 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号 | |
acceptCount | 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理 | |
connectionTimeout | 指定超时的时间数(以毫秒为单位) | |
Engine(表示指定service中的请求处理机,接收和处理来自Connector的请求) | defaultHost | 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的 |
Context(表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范) | docBase | 应用程序的路径或者是WAR文件存放的路径 |
path | 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/**** | |
reloadable | 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序 | |
host(表示一个虚拟主机) | name | 指定主机名 |
appBase | 应用程序基本目录,即存放应用程序的目录 | |
unpackWARs | 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文件中运行应用程序 | |
Logger(表示日志,调试和错误信息) | className | 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口 |
prefix | 指定log文件的前缀 | |
suffix | 指定log文件的后缀 | |
timestamp | 如果为true,则log文件名中要加入时间,如下例:localhost_log.001-10-04.txt | |
Realm(表示存放用户名,密码及role的数据库) | className | 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口 |
Valve(功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样) | className | 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息 |
directory | 指定log文件存放的位置 | |
pattern | 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多 |
lib
lib目录主要用来存放tomcat运行需要加载的jar包。
logs
logs目录用来存放tomcat在运行过程中产生的日志文件,非常重要的是在控制台输出的日志。
webapps
webapps目录用来存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序。
work
work目录用来存放tomcat在运行时项目的编译后文件,例如JSP编译后的文件。
清空work目录,然后重启tomcat,可以达到清除缓存的作用。
经常用到的是bin、conf、webapps三个文件夹,
附件:tomcat配置网站完整过程。
一 什么是tomcat
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。
二 tomcat 的版本:
tomcat 现有的版本有tomcat 7 ,tomcat 8 tomcat8.5,tomcat 9
我们可以在图片中看到tomcat8.0版本后续也是不会再进行更新和升级了,我们可以使用tomcat8.5和9.0
三 tomcat的下载
3.1 tomcat9版本下载链接
https://tomcat.apache.org/download-90.cgi
3.2 tomcat8.5版本下载链接
https://tomcat.apache.org/download-80.cgi
我们可以根据我们需要版本和系统进行下载。
四 tomcat的安装
tomcat的安装,由于该应用常用在linux服务器上,我们的安装教程是基于centos7进行安装:
4.1 java环境配置
tomcat 9 版本需要java8以上才能支持
cd /tmp && wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
rpm -ivh jdk-8u131-linux-x64.rpm
环境变量:
vi + /etc/profile
JAVA_HOME=/usr/java/jdk1.8.0_131
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH export
JAVA_HOME CLASSPATH PATH
#加载环境变量source /etc/profile
4.2 tomcat安装
# 安装wgetyum install wget -y# 下载tomcat包cd /tmp &&wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-9/v9.0.13/bin/apache-tomcat-9.0.13.tar.gz# 解压tar -xzvf apache-tomcat-9.0.13.tar.gz# 移动到指定位置并重命名mv /tmp/apache-tomcat-9.0.13 /opt/tomcat9# 启动 tomcat/opt/tomcat9/bin/startup.sh
或者
/opt/tomcat9/bin/catalina.sh start# # 关闭tomcat/opt/tomcat9/bin/shutdown.sh
或者
/opt/tomcat9/bin/catalina.sh stop
还可以直接kill 进程号,当我们的tomcat是有用户进行访问的时候,我们杀死不了这个进程,只能通过强制杀死 kill -9# 查看当前的版本/opt/tomcat9/bin/version.sh# 开放端口tomcat 默认访问端口是8080,我们可以在conf目录的文件server.xml的69行进行端口更改。
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
如果是在阿里云进行配置的话,记得打开安全组的8080端口.
访问:
路径是 ip:8080(tomcat默认是绑定ip 0.0.0.0)
五 tomcat的目录结构
bin # 脚本启动目录conf #配置文件目录lib #tomcat运行的依赖包logs #日志文件目录temp #临时文件目录webapps # 用来存放应用程序
--docs # 文档
--examples # 示例
--host-manager # 虚拟主机web管理界面
--manager # 管理界面
--ROOT # 默认访问的应用程序work # 部署的Web应用程序的临时工作目录,当我们需要清除缓存的时候可以将该目录删除.然后重启动tomcat.
六 tomcat的初始化
根据需求来进行初始化
-
第一更改端口:
编辑配置文件 server.xml .
大约在69行,将 port = "8080"更改成我们想绑定的端口.<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
-
配置编码
为了避免程序上的一些请求和返回的中文乱码问题.我们需要配置.
编辑配置文件 server.xml .
大约在69行后,添加 useBodyEncodingForURI="true" URIEncoding="UTF-8"<Connector port="8080" protocol="HTTP/1.1" useBodyEncodingForURI="true" URIEncoding="UTF-8" connectionTimeout="20000" redirectPort="8443" />
-
配置文件
-
<Server port="8005" shutdown="SHUTDOWN"> <!-- 属性说明 port:指定一个端口,这个端口负责监听关闭Tomcat的请求 shutdown:向以上端口发送的关闭服务器的命令字符串 --> <Listener className="org.apache.catalina.core.AprLifecycleListener" /> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/> <GlobalNamingResources> <Environment name="simpleValue" type="java.lang.Integer" value="30"/> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <!-- 每个Service元素只能有一个Engine元素.元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求 --> <Service name="Catalina"> <!-- 属性说明 name:Service的名称 --> <!-- Connector元素: 由Connector接口定义.<Connector>元素代表与客户程序实际交互的组件,它负责接收客户请求,以及向客户返回响应结果. --> <Connector port="80" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" /> <!-- 属性说明 port:服务器连接器的端口号,该连接器将在指定端口侦听来自客户端的请求。 enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名; 若为false则不进行DNS查询,而是返回其ip地址。 redirectPort:服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号。 acceptCount:当所有可以使用的处理请求的线程都被用光时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,而返回Connection refused错误。 connectionTimeout:等待超时的时间数(以毫秒为单位)。 maxThreads:设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200。 protocol:必须设定为AJP/1.3协议。 address:如果服务器有两个以上IP地址,该属性可以设定端口监听的IP地址,默认情况下,端口会监听服务器上所有IP地址。 minProcessors:服务器启动时创建的处理请求的线程数,每个请求由一个线程负责。 maxProcessors:最多可以创建的处理请求的线程数。 minSpareThreads:最小备用线程 。 maxSpareThreads:最大备用线程。 debug:日志等级。 disableUploadTimeout:禁用上传超时,主要用于大数据上传时。 --> <Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> <!-- 负责和其他HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时就需要用到这个连接器。 --> <Engine name="Catalina" defaultHost="localhost"> <!-- 属性说明 name:对应$CATALINA_HOME/config/Catalina中的Catalina defaultHost:对应Host元素中的name属性,也就是和$CATALINA_HOME/config/Catalina/localhost中的localhost 缺省的处理请求的虚拟主机名,它至少与其中的一个Host元素的name属性值是一样的 debug:日志等级 --> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> <!-- 由Host接口定义.一个Engine元素可以包含多个<Host>元素. 每个<Host>的元素定义了一个虚拟主机.它包含了一个或多个Web应用. --> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <!-- 属性说明 name:在此例中一直被强调为$CATALINA_HOME/config/Catalina/localhost中的localhost虚拟主机名 debug:是日志的调试等级 appBase:默认的应用路径,也就是把应用放在一个目录下,并在autoDeploy为true的情况下,可自动部署应用此路径相对于$CATALINA_HOME/ (web applications的基本目录) unpackWARs:设置为true,在Web应用为*.war是,解压此WAR文件. 如果为true,则tomcat会自动将WAR文件解压;否则不解压,直接从WAR文件中运行应用程序. autoDeploy:默认为true,表示如果有新的WEB应用放入appBase 并且Tomcat在运行的情况下,自动载入应用 --> <Context path="/demm" docBase="E:\\projects\\demm\\WebRoot" debug="0" reloadable="true" > </Context> <!-- 属性说明 path:访问的URI,如:http://localhost/是我的应用的根目录,访问此应用将用:http://localhost/demm进行操作,此元素必须, 表示此web application的URL的前缀,用来匹配一个Context。请求的URL形式为http://localhost:8080/path/* docBase:WEB应用的目录,此目录必须符合Java WEB应用的规范,web application的文件存放路径或者是WAR文件存放路径。 debug:日志等级 reloadable:是否在程序有改动时重新载入,设置成true会影响性能,但可自动载入修改后的文件, 如果为true,则Tomcat将支持热部署,会自动检测web application的/WEB-INF/lib和/WEB-INF/classes目录的变化, 自动装载新的JSP和Servlet,我们可以在不重起Tomcat的情况下改变web application --> </Host> </Engine> </Service> </Server>
七 tomcat的启动
# 启动 tomcat/opt/tomcat9/bin/startup.sh
或者/opt/tomcat9/bin/catalina.sh start# # 关闭tomcat/opt/tomcat9/bin/shutdown.sh
或者/opt/tomcat9/bin/catalina.sh stop
还可以直接kill 进程号,当我们的tomcat是有用户进行访问的时候,我们杀死不了这个进程,只能通过强制杀死 kill -9# 查看当前的版本/opt/tomcat9/bin/version.sh
八 tomcat更改绑定ip
在生产环境我们经常有这样的需求,将tomcat的绑定ip更改.不让外部人可以直接访问.
tomcat默认的绑定是 0.0.0.0 ,也就意味着这样外网就可以访问我们的tomcat,
但是我们想要我们的tomcat不让外网访问
解决方法:
-
更改绑定ip,绑定127.0.0.1,这样就只能本机访问了
编辑配置文件 server.xml .
大约在69行,在配置端口的地方,添加 :address="127.0.0.1"<Connector port="8080" protocol="HTTP/1.1" address="127.0.0.1" connectionTimeout="20000" redirectPort="8443" />
-
更改防火墙规则,不对外开放8080端口.
firewall-cmd --remove-port=8080/tcp --permanentfirewall-cmd --reload
九 tomcat隐藏manager界面
通过nginx重定向的隐藏界面
十 jenkins使用插件自动部署tomcat
使用jenkins来进行发布war包
-
除了常规的将tomcat暂停后,进行删除原来的war包,scp传输新的war包,启动tomcat
-
还可以使用插件 deploy war/ear to a container ,通过tomcat的manager界面来进行 来进行发布。
deploy war/ear to a container:发布war包到服务器
deploy artifacts to maven reepository:发布到maven服务器
WAR/EAR files: 填的是生成的wa包的路径。ugou-admin/target/ugou-admin.war(实际路径是:/root/.jenkins/jobs/ugou-admin-online/workspace/ugou-admin/target/ugou-admin.war)
Context path: 填的是上传到tomcat的路径。即使用localhost/(content path设置的名字)来访问项目
比如我的项目访问路径是 :http://127.0.0.1/ugou-admin/ 那么这里我应该填入的就是 /ugou-admin
Container: 选择我们使用的tomcat版本。
Manager user name /Manager password: 填入我们在$CATALINA_BASE/conf/tomcat-users.xml 配置的用户名和密码
Tomcat URL : 填入我们的tomcat url 比如我们设置的端口是80 那么直接填入ip就行了 :http://127.0.0.1/,如果有端口,那么我们就需要填入对应的端口。
Deploy on failure : 构建失败是否还发布。勾选表示是,不勾选表示不是,生产环境建议不勾选。
十一 tomcat 部署项目的三种方法(补充)
11.1 方法一 把war包添加到webapps
直接将 war 包放在 ./webapps 下
tomcat 会自动将war解压
11.2 方法二 更改配置文件 server.xml(官方不建议使用该方法)
我们可以在 ./conf/目录下找到server.xml文件
我们需要在 里面添加上我们的项目的访问路径和存放路径配置
<Context path="/djx" docBase="/tmp/djx/" reloadable="true" />
path 指的是 访问路径
docBase 指的是项目存放路径
reloadable 设置为true表示Catalina将监视 /WEB-INF/classes/和/WEB-INF/lib的文件,一旦发生更改将自动重新加载Web应用程序。它可以在在开发的时候使用,但需要消耗更多资源,官方文档写到不建议在生产环境上使用,所以它的默认值是false.8.0版本文档
Set to true if you want Catalina to monitor classes in /WEB-INF/classes/ and /WEB-INF/lib for changes, and automatically reload the web application if a change is detected. This feature is very useful during application development, but it requires significant runtime overhead and is not recommended for use on deployed production applications. That's why the default setting for this attribute is false. You can use the Manager web application, however, to trigger reloads of deployed applications on demand.
配置示例:
11.3 方法三 使用xml配置文件(建议方法)
在 ./conf/Catalina/localhost/ 下添加xml配置文件.
示例: 我要让/tmp/www/ 里的网站部署在tomcat上 。
vim djx.xml # 文件的名称也就是我们后面访问时要在ip端口加的后缀
djx.xml 内容,docBase 后面填入项目的路径
<Context docBase="/tmp/www/" />
然后我们重启tomcat,然后在浏览器 192.168.1.198/djx/访问的文件名 即可访问到我们的项目文件了
11.4 注意点
注意点一
方法三中如果我想直接通过ip+端口就能直接访问到我部署的项目,那么我们这个xml 文件的名称就应该是 ROOT.xml(要全都大写哦)
第三种的文件命名示例:
注意点二
对于参数reloadable="true" ,在方法二特别说明了,大家注意。