Untitled


tomcat 介绍

  Tomcat 服务器是一个免费的开放源代码的 servlet 容器,是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。Tomcat 本身是由 Java 开发而来,是 Java 2 EE技术体系的不完整实现。能够接收处理包含JSP程序的文件,并将执行结果构建成响应报文回复客户端。

tomcat 相关概念

在介绍 Tomcat 之前,我们先解释下面几个概念

  1. Servlet
    为了能让Web服务器与Web应用这两个不同的软件系统协作,需要一套标准接口,Servlet就是其中最主要的一个接口。该接口规定:Web服务器可以访问任意一个Web应用中实现Servlet接口的类。Web应用中用于被Web服务器动态调用的程序代码位于Servlet接口的实现类中。SUN公司(现在被Oracle收购了……)制定了Web应用于Web服务器进行协作的一系列标准Java接口(统称为Java Servlet API)。SUN公司还对Web服务器发布及运行Web应用的一些细节做了规约。SUN公司把这一系列标准Java接口和规约统称为Servlet规范。Servlet是一种运行在服务器上的小插件。
  2. Servlet 容器
    在Servlet规范中,把能够发布和运行JavaWeb应用的Web服务器称为Servlet容器,他的最主要特称是动态执行JavaWeb应用中的Servlet实现类中的程序代码。
  3. Tomcat
    Tomcat是Servlet容器,同时也是轻量级的Web服务器。这是它的两个身份!Apache Server、Nginx Server、Apache Tomcat都是Web服务器。Tomcat作为Web服务器时,主要负责实现HTTP传输等工作。Tomcat作为Servlet容器时,主要负责解析Request,生成ServletRequest、ServletResponse,将其传给相应的Servlet(调用service( )方法),再将Servlet的相应结果返回。上面内容出自:Servlet和Tomcat的基础知识

Alt text

  1. JRE(Java Runtime Environment)
    JRE(Java Runtime Environment ,Java 运行时环境),由 JVM(Java Virtual Machine,Java虚拟机) 和运行Java程序所需的类,库文件组成。有了JRE,Java程序就可以运行起来。
    JDK(Java Development Kit,Java语言软件开发工具包),由 JRE 和 Java 开发语言组成,如果你仅仅是运行Java程序,有了JRE就可以完成。若你还想开发Java程序的话,则需要安装JDK。

Alt text

通过上面的概念介绍,如果我们想让 Tomcat 服务器解释运行一个包含JSP脚本的WebApp,需要安装 JDK。因为Tomcat服务器将JSP转换为servlets后,需要JDK才能编译运行servlets。

Alt text


JDK 安装


方法一:通过yum源安装 OpenJDK

yum -y install java-1.8.0-openjdk-devel
# 通过安装 java-1.8.0-openjdk-devel 包后,会自动安装上依赖包
java-1.8.0-openjdk.x86_64
java-1.8.0-openjdk-headless.x86_64


方法二:通过rpm包安装 Oracle JDK

  1. oracle 官网上下载 JDK
    下载链接:Java SE Development Kit 8 Downloads
  2. 安装
yum -y install jdk-8u151-linux-x64.rpm
  1. 安装完成后,要配置JAVA_HOME环境变量,指向java的安装路径
[22@root src]# cat /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
[22@root src]# source /etc/profile.d/java.sh


Tomcat 安装


方法一:通过yum源安装 tomcat

yum -y install tomcat tomcat-lib tomcat-webapps tomcat-docs-webapp tomcat-admin-webapps


方法二:通过二进制文件安装 tomcat

  1. 官网上下载 tomcat
    下载链接:Tomcat 8 Software Downloads
  2. 安装
