tomcat
文章目录
Tomcat简介
tomcat是一个免费的,开放源代码的Web应用服务器,是Apache软件基金会项目中的一个核心项目,由Apache ,Sun和一些公司以及个人共同开发而成,深受Java爱好者的喜爱,是一款比较流行的web应用服务器。
Tomcat由一系列的组件构成,其中核心的组件有三个:
- web容器:完成web服务器的功能。
- servlet容器:名字为catalina,用于处理Servlet代码。
- JSP容器:用于将JSP动态网页翻译成Servlet代码。
因此Tomcat是web应用服务器,也是一个Servlet/JSP容器。Tomcat作为 Servlet容器,负责处理客户请求,把请求传送给servlet,并将servlet的响应传送回给客户。
什么是servlet
Servlet 是 Java Servlet 的简称,可以理解为是一个服务连接器,是用Java编写的服务器端程序,具有独立于平台和协议的特性,简单的理解: servlet就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。
什么是JSP
JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用JSP 标签在HTML,网页中插入Java代码。标签通常以 <% 开头,以 %> 结束。
JSP是一种Java servlet,主要用于实现Java web 应用程序的用户界面部分。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
Tomcat 功能组件结构
Tomcat的核心功能有两个,分别是负责接收和反馈外部请求的连接器Connector,和负责处理请求的容器Container:其中连接器和容器相辅相成,一起构成了基本的 web服务Service。每个Tomcat服务器可以管理多个Service。
**Conector: 负责对外接收和响应请求。**它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
**Container: 负责对内处理业务逻辑。**其内部由 Engine、Host、Context和wrapper 四个容器组成,用于管理和调用Servlet相关逻辑。
Service:对外提供的web服务。主要包含Connector和 Container两个核心组件,以及其他功能组件。Tomcat可以管理多个Service,且各Service 之间相互独立
Container 结构分析
每个Service 会包含一个Container容器。在Container内部包含了4个子容器:4个子容器的作用分别是:
- (1) Engine:引擎,用来管理多个虚拟主机,一个Service最多只能有一个Engine:
- (2)Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;
- (3)Context:代表一个 web 应用,包含多个Servlet封装器;
- (4) wrapper:封装器,容器的最底层。每一Wrapper封装着一个Servlet,负责对象实例的创建、执行和销毁功能。
Engine、Host、Context和 wrapper,这四个容器之间属于父子关系。
容器由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个web应用。每个web应用会有多个Servlet封装器
Tomcat请求过程
- 1、用户在浏览器中输入网址,请求被发送到本机端口8080,被在那里监听的 Connector获得;
- 2、Connector 把该请求交给它所在的Service 的 Engine (Container)来处理,并等待Engine的回应;
- 3、请求在Engine、Host、Context和Wwrapper 这四个容器之间层层调用,最后在Servlet 中执行对应的业务逻辑、数据存储等。
- 4、执行完之后的请求响应在Context、Host、Engine容器之间层层返回,最后返回给Connector,并通过Connector 返回给客户端。
常见的中间件
一般本地开发的话,小项目,或者是个人开发建议使用tomcat;
linux系统建议使用jetty或apache hpppd;
大型的项目就用JBOSS或webloigc;
大项目或者商业项目一般采用:weblgoic/webshere,其他的还有jboss、glasshfish等;
一些示例项目或者小项目常采用jetty;
tomcat , jboss, weblogic, websphere 一般项目tomcat就可以了。
tomcat项目部署
java环境安装
#安装jdk环境
[root@localhost ~]# yum -y install java-17-openjdk*
#查看安装的版本
[root@localhost test]# java -version
openjdk version "17.0.1" 2021-10-19 LTS
OpenJDK Runtime Environment 21.9 (build 17.0.1+12-LTS)
OpenJDK 64-Bit Server VM 21.9 (build 17.0.1+12-LTS, mixed mode, sharing)
tomcat部署
官网下载地址:
https://archive.apache.org/dist/tomcat/tomcat-10/v10.0.8/bin/apache-tomcat-10.0.8.tar.gz
#下载tomcat
[root@localhost src]# wget https://archive.apache.org/dist/tomcat/tomcat-10/v10.0.8/bin/apache-tomcat-10.0.8.tar.gz
--2022-09-27 17:49:47-- https://archive.apache.org/dist/tomcat/tomcat-10/v10.0.8/bin/apache-tomcat-10.0.8.tar.gz
Resolving archive.apache.org (archive.apache.org)... 138.201.131.134, 2a01:4f8:172:2ec5::2
Connecting to archive.apache.org (archive.apache.org)|138.201.131.134|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11849843 (11M) [application/x-gzip]
Saving to: 'apache-tomcat-10.0.8.tar.gz'
apache-tomcat-10.0.8.tar.gz 100%[==========================================>] 11.30M 52.6KB/s in 3m 22s
2022-09-27 17:53:18 (57.2 KB/s) - 'apache-tomcat-10.0.8.tar.gz' saved [11849843/11849843]
#解压,做个软连接
[root@localhost src]# tar xf apache-tomcat-10.0.8.tar.gz -C /usr/local/
[root@localhost src]# ls
apache-tomcat-10.0.8 debug kernels
[root@localhost local]# ln -s apache-tomcat-10.0.8/ tomcat
[root@localhost local]# ll
total 0
drwxr-xr-x. 2 root root 6 Jun 22 2021 bin
drwxr-xr-x. 2 root root 6 Jun 22 2021 etc
drwxr-xr-x. 2 root root 6 Jun 22 2021 games
drwxr-xr-x 5 root root 42 Sep 27 15:21 haproxy
drwxr-xr-x. 2 root root 6 Jun 22 2021 include
drwxr-xr-x. 2 root root 6 Jun 22 2021 lib
drwxr-xr-x. 3 root root 17 Jun 27 20:01 lib64
drwxr-xr-x. 2 root root 6 Jun 22 2021 libexec
drwxr-xr-x. 2 root root 6 Jun 22 2021 sbin
drwxr-xr-x. 5 root root 49 Jun 27 20:01 share
drwxr-xr-x. 2 root root 6 Jun 22 2021 src
lrwxrwxrwx 1 root root 21 Sep 27 17:54 tomcat -> apache-tomcat-10.0.8/
#写一个hello world的java页面
[root@localhost tomcat]# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs webapps
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib temp work
[root@localhost tomcat]# cd webapps/
[root@localhost webapps]# mkdir test
[root@localhost webapps]# ls
ROOT docs examples host-manager manager test
[root@localhost webapps]# cd test/
[root@localhost test]# vim index.jsp
<html>
<head>
<title>test page</title>
</head>
<body>
<%
out.println("Hellow World");
%>
</body>
</html>
[root@localhost test]# ll
total 4
-rw-r--r-- 1 root root 111 Sep 27 18:08 index.jsp
#配置环境变量启动tomcat
[root@localhost test]# echo 'export PATH=/usr/local/tomcat/bin:$PATH' > /etc/profile.d/tomcat.sh
[root@localhost test]# source /etc/profile.d/tomcat.sh
[root@localhost tomcat]# /usr/src/tomcat/bin/catalina.sh start
Using CATALINA_BASE: /usr/src/tomcat
Using CATALINA_HOME: /usr/src/tomcat
Using CATALINA_TMPDIR: /usr/src/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/src/tomcat/bin/bootstrap.jar:/usr/src/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
#查看端口号
[root@localhost tomcat]# ss -anlt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 [::]:22 [::]:*
浏览器访问网页
访问Host Manager界面
#添加图形化角色
[root@localhost tomcat]# vim conf/tomcat-users.xml
<role rolename="admin-gui"/>
<user username="tomcat" password="123456" roles="admin-gui"/>
</tomcat-users>
#配置context.xml文件
[root@localhost META-INF]# vim context.xml
<Context antiResourceLocking="false" privileged="true" >
<CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
sameSiteCookies="strict" />
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\.168\.17\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
#重启服务
[root@localhost META-INF]# /usr/src/tomcat/bin/catalina.sh stop
Using CATALINA_BASE: /usr/src/tomcat
Using CATALINA_HOME: /usr/src/tomcat
Using CATALINA_TMPDIR: /usr/src/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/src/tomcat/bin/bootstrap.jar:/usr/src/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
[root@localhost META-INF]# /usr/src/tomcat/bin/catalina.sh start
Using CATALINA_BASE: /usr/src/tomcat
Using CATALINA_HOME: /usr/src/tomcat
Using CATALINA_TMPDIR: /usr/src/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/src/tomcat/bin/bootstrap.jar:/usr/src/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
验证:
访问Server Status
#编辑tomcat-users.xml
[root@localhost conf]# vim tomcat-users.xml
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="123456" roles="admin-gui,manager-gui"/>
</tomcat-users>
#配置context.xml文件
[root@localhost ~]# vim /usr/src/tomcat/webapps/manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" >
<CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
sameSiteCookies="strict" />
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\.168\.17.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
#重启服务
[root@localhost ~]# /usr/src/tomcat/bin/catalina.sh stop
Using CATALINA_BASE: /usr/src/tomcat
Using CATALINA_HOME: /usr/src/tomcat
Using CATALINA_TMPDIR: /usr/src/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/src/tomcat/bin/bootstrap.jar:/usr/src/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
[root@localhost ~]# /usr/src/tomcat/bin/catalina.sh start
Using CATALINA_BASE: /usr/src/tomcat
Using CATALINA_HOME: /usr/src/tomcat
Using CATALINA_TMPDIR: /usr/src/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/src/tomcat/bin/bootstrap.jar:/usr/src/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
验证: