目录
1. 关闭防火墙,将安装Tomcat所需软件包传到/opt目录下
一、tomcat
1. Tomcat概述
Tomcat是Java语言开发的,Tomcat服务器是一个免费的开放源代码的Web应用服务器,是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人 共同开发而成。Tomcat属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常作为一个Serlet和JSP容器,单独运行在后端。
2. Tomcat的组件
Tomcat由一系列的组件构成,其中核心的组件有三个:
- Web容器:完成Web服务器的功能。
- Servlet容器:名字为catalina,用于处理Servlet代码。
- JSP容器:用于将JSP动态网页翻译成Servlet代码。
3. Java Servlet
Java Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。使用Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。与CGI(公共网关接口)功能相类似。
4. JSP
JSP全程Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头,以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
5. Tomcat顶层架构
- Tomcat中最顶层的容器是Server,代表着整个服务器,一个Server可以包含至少一个Service,用于具体提供服务。
- Service主要包含两个部分:Connector和Container。Tomcat的心脏就是这两个组件。这两个组件的作用:Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;Contain用于封装和管理Serverlet,以及具体处理Request请求。
- 一个Tomcat中只有一个Server,一个Server可以包含多个Service,一个Service只有一个Contianer,但是可以有多个Connector,因为一个服务可以有多个连接,如同时提供http和https链接,也可以提供向相同协议不同端口的连接。
- 多个Connect和一个Contaniner就形成了一个Service,有了Service就可以对外提供服务了,但是Service还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非Server莫属了!所以整个Tomcat的生命周期由Server控制。另外,上述的包含关系或者说是父子关系,都可以在tomcat的conf目录下的server.xml配置文件中看出。
- server.xml中定义,这会让Tomcat启动一个server实例(即一个JVM),它监听在8005端口以接收"SHUTDOWN"命令,如果接收到了就会关闭Tomcat。各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。
6. Container的子容器
Container用于封装和管理Servlet,以及具体处理Request请求,在Connector内部包含了4个子容器。
- Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine;
- Host,代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;
- Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;
- Wrapper:每一Wrapper封装着一个Servlet。
7. Tomcat请求过程
- 用户在浏览器中输入该网址,请求被发送到本机端口8080,被在哪里监听的Coyote HTTP/1.1 Connector获得;
- Connector把该请求交给他所在的Service的Engine(Container)来处理,并等待Engine的回应;
- Engine获得请求location/test/index.jsp,匹配所有的虚拟主机Host;
- Engine匹配到名为location的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理);
- path="/test"的Context获得请求/index.jsp,在他的mapping table中寻找出对应的Servlet。Context匹配到URL Pattern为*.jsp的Servlet,对应于JspServlet类;
- 构造HttpServletRequest对象和HttoServletResponse对象,作为参数调用JspServlet的doGet()或doPost(),执行业务逻辑、数据存储等;
- Context把执行完之后的HttpServletResponse对象返回给Host;
- Host并HttpServletResponse对象返回给Engine;
- Engine把HttpServletResponse对象返回给Connector;
- Connector把HttpServletResponse对象返回给客户Browser。
二、Tomcat安装部署
在部署Tomcat之前必须安装好jdk,因为jdk是Tomcat运行的必要环境。
1. 关闭防火墙,将安装Tomcat所需软件包传到/opt目录下
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
apache-tomcat-9.0.16.tar.gz jdk-8u201-linux-x64.rpm rh
[root@localhost opt]# systemctl stop firewalld
[root@localhost opt]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost opt]# setenforce 0
setenforce: SELinux is disabled
2. 安装JDK
[root@localhost opt]# java -version
#查看版本,当前系统已自带JDK
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
[root@localhost opt]# rpm -ivh jdk-8u201-linux-x64.rpm
#rpm安装jdk
[root@localhost opt]# java -version
#再次查看版本发现,安装未生效,仍是之前版本
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
3. 设置JDK环境变量
[root@localhost opt]# rpm -qpl jdk-8u201-linux-x64.rpm
#查看JDK文件目录/usr/java/jdk1.8.0_201-amd64
......
/usr/java/jdk1.8.0_201-amd64/src.zip
[root@localhost opt]# vim /etc/profile.d/java.sh
#也可在/etc.profile末行添加一下内容
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
#定义JAVA_HOME变量为JDK文件目录
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
#定义CLASSPATH变量为tools.jar和dt.jar的路径
export PATH=$JAVA_HOME/bin:$PATH
#将JAVA的bin目录加入到PATH变量
[root@localhost opt]# which java
/usr/bin/java
[root@localhost opt]# source /etc/profile.d/java.sh
[root@localhost opt]# which java
/usr/java/jdk1.8.0_201-amd64/bin/java
[root@localhost ~]# java -version
#查看JAVA版本,已更新
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
补充:
CLASSPATH:编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。