• Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
  • 诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为9.0。

一、Tomcat体系架构

核心组件

server:相当于一个tomcat实例。接收并解析请求信息;完成相关动作后把响应结果返回给计算机。

service:每个server包含多个service,相互独立,仅共享JVM以及类库。用于把连接器(connector)与引擎(engine)关连起来,且一个service只能有一个engine,但是可以有多个connector。因为engine无法直接接受连接器发来的数据。

connector:负责开启socket并监听客户端请求、返回响应数据。多个connector监听多个端口

engine:负责具体的处理请求,connector仅仅负责监听,收到数据后交给engine运行。

host:在ngine中可以包含多个host,每个host定义了虚拟主机

context:每个context可以部署一个web应用。一个host可以存在多个context。如果部署多个应用需要分别对每个应用装载所依赖的库,这个步骤可以自动可以手动。

二、Tomcat的安装

tomcat其实就是一个JAVA程序,所以要运行在JAVA虚拟机中。要运行虚拟机就要先安装JDK。

1.JDK的安装

1.通过YUM安装
yum install java-1.8.0-openjdk-devel
2.配置环境变量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest # 首先定义JAVA_HOME的环境变量
export PATH=$JAVA_HOME/bin:$PATH # 然后向后追加即可

2.Tomcat的安装

首先要从Tomcat的官网下载Tomcat,然后上传至服务器解压。 https://tomcat.apache.org

1.将下载的软件包解压
tar xf apache-tomcat-VERSION.tar.gz -C /usr/local/
cd /usr/local 2.创建软连接,或者将解压的tomcat直接改名为tomcat也能达到同样的效果
ln -sv apache-tomcat-VERSION tomcat 3.添加环境变量
vim /etc/profile.d/tomcat.sh
export CATALINA_BASE=/usr/local/tomcat
export PATH=$CATALINA_BASE/bin:$PATH 4.创建tomcat需要的用户
useradd tomcat 5.将安装包的路径下的所有属组都改为tomcat
chown -R root.tomcat /usr/local/tomcat # 设定所有者为root,所属组为tomcat
chown -R tomcat /usr/local/tomcat/{logs,temp,work,webapps} # 仅将需要有写权限文件所有者改为tomcat
chmod g+r /usr/local/tomcat/conf # 默认没有权限,会导致启动失败 5.切换到tomcat用户最后启动服务即可
su - tomcat
catalina.sh start # 启动tomcat。catalina.sh命令需要先添加环境变量

三、Tomcat服务的配置文件结构

bin:   脚本、以及Tomcat自身所携带的工具包
conf: Tomcat服务的配置文件目录;
lib: 库文件,Java类库,jar;
logs: 日志文件目录;
temp: 临时文件目录;
webapps:webapp的默认目录;相当于页面的根目录。部署的应用都应该在IC目录下
work: 工作目录,存放编译后的字节码文件;

四、部署测试页面

创建一个测试页面,将下面的步骤全部做完后,通过浏览器访问http://IP:8080/test 即可访问到测试的页面

1.创建文件夹,classes、lib、WEB-INF为一个标准应用应该有的目录,这里创建仅仅为了与标准看齐
mkidr -pv /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF} 2.创建一个测试页面用于检验Tomcat服务是否能正常提供服务
vim /usr/local/tomcat/webapps/test/index.jsp # 创建jsp测试页面
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>Test Page</title>
/head>
<body>
<% out.println("hello world");
%>
</body>
</html 3.重启服务
systemctl restart tomcat 4.部署完成后在webapp目录自动生成一些目录
cd /usr/share/tomcat/work/Catalina # 部署完成后自动生成的test目录下的文件
[root@localhost Catalina]# tree .
.
└── localhost # 默认主机站点
├── _
├── docs
├── examples
├── host-manager
├── manager
├── sample
└── test # webpp应用名称。自动生成以下目录
└── org
└── apache
└── jsp
├── index_jsp.class
└── index_jsp.java

五、Tomcat的至 配置文件

1.service组件

前面讲到connecotr负责接收用户请求,而engine负责接处理用户请求。但是connecotr并不能与engine直接通信。所以service就是负责将connector与engine连接起来的组件

<Service name="Catalina">

2.connector组件

connector负责接收客户端发来的请求,常见的连接有三种:http、https、ajp

