Java体系结构:
Java编程语言:
Java Class文件格式:
java API
java VM;
JVM的核心组成部分:
CLass Loader
执行引擎
java编程语言的特性:
面向对象,多线程,结构化错误处理
垃圾收集,动态链接,动态拓展
JVM运行时区域:运行为多个线程
方法区:线程共享;用于存储杯虚拟机加载的类信息,常量,静态变量等:永久代;;
堆:Java堆是JVM所管理的内存中最大的一部分;也是GC管理的主要区域,主流的算法都基于分代收集方式进行:新生代和老生代;线程共享
java栈:线程私有,存放线程自己的局部变量等信息;
PC寄存器(Program Counter Register),线程独占的内存空间
本地方法栈:

Web Container:
JDK,Servlet,JSP
商业实现:
WebSphere
WebLogic
Oc4j
Glassfish
JOnAs
JBoss
开源实现:
Tomcat
jetty
resin
JAVA 2 EE APIs:
EJB:JAVA相关的诸多高级功能的实现,如RMI,对象/关系映射,跨越多个数据源的分布式事务等;
JMS:高性能异步消息服务,实现JAVA EE应用程序与非JAVA程序的“透明”;
JMX:在程序运行时对其进行交互式监控和管理的机制
JTA:允许应用程序
Tomcat的核心组件:
catalina:servlet container
Coyote:http connection
Jasper:JSP Engine

Tomcat的开发语言:JAVA
Tomcat Instance:运行中的tomcat进程(java进程)
server:即一个tomcat实例:
service:用于将connector关联至engine组件;一个service只能包含一个engine组件和一个或多个connector组件;
Engine:Tomcat的核心组件,用于允许jsp或servlet代码;
Connector:接受并解析用户请求,将请求映射为Engine中运行的代码 :之后将运行结果构建成响应报文:http,ajp
Host:类似httpd中的虚拟主机;
Context:类似于httpd中的alias;
注意:每个组件都由“类”来实现,有些组件的实现还不止一种;
顶级类组件:server
服务类组件:service
容器类组件:即可以部署webapp的组件,engine,host,context
连接器组件:connector
被嵌套类组件:value,logger,realm

tomcat运行模式:
standalone:通过内置的web server来接收客户端请求。
proxy:由专门的web server服务客户端的http请求;
in-process:部署于同一主机;
network:部署于不同主机
按照tomcat:
官方站点:http://tomcat.apache.org
部署前提是JDK
java环境
vim /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin
tomcat环境:
export CATALINA_HOME=/usr/local/tomcat
export PATH= CATALINAHOME/binCATALINA_HOME/binCATALINAH​OME/binPATH

tomcat的目录结构:
bin:脚本及启动时用到的类
lib:类库
conf:配置文件
logs:日志文件
webapps:应用程序默认部署目录
work:工作目录
temp:临时文件目录
配置文件:
server.xml 主配置文件
context.xml 每个webapp都可以用专用的配置文件,这些配置文件通常位于webapp应用程序目录下的WEB-INF目录中,用于定义会话管理器,JDBC等:/conf/context.xml是为个webapp提供默认配置:
web.xml:每个webapp”部署“之后才能被访问:此文件则用于为所有的webapp提供默认部署相关的配置:
tomcat-users.xml:用户认证的账户和密码配置文件:
catalina-policy:当使用-sercurity选项启动tomcat实例时会读取此配置文件来实现其安全运行策略;
catalina-properties:java属性的定义文件,用于设定类加载器路径等,以及一些JVM性能相关的调优参数:
logging-properties:日志相关的配置信息;

Java WebAPP组织结构:
有特定的组织形式,层次型的目录结构:主要包含了servlet代码文件,JSP页面文件、类文件、部署描述符文件等;
/usr/local/tomcat/webapps/app1
/:webapp的根目录
WEB-INF/:当前webapp的私有资源目录,通常存放当前webapp自用的web.xml:
META-INF/:当前的webapp的私有资源目录,通常存放在当前webapp自用的context.xml;
classed/:此webapp的私有类
lib/:此webapp的私有类,被打包为jar格式类;
index.jsp:webappd的主页
webapp的归档格式:
.war:webapp;
.jar:EJB的类;
.rar:资源适配器
.ear:企业级应用程序;
手动添加一个测试应用程序:
·1.创建webapp特有的目录结构
mkdir myapp/{lib,classes,WEB-INF,META-INF} -pv
2.提供webapp各文件
myapp/index.jsp
<%@ page language=“java” %>
<%@ page import=“java.util.*” %>

