什么是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
测试
在实际应用中,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处理,静态文件代理自己处理,这样可以实现动静分离,当然还可以分的再细一点,这里就不再赘述了。
转载于:https://blog.51cto.com/maguofu/1980176