内存介绍(内存马基础知识)
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.StandardWrapperTomcat的类加载机制
由于 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版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!