Linux Tomcat
Linux Tomcat
Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上的组件. Servlet最常见的用途是扩展Java Web服务器功能,提供非常安全的,可移植的,易于使用的CGI替代品.
Web Container:JDK,Servlet,JSP;
客户端请求.jsp文件流程:
首先客户端发起请求.jsp文件,接着服务器端的JSP Container接收并处理这个请求(服务器先读取客户端请求的.jsp文件,然后将这个.jsp代码通过JSP engine翻译(Jasper)成Servlet代码(.java格式的),最后将.java代码编译成.class的类文件),然后将.class文件在JVM上面执行并将结果返回给接收客户端请求的Container,由它将结果构建成http的响应报文返回给客户端;
jsp -> jasper -> servlet -> complie -> bytecodes -> jvm
Tomcat核心组件:
catalina:servlet container
coyote:http connection
jasper:jsp engine
Tomcat Instance:运行中的Tomcat进程(Java进程)
<Server > 一个Tomcat实例;
<Service > 用于关联Connector和Engine;理解连接器发来的请求,将请求交由Engine进行处理;
<Connector /> 接收并解析用户请求,将请求映射为Engine中运行的代码,然后将运行结果构建成响应报文,响应给客户端;连接器支持http、ajp协议;
…
<Engine > Tomcat的核心组件,用于运行jsp或servlet代码;
<Host > 类似httpd中的虚拟主机
…
</Host>
</Engine>
</Service>
</Server>
Note:一个连Connector只能属于一个Engine,但是一个Engine可以有多个连接器;一个Service中只能有一个Engine但是可以包含多个Connector;一个Server中可以有多个Service,但是一般建议一个Server中只有一个Service;
Tomcat的运行模式:Tomcat本身包含web功能和servlet container;
standalone:通过内置的web server(http connector)来接收用户请求;
proxy:使用专门的web server服务处理用户的http请求;
in-process:http服务和tomcat部署在同一主机上;
network:http服务和tomcat部署于不同主机上;
安装Tomcat:
Tomcat是java程序,需要运行在JVM上,所以我们在部署Tomcat前需要搭建相应的环境,也就是需要安装JDK;
1.可以通过yum直接安装,也可以去JDK官网下载安装;
2.在官网下载时,需要先选择接受协议才能下载JDK
3.可以选择.rpm或.tar.gz格式的软件,前者直接安装即可,后者需要解压安装;
4.设置JDK的环境变量:当有程序需要用到java时,就会寻找此环境变量来确定java环境的位置;
rpm包安装方式:
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
. /etc/profile.d/java.sh
tar包安装方式:
tar xf jdk-8u201-linux-x64.tar.gz -C /usr/local/
cd /usr/local
ln -vs jdk1.8.0_201/ java
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java/
export PATH=$JAVA_HOME/bin:$PATH
. /etc/profile.d/java.sh
1.官网下载:https://tomcat.apache.org/download-80.cgi或使用yum直接安装;
2.解压tar包(tar包安装方式)
tar xf apache-tomcat-8.5.39.tar.gz -C /usr/local
cd /usr/local
ln -sv apache-tomcat-8.5.39/ tomcat
3.配置文件目录:
/usr/local/tomcat/conf/
server.xml 主配置文件
context.xml 每个webapps都可以有的专有的配置文件,这些配置文件通常位于webapp应用程序目录下的WEB-INF目录中;用于定义会话管理器、JDBC等;此目录下的context.xml为各webapp提供默认配置;
web.xml:每个webapp只有在被部署之后才能被访问;此文件则用于为所有的webapp提供默认的部署配置;
tomcat-users.xml:进行认证访问时用于设置用户和密码的配置文件;
catalina.policy:当使用-security选项启动tomcat实例时会读取此配置文件来实现其安全运行策略;
logging.properties:日志相关的配置信息;
catalina.properties:java属性定义文件,用于设定类加载器路径等,以及一些JVM性能相关的调优参数;
4.添加环境变量
vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/java/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
. /etc/profile.d/java.sh
5.启动Tomcat
catalina.sh start → catalina.sh文件位于/usr/local/tomcat/bin中;
Note:使用catalina.sh --help查看帮助;
6.访问Tomcat主页
http://192.168.80.139:8080
7.Tomcat的目录结构:
bin:脚本及启动时用到的类
lib:类库
conf:配置文件
logs:日志文件
webapps:JAVA应用程序默认部署目录
work:工作目录
temp:临时文件目录
Java WebAPP组织结构:
有特定的组织形式、层次型的目录结构;主要包含了servlet代码文件、JSP页面文件、类文件、部署描述类文件等;
WEB-INF:当前webapp的私有资源目录,通常用于存放当前webapp自用的web.xml;
META-INF:当前webapp的私有资源目录,通常用于存放当前webapp自用的context.xml;
classes:存放此weiapp的私有类;
lib:存放此webapp的私有类,格式为.jar;
index.jsp:webapp的主页文件;
work:存放webapp中java文件编译以后的字节码文件;
[[email protected] tomcat]# ls work/Catalina/localhost/myapp/org/apache/jsp/index_jsp.class
=> work/引擎/虚拟主机/应用程序/类名(域名倒写)/字节码文件
webapp归档格式:
.war:webapp
.jar:EJB的类
.rar:资源适配器
.ear:企业级应用程序
实例:
mkdir -pv myapp/{lib,classes,WEB-INF,META-INF}
cd myapp/
vim index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title> JSP Test Page</title>
</head>
<body>
<% out.println("Hello World!"); %>
</body>
</html>
http://192.168.80.139:8080/myapp
部署(deployment)webapp相关的操作:
deploy:部署,将webapp的源文件存放于目标目录、配置tomcat服务器能够基于context.xml文件中定义的路径来访问此webapp,将其特有的类通过class loader装载至tomcat;
部署方式:
自动部署
手动部署:
1.冷部署,把webapp复制到指定位置,然后启动tomcat;
2.热部署,在不停止tomcat的前提下,通过部署工具部署进行部署;工具:manager、ant脚本、tcd等;
反部署:停止webapp,然后从tomcat实例中拆除webapp;
停止:只是不提供服务了,程序的各种资源文件还在;
启动:启动处于停止状态的webapp;
Tomcat自带的工具(网页版):
使用下面两个工具首先需要设置用户名和密码,否则不让登陆;
Manager APP:webapp管理工具
vim conf/tomcat-users.xml
<role rolename="manager-gui"/>
<user username="tomcat" password="admin" roles="manager-gui"/>
catalina.sh stop
catalina.sh start
Server Status:
Host Manager:虚拟主机管理工具
vim conf/tomcat-users.xml
<role rolename="admin-gui"/>
<user username="guowei" password="admin" roles="admin-gui"/>
catalina.sh stop
catalina.sh start
server.xml文件中各常见组件详解:
server:服务器,Tomcat的一个实例,通常一个JVM只能包含一个Tomcat实例;因此,一台物理机上可以在启动多个JVM的情况下在每一个JVM中启动一个Tomcat实例,每个实例分属一个独立的管理端口,这是一个*组件;
service:服务,一个服务组件通常包含一个引擎和与此引擎相关联的一个或多个连接器,给服务命名可以方便管理员在日志文件中识别不同服务产生的日志。一个server可以包含多个service组件,但通常情况下一个server至包含一个service;
connector:连接器,负责连接客户端(可以是浏览器或WEB服务器)请求至Servlet容器内的Web应用程序,通常指的是接收客户发来请求的位置及服务器端分配的端口;默认端口通常是HTTP协议的8080,管理员也可以根据需要修改此端口;一个引擎可以配置多个连接器,但这些连接器必须使用不同的端口,默认的连接器是基于HTTP/1.1的Coyote的;同时Tomcat也支持AJP、JServ和JK2连接器;
连接器类型:
1.HTTP连接器
2.SSL连接器
3.AJP连接器
4.proxy连接器
常用属性:
address:指定连接器监听的地址,默认为0.0.0.0
maxThreads:支持的最大并发连接数,默认为200
port:监听的端口;
protocol:连接器使用的协议(类型),默认为HTTP/1.1,定义AJP协议时通常为AJP/1.3;
redirectPort:如果连接器支持的协议为HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口;
connectionTimeout:等待客户端发送请求的超时时间,单位为ms,默认为60000;
enableLookups:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;默认为true
acceptCount:设置等待队列的最大长度,通常在Tomcat所有处理线程均处于繁忙状态时,新发来的请求将被置于等待队列中;
engine:引擎,引擎通常是指处理请求的Servlet引擎组件,Catalina Servlet引擎;它检查每个请求的HTTP首部信息以辨别此请求应该发往那个host或context,并将请求处理后的结果返回给相应的客户端;严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器,如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处;一个引擎可以包含多个host组件;
defaultHost:Tomcat支持基于FQDN的虚拟主机,这些虚拟主机可以通过在engine容器中定义多个不同的组件来实现;但如果此引擎的连接器收到一个发往非明确定义的虚拟主机的请求时则需要将此请求发往一个默认的虚拟主机进行处理,因此,在引擎中定义的多个虚拟主机的主机名称至少要有一个跟defaultHost定义的主机名成同名;
name:Engine组件的名称,用于日志和错误信息记录时区别不同的引擎;
host:主机,主机组件类似于Apache中的虚拟主机,但在Tomcat中至支持基于FQDN的虚拟主机。一个引擎至少要包含一个主机组件。
context:上下文,Contest组件是最内层次的组件,它表示Web应用程序本身;配置一个Contest最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户的请求发往正确位置。Context组件也可包含自定义的错误页,以实现在用户访问发生错误时提供友好的提示信息;Context在某种意义上类似apache中的路径别名,一个context定义用于标识tomcat实例中的一个web应用程序;
实例:添加一个虚拟主机;
vim /usr/local/tomcat/conf/server.xml
<Engine name="Catalina" defaultHost="localhost">
<Host name="www.guowei.com" appBase="/data/guowei/webapps" unpackWARs="true" autoDeploy="false">
<Context path="" docBase="/data/guowei/webapps" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/guwoei/logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Engine>
Note:各个组件详细的配置格式可以参照server.xml进行学习;
LNMT:
Client-->http-->nginx-->reverse_proxy-->http-->tomcat(http connector)
LAMT:
Client-->http-->httpd-->reverse_proxy-->{http|ajp}-->tomcat(http connector|ajp connector)
httpd实现反向代理时需要加载相应的模块
less /etc/httpd/conf.modules.d/00-proxy.conf
其中proxy_module为主模块,proxy_module_http和proxy_module_ajp为子模块;主模块必须导入,子模块选择性的导入;
根据马哥视频做的学习笔记,如有错误欢迎指正;侵删;
借鉴文章:https://www.cnblogs.com/whgk/p/6399262.html