博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
干货!从Tomcat执行流程了解jsp是如何被解析的,错误提示是哪里生成的。
阅读量:6445 次
发布时间:2019-06-23

本文共 3710 字,大约阅读时间需要 12 分钟。

一.关于Tomcat组成

        
先上张图:

Tomcat组成:

1.
Server:代表整个 servlet 容器,如Tomcat,JBoss之类的。
2.
Service:它由一个或者多个Connector组成,以及一个Engine,负责处理所有Connector所获得的客户请求。
3.
Connector:一个Connector将在某个指定的端口上监听客户请求,并且将获得的请求交给Engine来处理,从Engine获得获得回应并且返
            回给客户。例如上图中,我们监听了8080和8081端口。
4.
Engine:Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名,当Engine获得一个请求时,它把该请求匹配到某个        
            Host上,然后把该请求交给该Host来处理,Engine有一个默认(default)虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该Host来        
            处理。
5.
Host:代表一个虚拟主机,即针对一个域名的专门的处理器,每个虚拟主机下可以部署一个或者多个WebApp,每个
            WebApp对应一个Context,每个Context都有一个Context Path,当Host获得一个请求时,将把该请求匹配到某个Context上,然后
            把该请求交给该Context来处理。
6.
Context:一个Context 对应于一个Web Application,一个Web Application 由一个或者多个Servlet组成,Context在创建的时候将根据        
            配置文件 $CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类。
 
如果找到,则执行该类,获得请求的回应,并且返回。
 

二. 配置文件 $CATALINA_HOME/conf/server.xml 文件说明

 
该文件描述了如何启动Tomcat Server
......
 

三. Context的部署配置文件web.xml的说明

        一个Context对应一个Web App,每个Web App 是由一个或者多个Servlet组成,当一个Web App被初始化的时候,它将用自己的ClassLoader对象载入 "部署配置文件web.xml"中的定义的每个servlet类,
它首先载入在$CATALINA_HOME/conf/web.xml中部署的servlet类,然后载入在自己的Web App根目录下的WEB-INF/web.xml中部署的servlet类。
        web.xml文件有两个部分:Servlet类定义和servlet映射定义,每个被载入的Servlet类都有一个名字,且被填入该Context的映射表中,和某种URL PATTERN 对应,当该Context获得请求的时候,将查询mapping table。找到被请求的servlet,并执行以获得请求回应。
下面是
$CATALINA_HOME/conf/web.xml中的内容
default
org.apache.catalina.servlets.DefaultServlet
debug
0
listings
true
1
invoker
org.apache.catalina.servlets.InvokerServlet
debug
0
2
jsp
org.apache.jasper.servlet.JspServlet
logVerbosityLevel
WARNING
3
default
/
invoker
/servlet/*
jsp
*.jsp
... ... ... ...

四. Tomcat Server处理一个http请求的过程

假设来自客户的请求为:

http://localhost:8080/wsota/wsota_index.jsp

1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得

2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为”"的Context去处理)
7) path=”/wsota”的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser

 
参考博客:https://blog.csdn.net/pzxwhc/article/details/47129675

转载于:https://www.cnblogs.com/chenkeyu/p/9005507.html

你可能感兴趣的文章
本地dns服务器到底是什么?有没有精确的概念?
查看>>
js关闭或者刷新页面后执行事件
查看>>
NIO框架之MINA源代码解析(一):背景
查看>>
javascript另类方法高效实现htmlencode()与htmldecode()函数
查看>>
[IOS/翻译]Core Services Layer
查看>>
laravel处理菜单保持的方法:
查看>>
浅析angular,react,vue.js jQuery-1
查看>>
ASP.NET MVC下使用AngularJs语言(三):ng-options
查看>>
【spring boot】在Spring mvc中controller中可以拿到对象信息,但是返回给前台却是什么也没有,解决方案...
查看>>
linux nginx,php开机启动
查看>>
Vue 响应式数据说明
查看>>
用ASP.NET Core 2.1 建立规范的 REST API -- 翻页/排序/过滤等
查看>>
Hadoop生态圈-hbase介绍-伪分布式安装
查看>>
2018第23周总结
查看>>
服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollect...
查看>>
Spark MLlib 之 aggregate和treeAggregate从原理到应用
查看>>
Python 字符串操作函数二
查看>>
win上的某个端口是否开启
查看>>
spring boot: 中文显示乱码,在applicationContext里面配置
查看>>
从0在windows上一次性上传本地整个项目(包含所有文件/文件夹)到 Github
查看>>