# 解压安装到 /usr/locat/ 目录下
tar -xf apache-tomcat-8.0.47.tar.gz
mv apache-tomcat-8.0.47 /usr/local/tomcat
cd /usr/local/tomcat/
# 创建账户tomcat 并赋予相应权限
adduser tomcat
chown :tomcat -R ./*
chown -R tomcat conf logs
  1. 安装完成后,要配置CATALINA_BASE环境变量,指向tomcat的安装路径,并创建PATH路径
[22@root local]# cat /etc/profile.d/tomcat.sh
export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin:$PATH
[22@root local]# source /etc/profile.d/tomcat.sh


Tomcat 配置文件

若使用yum源安装,安装完后tomcat的主路径为/usr/share/tomcat,结构如下

[21@root tomcat]# ls
bin conf lib logs temp webapps work
[21@root tomcat]# tree
.
├── bin
│ ├── bootstrap.jar
│ ├── catalina-tasks.xml
│ └── tomcat-juli.jar
├── conf -> /etc/tomcat
├── lib -> /usr/share/java/tomcat
├── logs -> /var/log/tomcat
├── temp -> /var/cache/tomcat/temp
├── webapps -> /var/lib/tomcat/webapps
└── work -> /var/cache/tomcat/work
  • bin : 程序文件目录
  • conf : 配置文件目录
  • lib : 库文件目录
  • logs : 日志文件目录
  • webapps : 存放JSP程序的目录
  • work : 工作区,JSP转换生成的 .java,.calss等文件存放于此目录下


Tomcat 配置文件组成

  • server.xml : 主配置文件
    server.xml文件组织结构如下所示,每个标签都是Tomcat的一个核心组件,每个组件都由一个Java“类”实现:
<Server>
<Service>
<connector/>
<connector/>
...
<Engine>
<Host>
<Context/>
<Context/>
...
</Host>
<Host>
...
</Host>
...
</Engine>
</Service>
</Server>
---
Server #顶级组件
Service #服务类组件
connector(http, https, ajp) # 连接器组件
Engine, Host, Context #容器类组件
valve, logger, realm, loader, manager #被嵌套的类
listener, cluster #集群类组件
  • web.xml:每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置;
  • context.xml:每个webapp都可以使用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认配置;
  • tomcat-users.xml:用户认证的账号和密码文件;角色(role),用户(User);此文件在tomcat启动时被装入内存;
  • catalina.policy:当使用-security选项启动tomcat时,用于为tomcat设置安全策略;
    catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;
  • logging.properties:日志系统相关的配置;


实例


实例1 : 同一台机上实现动静分离,nginx做反向代理和Web服务器,tomcat做JSP动态资源服务器

Alt text

  1. 172.18.17.21 服务器上安装 openjdk,tomcat,nginx。
  2. 首先配置tomcat服务器,然后实现nginx的反向代理
  3. 修改server.xml配置文件,创建一个新的虚拟主机
# 创建自定义的目录文件
[21@root ROOT]# mkdir /app/webapps/{META-INF,WEB-INF,calsses,lib,logs,ROOT} -p
chown -R :tomcat /app/webapp/
chown -R tomcat /app/webapps/logs
# 创建虚拟主机
[21@root webapp]# vim /etc/tomcat/tomcat.conf
...
<Host name="www.zhubiaook.com" appBase="/app/webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/app/webapps/logs" prefix="access." suffix=".log" pattern="%h %l %u %t "%r" %s %b" />
</Host>
...
  1. 创建JSP测试页
[21@root ROOT]# cd /app/webapp/ROOT/
[21@root ROOT]# cat index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<%
out.println("Hello,World! I'm Tomcat Server...");
%>
</body>
</html>
  1. 配置 nginx 实现动静分离和反向代理
[21@root logs]# cat /etc/nginx/conf.d/virtual.conf
server {
listen 80;
server_name www.zhubiaook.com;
root /app/web;
location \ {
index index.html;
}
location ~* \.(jsp|do)$ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
}
  1. 创建 html 测试页
mkdir /app/web
echo "<h1>Hello,world! I'm Nginx Proxy Server...<h1>" > /app/web/index.html
  1. 测试

Alt text


实例2: 同一台机上实现动静分离,httpd做反向代理和Web服务器,tomcat做JSP动态资源服务器。并且分别实现httpd与tomcat之间通过http协议和ajp(Apache Jserv Protocol)协议通信。

在实例1 的基础上,将nginx反向代理替换成httpd反向代理

Alt text

  1. 安装httpd
  2. 配置httpd反向代理和动静分离
[21@root logs]# cat /etc/httpd/conf.d/virtual.conf
<VirtualHost *:80>
ServerName www.zhubiaook.com
DocumentRoot "/app/web"
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
ProxyPassMatch "^.*\.(jsp|on)$" "http://127.0.0.1:8080/"
<Location />
Require all granted
</Location>
</VirtualHost>
  1. 创建静态测试主页
echo "<h1>Hello,world! I'm Httpd proxy Server...<h1>" > /app/web/index.html
  1. 测试

Alt text

  1. httpd与tomcat通讯的协议换成ajp

Alt text
修改httpd配置文件,将反向代理的URL中的 scheme 由http替换成ajp,并修改端口为8009,因为Tomcat服务器上ajp监听在8009端口上。

[21@root logs]# cat /etc/httpd/conf.d/virtual.conf
<VirtualHost *:80>
ServerName www.zhubiaook.com
DocumentRoot "/app/web"
ProxyRequests Off
ProxyVia On
ProxyPreserveHost On
ProxyPassMatch "^.*\.(jsp|on)$" "ajp://127.0.0.1:8009/"
<Location />
Require all granted
</Location>
</VirtualHost>