进入tomcat的请求可分为两类:

(1) standalone : 请求来自于客户端浏览器;

(2) 由其它的web server反代:来自前端的反代服务器,通过反带服务器发来的又有以下几种;

  • nginx --> http connector --> tomcat
  • httpd(proxy_http_module) --> http connector --> tomcat
  • httpd(proxy_ajp_module) --> ajp connector --> tomcat
  • httpd(mod_jk) --> ajp connector --> tomcat

    示例
<Connector port="8080" 				# 默认有两个connector一个监听http一个监听ajp
protocol="HTTP/1.1" # 如果是http可以无需指明协议。AJP的话Protocol="AJP/1.3"
connectionTimeout="20000" # 超时时长,毫秒即20s
redirectPort="8443" # 如果请求的为SSL请求就将请求转发至8443端口
address: # 监听的IP地址;默认为本机所有可用地址;不写就监听本地所有IP
maxThreads: # 最大并发连接数,默认为200;
enableLookups: # 是否启用DNS查询功能;将IP地址解析为域名。关闭提升性能
acceptCount: # 等待队列的最大长度;
secure: # =true的表示使用SSL通信
sslProtocol: # 设定使用哪个SSL协议,通常在tomcat上不建议使用SSL,速度太慢
/>

3.Engine组件

Engine组件负责处理发来的请求。

Engine是Servlet实例,即servlet引擎,其内部可以一个或多个host组件来定义站点; 通常需要通过defaultHost来定义默认的虚拟主机。

示例

<Engine name="Catalina" defaultHost="localhost">
name=Catalina # 引擎的名称
defaultHost="localhost" # 默认的响应主机站点。如果找不到合适,或者域名不匹配选择默认host
jvmRoute= # Tomcat做集群时的调度标志,类似于HAproxy的会话标识。
# 在基于cookie绑定时会用到
...
<Engine>

4.Host组件

Host组件位于engine内部用于接收请求并进行相应处理的主机或虚拟主机

 <Host 	  name="localhost"  		# 设定为主机名即可
appBase="webapps" # webapps的默认存放路径(相对路径,可以用绝对路径)。相当站点根
unpackWARs="true" # true为自动展开WAR文件
autoDeploy="true"> # 是否开启自动部署功能。
#unpackWARS、autoDeploy定义了WebAPP为WAR格式且在根下时自动部署
</Host>

5.Context组件

包含在Host标签里。

如果在一个主机上部署多个app的话,Context就可以用来定义不同app对应的路径。

<Context path="/PATH" 					# 网页的RUL
docBase="/PATH/TO/SOMEDIR" # 真实路径。
reloadable=""/> # 如果为true说明可以重新装载

6.valve组件

Valve存在多种类型:

定义访问日志:org.apache.catalina.valves.AccessLogValve

定义访问控制:org.apache.catalina.valves.RemoteAddrValve

<Valve className="org.apache.catalina.valves.AccessLogValve" 	   # 定义记录日志要访问的类
directory="logs" # 日志文件的目录路径,默认在/var/log/tomcat下
prefix="node1_test_access_" # 日志文件的前缀
suffix=".log" # 日志文件的后缀
pattern="%h %l %u %t &quot;%r&quot; %s %b" /> # 记录日志的格式
pattern="%h %l %u %t &quot;%r&quot; %s %b" />