JSP Test Page <% out.println("hello world"); %> 部署webapp相关的操作; deploy:部署,将webapp的源文放置于目标目录、配置tomcat服务器能够基于context.xml文件中定义的路径来访问此webapp;将其特有类通过class loader装载至tomcat; 有两种方式: 自动部署:auto deploy 手动部署: 1.冷部署:把webapp复制到指定位置,而后才启动tomcat; 2.热部署:再不停止tomcat前提下进行的部分 ·部署工具,manage,ant,tcdr等 undeploy:反部署,停止webapp,并从tomcat实例拆除实例部分文件和部署名; stop:停止,不再向用户提供服务; start:启动处于”停止“状态的webapp redeploy:重新部署

tomcat自带的应用程序:
manager app:webapp管理工具
host manager:Virtual Hosts管理工具
网页管理需要修改:
conf目录下的tomcat-users.xml

另外如果是tomcat9版本 需要修改
/webapps/manager/META-INF下的context.xml

加入|\d+.\d+.\d+.\d+

tomcat的主配置文件结构:

各常用组件:
1.服务器(server):tomcat的一个实例。通常一个JVM之内只能包含一个Tomcat实例:因此,一台物理服务器上可以在启动多个JVM的情况下在每一个JVM启动一个实例,每个实例分属于一个独立的管理端口。这是一个顶级组件。
2.服务(service):一个服务组件通常包含一个引擎和与此引擎项关联的一个或多个连接器。给服务器命名可以方便管理员在日志文件中识别不同服务产生的日志。一个server可以包含多个service组件,但通常情况下只为一个service指派一个server;
连接器类组件:
3.连接器(connectors):负责链接客户端(可以是浏览器或web服务器)请求至Servlet容器内的Web应用程序,通常指的是接收客户发来请求的位置及服务器端分配的端口。默认端口通常是HTTP协议的8080,管理员也可以根据自己的需要改变此端口。一个引擎可以配置多个连接器,但这些连接器必须使用不同的端口。默认的连接器是基于HTTP/1.1的Coyote。同时,Tomcat也支持AJP,JServ和JK2连接器。
容器类组件:
4.引擎(Engine):引擎通常是指处理请求的Servlet引擎组件,即Catalina Servlet引擎,它检查每一个请求的HTTP首部信息以辨别此请求应该发往那个host或context,并将请求处理后的结果返回的相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果Tomcat被配置成独立服务器,默认引擎就是已经定义好的引擎。而如果tomcat被配置为Apache web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个host组件。
5.主机(host):主机组件类似于Apache中的虚拟主机,但在Tomcat中只支持基于FQDN的”虚拟主机“。一个引擎至少要包含一个主机组件。
6.上下文(Context):Context组件是最内层次的组件,它表示Web应用程序本身。配置一个context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置。context组件也可以包含自定义的错误页,以实现在用户访问发生错误时提供友好的提示信息。
被嵌套类(nested)组件
这类组件通常包含于容器类组件中以提供具有管理功能的服务,它们不能包含其他组件,但有些却可以由不同层次的容器各自配置。
7.阀门(Value):用来拦截请求在将其转至目标之前进行某种操作,类似于Servlet规范中定义的过滤器。Value可以定义在如何容器类的组件中。Value长被用来记录客户端请求、客服端IP地址和服务器等信息,这种处理技术通常被称作请求转储(request dumping)。请求转储value记录请求客户端请求数据包中的http首部信息和cookie信息文件中,响应转储valve则记录响应数据包首部信息和cookie信息至文件中。
8.日志记录器(Logger):用于记录组件内部的状态信息,可被用于除Context之外的任何容器中。日志记录的功能可被继承,因此,一个引擎级别的Logger将会记录引擎内部所有组件相关的信息,除非某内部组件定义了自己的Logger组件。
9.领域(Realm):用于用户的认证和授权:在配置一个应用程序时,管理员可以为每个资源或资源组定义角色及权限,而这些访问控制功能的生效需要通过Realm来实现。Realm的认证可以基于文本文件、数据库表、LDAP服务等来实现。Realm的效用会遍及整个引擎或顶级容器,因此,一个容器内的所有应用程序将共享用户资源,同时,Realm可以呗其所在组件的子组件继承,也可以被子组件中定义的Realm所覆盖。

