什么是TOMCAT?

    Tomcat和其他web服务器一样,可以响应HTML的请求,实际上Tomcat是Apache的服务器的扩展,但是运行时他是独立运行的。另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式,但是它的静态页面处理能力比较差。可以使用动静分离来提高站点性能。

JAVA

    Java的技术体系有三个分类:java2SE,java2EE,jave2ME(移动开发)。jdk其实相当于java2SE。java2EE相当于是在jdk中添加了一些企业级类库,像jsp,servlet,javamail...。servlet是为java开发提供便捷的构建web server接口,能够在前端为我们所写的web应用程序提供支持http  protocol的解析功能。能接受客户端请求,把请求转换成本地某个代码的执行,并把代码执行的结果通过响应报文的方式响应给客户端。Tomcat就是java2EE规范的不完整实现,为啥叫不完整呢?因为Tomcat只是实现了一部分重要常用的类库,不是所有的类库。

JSP处理流程

    程序员写的Jsp代码通过jasper这个中间引擎转换成纯java代码,java代码需要先编译成字节码才能运行,通过javac compiler编译成class类文件。类文件是servlet格式,需要调用servlet类库到JVM中,class文件才能在JVM中运行。运行java代码依赖很多类库,运行前必须要加载到jvm中。所以要构建一个jsp网站,需要jdk+servlet类库,jsp类库。Tomcat就是企业中常用来实现

    具体流程:

    .jsp----->jasper(属于jsp类库)----->.java----->java compiler(属于servlet类库)----->.class----->jvm(Java虚拟机)

Tomcat的安装

]#yum install -y java-1.8.0-openjdk-devel            <===前提
]#java -version                                      <===查看环境准备
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
]#yum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps tomcat-lib        <===后面不是必须装,建议装上

冷部署应用测试

]#mkdir  -pv /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF}
]#cd /usr/share/tomcat/webapps/test
]#vim index.jsp                        <===测试页面
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
        <head>
                <title>Test Page</title>
        </head>
        <body>
                <% out.println("hello world");
                %>
        </body>
</html>
]#systemctl start tomcat

测试

a44ebda4f88f7dc02656bd38d71e3200.png-wh_

在实际应用中,Tomcat是不直接接受前端客户端的请求,前端会有调度器来调度jsp请求至tomcat server。下面我们来简单实现tomcat的调度。

第一种:通过http反向代理至tomcat(http和tomcat在同一台主机上),使用proxy_http_module。

]#yum install httpd -y
]#cd /etc/httpd/conf.d
]#vim http-tomcat.conf
<VirtualHost *:80>
        servername www.a.com
        documentroot /usr/share/tomcat/webapps/ROOT
        proxyrequests off                    <===关闭正向代理
        proxyvia on                          <===响应报文中添加via首部 
        proxypreservehost on
        <proxy *>
                require all granted          <===包括下面,这两个授权仅在centos7以上版本中使用。之前的版本不需要
        </proxy>
        proxypass / http://127.0.0.1:8080/   <===默认tomcat是在8080端口
        proxypa***everse / http:127.0.0.1:8080/
        <location />
                require all granted        
        </location>
</virtualhost>

第二种:通过http的proxy_ajp_module反向代理至tomcat

]#vim ajp-tomcat.conf 
<VirtualHost *:80>
        servername www.a.com
        documentroot /usr/share/tomcat/webapps/ROOT
        proxyrequests off
        proxyvia on
        proxypreservehost on
        <proxy *>
                require all granted
        </proxy>
        proxypass / ajp://127.0.0.1:8009/        <===ajp默认通过8009监听
        proxypa***everse / ajp:127.0.0.1:8009/
        <location />
                require all granted
        </location>
</virtualhost>

第三种:通过nginx反向代理

]#vim nginx.conf
server {
    root /usr/share/tomcat/webapps/ROOT;
    index index.jsp index.html
    location ~* \.(jsp|do)$ {
        proxy_pass 
         }
  ......
}

    上面三种方法可以根据自己需求和生产环境选择,除了nginx和http有处理能力差距之外,其余并没有差别。这样通过上面的代理后,动态jsp文件转发到tomcat处理,静态文件代理自己处理,这样可以实现动静分离,当然还可以分的再细一点,这里就不再赘述了。