轻松驾驭Tomcat的更多相关文章

  1. 易用BPM时代,企业如何轻松驾驭H3?

    众所周知,BPM作为企业发展的推动力,能敏捷高效的融合业务流程和信息资源.通过综合考虑流程的成本.效率.质量等方面因素,用IT系统将调整后的流程固化下来,从而降低企业管理成本,提高内部运营效率,提升企 ...

  2. 用好Git 和 SVN,轻松驾驭版本管理

    用好Git 和 SVN,轻松驾驭版本管理 本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始使用 Git,并总结平时工作高频率使用到的 Git 常用命令. 一.Git vs S ...

  3. 科普贴 | 数字钱包MetaMask安装使用详解,活用MetaMask轻松驾驭以太坊

    MetaMask 是一款浏览器插件钱包,不需下载安装客户端,只需添加至浏览器扩展程序即可使用,非常方便.它是很多支持 ETH 参投的 ICO 项目推荐使用的钱包之一. 2018年初最火的一个币,应该就 ...

  4. Git 常用命令总结,掌握这些,轻松驾驭版本管理

    原创 最近公司的代码管理工具要从SVN转到Git上,因此虽然之前用过Git,但是都是一些简单的推送提交,因此还是有必要进行一些系统的学习,这里做一下笔记,以备后询,且不定期更新. 关于SVN和Git的 ...

  5. Tomcat的bin目录下startup.bat、Tomcat6.exe、Tomcat6w.exe区别

    从官方下载了apache-tomcat-6.0.37-windows-x64.zip安装包,解压后bin目录下的startup.bat.Tomcat6.exe.Tomcat6w.exe 3个程序有何区 ...

  6. Ubuntu操作系统安装使用教程 (转)

    随着微软的步步紧逼,包括早先的Windows黑屏计划.实施,逮捕番茄花园作者并判刑,种种迹象表明,中国用户免费使用盗版Windows的日子将不会太长久了,那么这个世界上有没有即免费又易用的操作系统呢? ...

  7. PDF 生成插件 flying saucer 和 iText

    最近的项目中遇到了需求,用户在页面点击下载,将页面以PDF格式下载完成供用户浏览,所以上网找了下实现方案. 在Java世界,要想生成PDF,方案不少,所以简单做一个小结吧. 在此之前,先来勾画一下我心 ...

  8. HelloWorld 和相关设置

    写这篇文章的初衷很简单,就是想再一次证明 IntelliJ IDEA 对于 Java 开发人员来说,确实比 eclipse 要好用得多,鉴于目前市面上关于 IntelliJ IDEA 的教程比较少,叙 ...

  9. websocket的原理

    首先明确几点: 1. websocket是一种协议.是html5的一种新协议: 2. 与http的区别是,它是一种双向通信协议,服务器和客户端都能主动向对方发送或接受数据: 3. websocket需 ...

随机推荐

  1. 用ESP8266+android,制作自己的WIFI小车(Android 软件)

    先说一下这篇文章里面的内容:TCP 客户端, 自定义对话框, 自定义按钮, ProgressBar竖直显示, 重力感应传感器,手机返回键新开启界面的问题(返回上次的界面),数据保存 软件的通信是配合 ...

  2. Merge Two Binary Trees

    Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...

  3. Python 基础系列一:初识python(二)基本数据类型

    上节拾遗 1.编码转换过程,utf-8转换gbk 过程 经过解码(py27): x.decode('utf-8')-->unicode-->编码x.encode('gbk') ps:py3 ...

  4. Jquery滚动到页面底部自动Ajax加载图文列表,类似图片懒加载效果,带加载效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. JavaWeb基础之JdbcUtils工具类1.0

    2016年12月20日,第一次学习JDBC.看的是传智播客崔希凡老师的视频,东北口音很是风趣幽默,技术之牛让人膜拜.2017年9月21日,再次重温web知识,分享JdbcUtils工具类,用以接下来的 ...

  6. 【特效】hover向上翻转效果

    前段时间做了很多有关css3动画的项目.虽然当时都较圆满的完成了,但事后还是要总结一下的,趁着近期工作不忙,系统的学习了一些动画理论,重点看了transform3D变换,学习了translate平移. ...

  7. Android进程间通信

    http://www.cnblogs.com/manuosex/p/3588634.html 一.Linux系统进程间通信有哪些方式? 1.socket: 2.name pipe命名管道: 3.mes ...

  8. Android基础知识03—Activity的基本用法

    ------Activity 活动------ 活动 Activity 是一种包含用户界面的组件,即一个界面就是一个活动 创建活动的过程: >> 创建一个类,继承自Activity类,并且 ...

  9. 创建一个ROS工作空间(ROS Workspace)

    详细参照 http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment1.mkdir -p ~/catkin_ws/ ...

  10. 脱壳第一讲,手工脱壳ASPack2.12的壳.ESP定律

    脱壳第一讲,手工脱壳ASPack2.12的壳.ESP定律 一丶什么是ESP定律 首先我们要明白什么是壳.壳的作用就是加密PE的. 而ESP定律就是壳在加密之前,肯定会保存所有寄存器环境,而出来的时候, ...