引擎(engine):引擎是指处理请求的Servlet引擎组件,即Catalina Servlet引擎,它从HTTPconnector接受请求并响应请求。它检查每一个请求的Http首部信息以辨别此请求应该发往那个host或context,并将请求处理后的结果返回的相应的客户端。严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。如果tomcat被配置称为独立服务器,默认引擎就是已经定义好的引擎。而如果tomcat被配置为Apcahe Web服务器的提供Serverlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。一个引擎可以包含多个host组件。

AJP:apache jserv proto,二级制协议;
tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是apache,IIS,nginx等
tomcat作为独立服务器:请求来自于web浏览器
tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接器才能正确接收来自客户端的请求。一个引擎可以有一个或多个连接器,以适应多种请求方式。
定义连接器可以连接多种属性,有些属性也只适用于某特定的连接器类类型。一般来说,常见于server.xml中的连接器类型通常有4种:
1)HTTP连接器
2)SSL连接器
3)AJP 1.3连接器
如上图示例server.xml种定义的HTTP连接器

定义连接器时可以配置的属性非常多,但通常定义HTTP连接器时必须定义的属性只有“port”,定义AJP连接器时必须定义的属性只有"protocol",因为默认的协议为HTTP,以下为常用属性的说明:
1)address:指定连接器监控的地址,默认为所有地址,即0.0.0.0;
2)maxThreds:支持的最大并发连接数,默认为200
3)port:监听的端口,默认为0
4)protocol:连接器使用的协议,默认为HTTP/1.1,定义AJP协议时通常为AJP/1.3;
5)redirectPort:如果某连接器支持的协议时HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口;
6)connectionTimeout:等客户端发送请求的超时时间,单位为毫秒,默认为60000,即一分钟
7)enablLookups:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;默认为true;
8)acceptCount:设置等待队列的最大长度:通常在tomcat所有处理线程均处于繁忙状态时,新发来的请求将被放置于等待队列种;
下面是一个定义了多个属性的SSL连接器:

Engine组件:
Engine是Servlet处理器的一个实例,即servlet引擎,默认为定义再server.xml种的Catalina。Engine需要defaultHost属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的host组件,如前面示例中定义的:

常用的属性定义:
defaultHost:tomcat支持基于FQDN的虚拟主机,这些虚拟主机可以通过在Engine容器中定义多个不同的Host组件来实现:但如果此引擎的连接器收到一个发往非明确定义虚拟主机的请求时则需要将此请求发往一个默认的虚拟主机进行处理,因此,在engine中定义的多个虚拟主机的主机名称中至少要有一个跟defaultHost定义的主机名称同名:
name:Engine组件的名称,用于日志和错误信息记录时区别不同的引擎
jvmRoute=
engine容器中可以包含realm,host,Listener和value子容器。

Host组件:
位于engine容器中用于接收请求并进行相应处理的主机或虚拟主机,如前面示例中的定义:

常用属性说明:
1)appBase:此Host的webapps目录,即存放非归档的web应用程序的目录或归档后的WAR文件的目录路径;可以使用基于¥CATALINA_HOME的相对路径;
2)autoDeplay:在tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy:默认为true
3)unpackWars:在启用此webapps时是否对WAF格式的归档文件先进行展开,默认为true;

虚拟主机定义示例:

主机别名定义:
如果一个主机有两个或两个以上的主机名,额外的名称均可以别名的形式进行定义,如下:

test.com

context组件:
context在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中的一个web应用程序,如下面的定义:

在tomcat6中,每一个context定义也可以使用一个单独的XML文件进行,其文件的目录为$CATALINA_HOME/conf//.可以用于Context中的XML元素有Loader,Manager,Realm,Resources和WatchedResource。 常用 的属性定义有: 1)docBase:相应的web应用程序的存放位置:也可以使用相对路径,起始路径为此Context所属Host中的appBase定义的路径,切记,docBase的路径名不能于相应的Host中appBase中定义的路径名有包含关系,比如,如果appBase为deploy,二docBase绝不能为deploy-bbs类的名字: 2)path:相对于web服务器根路径而言的URI:如果为空“”,则表示为此webapp的根路径:如果context定义在一个单独的xml文件上,此属性不需要定义。 3)reloadable:是否允许重新加载此context相关的web应用程序的类:默认为false

