首页IT科技内存介绍(内存马基础知识)

内存介绍(内存马基础知识)

时间2025-05-02 12:51:13分类IT科技浏览4095
导读:javaweb三大组件 java web:Servlet,Filter,Listener...

javaweb三大组件

java web:Servlet          ,Filter                  ,Listener

三大组件的各自功能:

Servlet:用我的话来讲它就像是一个处理器      ,它会接受http请求然后把他封装成 HttpServletRequest 和HttpServletResponse 对象       ,然后进行处理 Filter:这是一个双向的拦截器吧                  ,为什么叫双向?它会在request到达servlet之前处理一遍         ,然后servlet发送response之后到达客户端之前处理一遍    ,也就像是在客户端和servlet中间的代理一样都要走它哪里走一遍 Listener          。Application          、Session 和 Request 三大对象创建                  、销毁或者往其中添加      、修改       、删除属性时自动执行代码的功能组件                 ,有一个直白一点的解释: 事件:一件事情 事件源:事件发生的地方 监听器:一个对象 注册监听:将事件源            ,事件  ,监听器                ,绑定在一起                  。当事件源上发生某件事情的时候               ,执行监听器代码

tomcat架构

Tomcat功能

从最开始Tomcat的介绍来看,Tomcat有点像一个Servlet官方一点就是:Tomcat 是 Web 应用服务器             ,是一个 Servlet/JSP 容器                  ,而 Servlet 容器从上到下分别是 Engine                  、Host         、Context    、Wrapper      。

顶层架构

来一张顶层架构图

Service主要包含两个部分:Connector和Container       。从上图中可以看出 Tomcat 的心脏就是这两个组件   ,他们的作用如下:

1                 、Connector用于处理连接相关的事情          ,并提供Socket与Request和Response相关的转化; 2            、Container用于封装和管理Servlet                  ,以及具体处理Request请求;

一个tomcat只能启动一个server但是可以有多个service      ,       ,一个Service只有一个Container                  ,但是可以有多个Connectors         ,代表的就是一个service运行有多个连接

多个connector和一个Container行成一个service    ,service就可以向提供服务了                 ,但是service是可以有多个的所以就需要有东西来控制service的生产周期            ,跟k8s的架构有些类似类似在k8s中的(Kubelet 负责维护容器的生命周期)

connecter

作为Tomcat的核心组件之一  ,它是用来接受客户端发送的请求然后把它一个 Request 和 Response 对象分别用于和请求端交换数据(这里转换的不是Servletrequest()和ServletResponse)

socket 通信 解析处理应用层协议                ,如将 socket 连接封装成 request 和 response 对象               ,后续交给 Container 来处理 将 Request 转换为 ServletRequest,将 Response 转换为 ServletResponse Adapter 组件

由于协议的不同             ,Tomcat 定义了自己的 Request 类来存放请求信息                  ,但是这个不是标准的 ServletRequest                  。于是需要使用 Adapter 将 Tomcat Request 对象转成 ServletRequest 对象   ,然后就能调用容器的 service 方法         。

这个组件的作用就是把tomcat的特有的request转化成Servlet的Sservletreques    。

Adapter 组件的结构图

Container组件

Container(又名Catalina)用于处理Connector发过来的servlet连接请求          ,它是容器的父接口                  ,所有子容器都必须实现这个接口      ,Container 容器的设计用的是典型的责任链的设计模式       ,它有四个子容器组件构成                  ,分别是:Engine  、Host                、Context               、Wrapper         ,这四个组件不是平行的    ,而是父子关系                 ,Engine 包含 Host            ,Host 包含 Context  ,Context 包含 Wrapper                 。

Tomcat 设计了 4 种容器: Engine、Host             、Context                  、Wrapper                 ,这四种容器是父子关系

Engine: 最顶层容器组件               ,可以包含多个 Host            。实现类为 org.apache.catalina.core.StandardEngine Host: 代表一个虚拟主机,每个虚拟主机和某个域名 Domain Name 相匹配             ,可以包含多个 Context  。实现类为 org.apache.catalina.core.StandardHost Context: 一个 Context 对应于一个 Web 应用                  ,可以包含多个 Wrapper                。实现类为 org.apache.catalina.core.StandardContext Wrapper: 一个 Wrapper 对应一个 Servlet               。负责管理 Servlet   ,包括 Servlet 的装载   、初始化          、执行以及资源回收。实现类为 org.apache.catalina.core.StandardWrapper

Tomcat的类加载机制

由于 Tomcat 中有多个 WebApp 同时要确保之间相互隔离          ,所以 Tomcat 的类加载机制也不是传统的双亲委派机制             。

Tomcat 自定义的类加载器 WebAppClassloader 为了确保隔离多个 WebApp 之间相互隔离                  ,所以打破了双亲委托机制                  。每个 WebApp 用一个独有的 ClassLoader 实例来优先处理加载   。它首先尝试自己加载某个类      ,如果找不到再交给父类加载器       ,其目的是优先加载 WEB 应用自己定义的类          。

同时为了防止 WEB 应用自己的类覆盖 JRE 的核心类                  ,在本地 WEB 应用目录下查找之前         ,先使用 ExtClassLoader(使用双亲委托机制)去加载    ,这样既打破了双亲委托                 ,同时也能安全加载类                  。

这一点在CommonsBeanutils1链中就有体现            ,就是它tomcat有自己的

小结

(1)Tomcat中只有一个Server  ,一个Server可以有多个Service                ,一个Service可以有多个Connector和一个Container;

(2) Server掌管着整个Tomcat的生死大权;

(4)Service 是对外提供服务的;

(5)Connector用于接受请求并将请求封装成Request和Response来具体处理;

(6)Container用于封装和管理Servlet               ,以及具体处理request请求;

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
指针类型强转哪个安全(强弱指针使用场景之 多线程访问共享对象问题) 前端和后端的分界(前端和后端字符串比较的区别)