Realm组件:
一个Realm表示一个安全上下文,它是一个授权访问某个给定Contest的用户列表和某用户所允许切换的角色相关定义的列表。因此,Realm就像是一个用户和组相关的数据库。定义Realm时唯一必须要提供的属性是classname,它是Realm的多个不同实现,用于表示此Realm认证的用户及角色等认证信息的存放位置。
JAASRealm:基于java Authintication and Authorizaton Service实现用户认证;
JDBCRealm:通过JDBC访问某关系型数据库实现用户认证;
JNDIRealm:基于JNDI使用目录服务实现认证信息的获取;
MemoryRealm:查找tomcat-user.xml文件实现用户信息的获取;
UserDatabaseRealm:基于UserDatabase文件(通常是tomcat-user.xml)
实现用户认证,它实现是一个完全可更新和持久有效的MemoryRealm,因此能够跟标准的MemoryRealm兼容;它通过JNDI实现;
下面是一个常见的使用UserDatabase的配置:

下面是一个使用JDBC方式获取用户认证信息的配置:

Valve组件:
Valve类似于过滤器,它可以工作于Engine和Host/Context之间、Host和Context之间以及Context和Web应用程序的某资源之间,一个容器内可以建立多个Valve,而且Value定义的次序也决定了它们生效的次序。Tomcat6中实现了多种不同的Valve:
AccessLogValve:访问日志Valve
ExtendedAccessValve:拓展功能的访问日志valve
JDBCAccessLogValve:通过JDBC将访问日志信息发送到数据库中:
RequestDumperValve:请求转储Valve
RemoteAddrValve:基于远程地址的访问控制:
RemoteHostValve:基于远程主机名称的访问控制:
SemaphoreValve:用于控制Tomcat主机上任何容器上的并发访问数量:
JvmRouteBinderValve:在配置上多个Tomcat为以Apache通过mod_proxy或mod_jk作为前端的集群架构中,当期望停止某节点时,可以通过此Valve将用记请求定向至备用节点:使用此Valve,必须使用JvmRouteSessionIDBinderListenner;
ReplicationValve:专用于tomcat集群架构中,可以在某个请求的session信息发生更改时触发session数据在各节点间进行复制:
SingleSignOn:将两个或多个需要对用户进行认证webapp在认证用户时连接在一起,即一次认证既可访问所有连接在一起的webapp:
clusterSingleSingOn:对SingleSingOn的扩展,专用于Tomcat集群当中,需要结合ClushterSignleSignOnListenrt进行工作:
RemoteHostValve和RemoteAddrValve可以分别用来实现基于主机名称和基于IP地址的访问控制,控制本身可以通过allow或deny来进行定义,这有点类似于Apache的访问控制功能,如下面的value则实现了仅允许本机访问/probe:

其中相关的属性定义有:
1)className:相关的java实现的类名,相应于分别应该为org.apache.catalina.values.RemoteHostValve或org.apache.catalina.values.RemoteAddrValve:
2))allow:以逗号分开的允许访问的IP地址列表,支持正则表达式,因此,点好“。
3)deny:以逗号分开的禁止访问的IP地址列表,支持正则表达式:使用方式痛allow:

自定义Host及Contest示例:

注意:path给定的路径不能以”/“结尾

LNMT:
client–>nginx -->reverse_proxy --> http -->tomcat (http connector)

Tomcat Cluster(3)
会话保持:
session sticky
source IP
cookie
session cluster:
session server:
kv:memcached,redis
apache:tomcats
(1)apache:
mod_proxy
mod_proxy_http
mod_proxy_balancer
tomcat:
http cocnector
(2)apache:
mod_proxy
mod_proxy_ajp
mod_proxy_balancer
tomcat:
ajp cocnector
(3)apache:
mode_jk
tocmat:
ajp connector

tomcat从头开始相关推荐

  1. 从头开始实现一个小型spring框架——手写Spring之集成Tomcat服务器

    手写Spring之集成Tomcat与Servlet 写在前面 一.Web服务模型及servlet 1.1 Web服务器 1.2 请求流程 二.实现 三.小结 写在前面 最近学习了一下spring的相关 ...

  2. 从头来第五步正常使用服务器(Tomcat)使用IDEA开发前后端

    1.Apache Tomcat和IDEA 简单的说tomcat就是一个小型的本地的服务器,便于程序员调试程序,观察网站. 简介 环境 重要目录 Tomcat是由Apache软件基金会属下Jakarta ...

  3. 从头开始 Struts 2 入门

    原文地址:从头开始 Struts 2  入门作者:晓强 [序] 本文采用 Maven2 工具进行 Struts2 的开发管理.用户只需安装JDK 5 (或6),和 Maven2 工具即可,不需安装 S ...

  4. 【深入剖析Tomcat笔记】第一篇 基础知识储备

    基础知识储备 最近突然在想,做了这么久的WEB相关,像tomcat.apache这些服务器究竟是什么东西,恰好碰到<How Tomcat Works>(中文版<深入剖析Tomcat& ...

  5. 从头开始 启动开源电商项目jShop

    从头开始 启动开源电商项目jShop 1. 引言 干了三年C#, 有了转Java 的念想,所以尝试学习一下java web,java语法本身和C#没有太多的差别,所以打算看看开源的java项目,开源的 ...

  6. tomact错误日志是那个_如何查看tomcat启动异常日志详情

    我的电脑同时使用两个jdk版本,默认1.7,eclipse使用的是1.8,,由于项目启动时有加载类需要jdk1.8的包,1.7不支持.所以导致项目在eclipse直接能够跑,而在外面的tomcat跑是 ...

  7. tomcat架构分析(valve源码导读)【转】

    原文地址:https://www.iteye.com/blog/gearever-1540028 源码面前,了无秘密                               ----侯捷  在to ...

  8. 从头开始搭建一个dubbo+zookeeper平台

    2019独角兽企业重金招聘Python工程师标准>>> 本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一 ...

  9. [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例二.

    为了更好的排版, 所以将IK分词器的安装重启了一篇博文,  大家可以接上solr的安装一同查看. [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一: http://w ...

最新文章

  1. mapreduce理解_大数据
  2. redhat5.8+heartbeat+web+nfs(提供软件包)
  3. Html 教程 (5) 表格标签
  4. 江诗丹顿geneve系列_江诗丹顿的另一面
  5. python string 方法,python字符串的方法与操作大全
  6. 终极神器盘点的FreeEIM
  7. 上线随想之2011-03-30
  8. :empty css 可以用在哪些标签,CSS3 :empty 选择器
  9. Adobe Reader 2019 Offline Installer, Free Download - Best PDF Reader
  10. 根据眼睛焦点分级绘制3D效果的设想
  11. 简化版“询问用户是否退出”
  12. php115网盘seo,115网盘禁止影视资源外链 网盘行业路在何方
  13. 程序员2022年薪资出炉:一线城市薪资中位数已破1.5万元,你工资涨了吗?
  14. 「游戏建模」如何使用zbrush为模型制作衣服上的褶皱
  15. Mysql中的索引原理
  16. 群翔ShopNum1分销系统V8.1升级版,更优更全更盈利
  17. 高鹏清华计算机系,丁高鹏:强身健体为祖国健康工作五十年-清华大学新闻网...
  18. iperf java_网络性能测试工具Iperf/Jperf解读
  19. 数据清洗:真值发现TruthFinder算法(附Python代码)
  20. Excel·VBA选中区域保存为txt文本

热门文章

  1. 【水汐のpython】 用python抓取外网的本子站并获取本子封面和信息
  2. 【实战技能】从《Beautiful Teams》一书看团队
  3. 闲来没事自己研究了下RBAC
  4. 网格建模资源管理(第一次翻译老外的东西,嘿嘿!)
  5. 阿里云大数据平台DataWorks(原DataX)
  6. 如何建设一个标签库?
  7. Kafka启用SASL_PLAINTEXT动态配置JAAS文件的几种方式
  8. python切比雪夫滤波器_[Matlab]切比雪夫Ⅰ型滤波器设计:低通、高通、带通和带阻...
  9. 985 大学老师的工资并没有很高,为什么大家都挤破头想进高校?
  10. html5 canvas画椭圆形