![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Web容器
文章平均质量分 94
阿昌喜欢吃黄桃
这个作者很懒,什么都没留下…
展开
-
Day708.Tomcat和Jetty有哪些不同 -深入拆解 Tomcat & Jetty
首先用 Spring Boot 默认的 Tomcat 作为内嵌式 Web 容器,经过一轮压测后,将内嵌式的 Web 容器换成 Jetty,再做一轮测试,然后比较结果。从设计的角度来看,Tomcat 的架构基于一种多级容器的模式,这些容器组件具有父子关系,所有组件依附于这个骨架,而且这个骨架是不变的,我们在扩展 Tomcat 的功能时也需要基于这个骨架,因此 Tomcat 在设计上相对来说比较复杂。而 Jetty 更像是一位年轻的后起之秀,脑子转得很快,可塑性也很强,但有时候也会犯一点小错误。...原创 2022-08-14 18:26:08 · 360 阅读 · 0 评论 -
Day707.Jetty性能调优的思路 -深入拆解 Tomcat & Jetty
学习了 Jetty 调优的基本思路,主要分为·操作系统级别·的调优和 ·Jetty 本身·的调优,其中操作系统级别也适用于 Tomcat。通过一个实例来寻找 Jetty 的最佳线程数,在测试中我们发现,对于 ·CPU 密集型·应用,将·最大线程数设置 CPU 核数的 1.5 倍是最佳的·。因此,在我们的实际工作中,切勿将线程池直接设置得很大,因为程序所需要的线程数可能会比我们想象的要小。上面说到,Jetty 的最大线程数应该在 50 到 500 之间。...原创 2022-08-13 15:53:53 · 1477 阅读 · 0 评论 -
Day706.Tomcat进程占用CPU过高怎么办 -深入拆解 Tomcat & Jetty
当我们遇到 CPU 过高的问题时,首先要定位是哪个进程的导致的,之后可以通过top -H -p pid命令定位到具体的线程。其次还要通 jstack 查看线程的状态,看看线程的个数或者线程的状态,如果线程数过多,可以怀疑是线程上下文切换的开销,我们可以通过 vmstat 和 pidstat 这两个工具进行确认。哪些情况可能导致程序中的线程数失控,产生大量线程呢?1.使用了Java的newCachedThreadPool,因为最大线程数是int最大值2.自定义线程池最大线程数设置不合理。...原创 2022-08-12 22:52:19 · 427 阅读 · 0 评论 -
Day705.Tomcat拒绝连接原因分析及网络优化 -深入拆解 Tomcat & Jetty
在 Socket 网络通信过程中,不可避免地会碰到各种 Java 异常,了解这些异常产生的原因非常关键,通过这些信息我们大概知道问题出在哪里,如果一时找不到问题代码,我们还可以通过网络抓包工具来分析数据包。和。acceptCount 用来控制内核的 TCP 连接队列长度,maxConnections 用于控制 Tomcat 层面的最大连接数。通过调整和相关的内核参数somaxconn,增加了系统的并发度。......原创 2022-08-11 22:22:19 · 2997 阅读 · 0 评论 -
Day704.Tomcat内存溢出的原因分析及调优 -深入拆解 Tomcat & Jetty
Hi,我是阿昌。今天学习记录的是关于。作为 Java 程序员,我们几乎都会碰到 java.lang.OutOfMemoryError 异常,但是你知道有哪些原因可能导致 JVM 抛出异常吗?JVM 在抛出 java.lang.OutOfMemoryError 时,除了会打印出一行描述信息,还会打印堆栈跟踪,因此我们可以通过这些信息来找到导致异常的原因。在寻找原因前,我们先来看看有哪些因素会导致 OutOfMemoryError,其中内存泄漏。...原创 2022-08-10 21:38:33 · 2140 阅读 · 0 评论 -
Day703.Tomcat I/O和线程池的并发调优 -深入拆解 Tomcat & Jetty
理论上可通过利特尔法则或者 CPU 时间与 I/O 时间的比率,计算出一个理想值,这个值只具有指导意义,因为它受到各种资源的限制,实际场景中,我们需要在理想值的基础上进行压测,来获得最佳线程数。其实调优很多时候都是在找系统瓶颈,假如有个状况:系统响应比较慢,但 CPU 的用率不高,内存有所增加,通过分析 Heap Dump 发现大量请求堆积在线程池的队列中,请问这种情况下应该怎么办呢?这种情况应该怀疑大量线程被阻塞了,应该看看web应用是不是在访问外部数据库或者外部服务遇到了延迟。...原创 2022-08-09 21:29:41 · 376 阅读 · 0 评论 -
Day702.监控Tomcat的性能 -深入拆解 Tomcat & Jetty
Tomcat 中的关键的性能指标以及如何监控这些指标:主要有吞吐量、响应时间、错误数、线程池、CPU 以及 JVM 内存。在实际工作中,我们需要通过观察这些指标来诊断系统遇到的性能问题,找到性能瓶颈。如果我们监控到 CPU 上升,这时我们可以看看吞吐量是不是也上升了,如果是那说明正常;如果不是的话,可以看看 GC 的活动,如果 GC 活动频繁,并且内存居高不下,基本可以断定是内存泄漏。请问工作中你如何监控 Web 应用的健康状态?遇到性能问题的时候是如何做问题定位的呢?...原创 2022-08-08 21:28:44 · 809 阅读 · 0 评论 -
Day701.JVM GC原理及调优的基本思路 -深入拆解 Tomcat & Jetty
对于 CMS 来说,我们要合理设置年轻代和年老代的大小。你可能会问该如何确定它们的大小呢?这是一个迭代的过程,可以先采用 JVM 的默认值,然后通过压测分析 GC 日志。如果我们看年轻代的内存使用率处在高位,导致频繁的 Minor GC,而频繁 GC 的效率又不高,说明对象没那么快能被回收,这时年轻代可以适当调大一点。如果我们看年老代的内存使用率处在高位,导致频繁的 Full GC,这样分两种情况:如果每次 Full GC 后年老代的内存占用率没有下来,可以怀疑是内存泄漏;...原创 2022-08-07 15:25:00 · 317 阅读 · 0 评论 -
Day700.Cluster组件:Tomcat的集群通信原理 -深入拆解 Tomcat & Jetty
Hi,我是,今天学习记录的是关于的内容。为了支持水平扩展和高可用,Tomcat 提供了集群部署的能力,但与此同时也带来了分布式系统的一个通用问题,那就是如何在集群中的多个节点之间保持数据的一致性,比如会话(Session)信息。要实现这一点,基本上有两种方式,一种是把所有 Session 数据放到一台服务器或者一个数据库中,集群中的所有节点通过访问这台 Session 服务器来获取数据。另一种方式就是在集群中的节点间进行 Session 数据的同步拷贝,这里又分为两种策略:第一种是将一个节点的 Sessi原创 2022-08-06 14:23:13 · 607 阅读 · 0 评论 -
Day699.Tomcat的Session管理机制 -深入拆解 Tomcat & Jetty
今天从 Request 谈到了 Session 的创建、销毁和事件通知,里面涉及不少相关的类下面我画了一张图帮你理解和消化一下这些类的关系:Servlet 规范中定义了 HttpServletRequest 和 HttpSession 接口,Tomcat 实现了这些接口,但具体实现细节并没有暴露给开发者,因此定义了两个包装类,RequestFacade 和 StandardSessionFacade。...原创 2022-08-06 01:29:04 · 442 阅读 · 0 评论 -
Day698.Tomcat的日志框架及实战 -深入拆解 Tomcat & Jetty
默认情况下,Tomcat 的日志模板叫作 JULI,JULI 的日志门面采用了 JCL,而具体实现是基于 Java 默认的日志框架 Java Util Logging,Tomcat 在 Java Util Logging 基础上进行了改造,使得它自身的日志框架不会影响 Web 应用,并且可以分模板配置日志的输出文件和格式。Tomcat 独立部署时,各种日志都输出到了相应的日志文件,假如 Spring Boot 以内嵌式的方式运行 Tomcat,这种情况下 Tomcat 的日志都输出到哪里去了?...原创 2022-08-04 21:54:58 · 977 阅读 · 0 评论 -
Day696.Jetty如何实现具有上下文信息的责任链 -深入拆解 Tomcat & Jetty
Jetty 中 ScopedHandler 的实现原理,剖析了如何实现链式调用的“回溯”。主要是确定了 doScope 和 doHandle 的调用顺序,doScope 依次调用完以后,再依次调用 doHandle,它的子类比如 ContextHandler 只需要实现 doScope 和 doHandle 方法,而不需要关心它们被调用的顺序。这背后的原理是,ScopedHandler 通过递归的方式来设置_outScope和_nextScope两个变量,然后通过判断这些值来控制调用的顺序。...原创 2022-08-02 21:21:19 · 367 阅读 · 0 评论 -
Day695.Spring Boot如何使用内嵌式的Tomcat和Jetty -深入拆解 Tomcat & Jetty
ServletContainerInitializer调用所有实现ServletContextInitializer接口类的方法。ServletContextInitializer是通过ServletContextInitializer类型依赖查找的,是Spring管理的。原创 2022-08-01 21:24:31 · 839 阅读 · 0 评论 -
Day694.Tomcat如何支持异步Servlet -深入拆解 Tomcat & Jetty
非阻塞I/O模型可以利用很少的线程处理大量的连接,提高了并发度,本质就是通过一个Selector线程查询多个Socket的I/O事件,减少了线程的阻塞等待。同样,异步Servlet机制也是减少了线程的阻塞等待,将Tomcat线程和业务线程分开,Tomcat线程不再等待业务代码的执行。那什么样的场景适合异步Servlet呢?适合的场景有很多,最主要的还是根据你的实际情况,如果你拿不准是否适合异步Servlet,就看一条https。...原创 2022-07-31 14:32:26 · 685 阅读 · 2 评论 -
Day693.Tomcat如何实现Servlet规范 -深入拆解 Tomcat & Jetty
Servlet规范中最重要的就是Servlet、Filter和Listener“三兄弟”。Web容器最重要的职能就是把它们创建出来,并在适当的时候调用它们的方法。Tomcat通过Wrapper容器来管理Servlet,Wrapper包装了Servlet本身以及相应的参数,这体现了面向对象中“封装”的设计原则。Tomcat会给每个请求生成一个Filter链,Filter链中的最后一个Filter会负责调用Servlet的service方法。...原创 2022-07-30 11:11:28 · 318 阅读 · 0 评论 -
Day692.Tomcat如何隔离Web应用 -深入拆解 Tomcat & Jetty
Tomcat的Context组件为每个Web应用创建一个WebAppClassLoader类加载器,由于不同类加载器实例加载的类是互相隔离的,因此达到了隔离Web应用的目的,同时通过CommonClassLoader等父加载器来共享第三方JAR包。而共享的第三方JAR包怎么加载特定Web应用的类呢?可以通过设置线程上下文加载器来解决。每个Web应用自己的Java类文件和依赖的JAR包,分别放在WEB-INF/classes和WEB-INF/lib目录下面。......原创 2022-07-29 22:50:30 · 616 阅读 · 0 评论 -
Day691.Tomcat如何打破双亲委托机制 -深入拆解 Tomcat & Jetty
今天我介绍了JVM的类加载器原理和源码剖析,以及Tomcat的类加载器是如何打破双亲委托机制的,目的是为了优先加载Web应用目录下的类,然后再加载其他目录下的类,这也是Servlet规范的推荐做法。要打破双亲委托机制,需要继承ClassLoader抽象类,并且需要重写它的loadClass方法,因为ClassLoader的默认实现就是双亲委托。不想打破双亲委托机制就重写findClass方法想要打破双亲委托机制就重写loadClass方法https。...原创 2022-07-28 22:48:31 · 320 阅读 · 0 评论 -
Day690.Tomcat如何实现热部署和热加载 -深入拆解 Tomcat & Jetty
Tomcat的热加载和热部署,它们的目的都是在不重启Tomcat的情况下实现Web应用的更新。热加载的粒度比较小,主要是针对类文件的更新,通过创建新的类加载器来实现重新加载。而热部署是针对整个Web应用的,Tomcat会将原来的Context对象整个销毁掉,再重新创建Context容器对象。热加载热部署是通过事件来完成的,host容器监听事件,然后处理变化,Host热部署是父容器,如果也采用定时任务,那么context都重新加载了,也就没有热加载什么事情了。...原创 2022-07-27 22:26:06 · 1354 阅读 · 0 评论 -
Day689.内核如何阻塞与唤醒进程 -深入拆解 Tomcat & Jetty
首先CPU在用户态执行应用程序的代码,访问进程虚拟地址空间的用户空间;read系统调用时CPU从用户态切换到内核态,执行内核代码,内核检测到Socket上的数据未就绪时,将进程的task_struct结构体从运行队列中移到等待队列,并触发一次CPU调度,这时进程会让出CPU;httpshttpshttps。......原创 2022-07-26 22:12:48 · 260 阅读 · 0 评论 -
Day688.Tomcat和Jetty高并发策略案例 -深入拆解 Tomcat & Jetty
高性能程序能够高效的利用系统资源,首先就是减少资源浪费,比如要减少线程的阻塞,因为阻塞会导致资源闲置和线程上下文切换,Tomcat和Jetty通过合理的I/O模型和线程模型减少了线程的阻塞。另外系统调用会导致用户态和内核态切换的过程,Tomcat和Jetty通过缓存和延迟解析尽量减少系统调用,另外还通过零拷贝技术避免多余的数据拷贝。高效的利用资源还包括另一层含义,那就是我们在系统设计的过程中,经常会用一种资源换取另一种资源高效的并发编程也很重要,多线程虽然可以提高并发度原子变量和。...原创 2022-07-25 22:08:03 · 424 阅读 · 1 评论 -
Day687.Tomcat和Jetty中的对象池技术 -深入拆解 Tomcat & Jetty
Tomcat和Jetty都用到了对象池技术,这是因为处理一次HTTP请求的时间比较短,但是这个过程中又需要创建大量复杂对象。对象池技术可以减少频繁创建和销毁对象带来的成本,实现对象的缓存和复用。如果你的系统需要频繁的创建和销毁对象,并且对象的创建代价比较大,这种情况下,一般来说你会观察到GC的压力比较大,占用CPU率比较高,这个时候你就可以考虑使用对象池了。https。...原创 2022-07-24 12:38:45 · 455 阅读 · 0 评论 -
Day686.Jetty的线程策略EatWhatYouKill -深入拆解 Tomcat & Jetty
多线程虽然是提高并发的法宝,但并不是说线程越多越好,CPU缓存以及线程上下文切换的开销也是需要考虑的。Jetty巧妙设计了EatWhatYouKill的线程策略,尽量用同一个线程侦测I/O事件和处理I/O事件,充分利用了CPU缓存,并减少了线程切换的开销。httpshttpshttpshttps。...原创 2022-07-23 16:16:44 · 494 阅读 · 0 评论 -
Day685.Tomcat如何支持WebSocket -深入拆解 Tomcat & Jetty
WebSocket技术实现了Tomcat与浏览器的双向通信,Tomcat可以主动向浏览器推送数据,可以用来实现对数据实时性要求比较高的应用。这需要浏览器和Web服务器同时支持WebSocket标准,Tomcat启动时通过SCI技术来扫描和加载WebSocket的处理类ServerEndpoint,并且建立起了URL到ServerEndpoint的映射关系。httpshttpshttpshttps。......原创 2022-07-22 23:38:37 · 1060 阅读 · 1 评论 -
Day684.Executor组件:Tomcat如何扩展Java线程池 -深入拆解 Tomcat & Jetty
池化的目的是为了避免频繁地创建和销毁对象,减少对系统资源的消耗。Java提供了默认的线程池实现,我们也可以扩展Java原生的线程池来实现定制自己的线程池,Tomcat就是这么做的。Tomcat扩展了Java线程池的核心类ThreadPoolExecutor,并重写了它的execute方法,定制了自己的任务处理流程。同时Tomcat还实现了定制版的任务队列,重写了offer方法,使得在任务队列长度无限制的情况下,线程池仍然有机会创建新的线程。...原创 2022-07-21 21:42:12 · 260 阅读 · 0 评论 -
Day683.AprEndpoint组件:Tomcat APR提高I/O性能的秘密 -深入拆解 Tomcat & Jetty
对于一些需要频繁与操作系统进行交互的场景,比如网络通信,Java的效率没有C语言高,特别是TLS协议握手过程中需要多次网络交互,这种情况下使用APR本地库能够显著提升性能。除此之外,APR提升性能的秘密还有通过避免了JVM堆与本地内存之间的内存拷贝;通过sendfile特性避免了内核与应用之间的内存拷贝以及用户态和内核态的切换。其实很多高性能网络通信组件,比如Netty,都是通过DirectByteBuffer来收发网络数据的。httpshttpshttps。...原创 2022-07-20 21:30:12 · 443 阅读 · 0 评论 -
Day682.Nio2Endpoint组件:Tomcat如何实现异步I/O -深入拆解 Tomcat & Jetty
在异步I/O模型里,内核做了很多事情,它把数据准备好,并拷贝到用户空间,再通知应用程序去处理,也就是调用应用程序注册的回调函数。Java在操作系统异步IOAPI的基础上进行了封装,提供了JavaNIO.2API,而Tomcat的异步I/O模型就是基于JavaNIO.2实现的。由于NIO和NIO.2的API接口和使用方法完全不同,可以想象一个系统中如果已经支持同步I/O,要再支持异步I/O,改动是比较大的,很有可能不得不重新设计组件之间的接口。https。...原创 2022-07-19 22:24:50 · 481 阅读 · 0 评论 -
Day681.NioEndpoint组件:Tomcat如何实现非阻塞I/O -深入拆解 Tomcat & Jetty
I/O模型是为了解决内存和外部设备速度差异的问题。我们平时说的阻塞或非阻塞是指应用程序在发起I/O操作时,是立即返回还是等待。而同步和异步,是指应用程序在与内核通信时,数据从内核空间到应用空间的拷贝,是由内核主动发起还是由应用程序来触发。在Tomcat中,Endpoint组件的主要工作就是处理I/O,而NioEndpoint利用JavaNIOAPI实现了多路复用I/O模型。谁主动,同步就是A问B要东西,总是A主动”伸手“问B要。httpshttpshttps。...原创 2022-07-18 21:39:31 · 440 阅读 · 1 评论 -
Day680.大佬如何学习源码 -深入拆解 Tomcat & Jetty
带着这些问题去分析相关的源码效率会更高,同时你在寻找答案的过程中,也会碰到更多问题,等你把这些问题都弄清楚了,你获得的不仅仅是知识,更重要的是你会树立起攻克难关的信心。当你对知识有了一定的积累,这时再来学一个新的系统,往往你只需要瞧上几眼,就能明白它所用的架构,而且你会自然联想到系统存在哪些角色,以及角色之间的关系,包括静态的依赖关系和动态的协作关系,甚至你会不由自主带着审视的眼光,来发现一些可以改进的地方。当然在这个过程中,你还可以看看产品的官方文档,熟悉一下大概的设路。...原创 2022-07-17 19:54:27 · 854 阅读 · 0 评论 -
Day679.优化并提高Tomcat启动速度 -深入拆解 Tomcat & Jetty
清理、减少无需加载文件或配置关闭一些用不到的设置项增加启动并行度httpshttpshttpshttpshttpshttpshttps。原创 2022-07-16 10:32:07 · 609 阅读 · 0 评论 -
Day678.从Tomcat和Jetty中提炼组件化设计规范 -深入拆解 Tomcat & Jetty
通过搭积木的方式来定制化自己的Web容器。Web容器为了支持这种组件化设计,遵循了一些规范,比如面向接口编程,用“管理者”去组装这些组件,用反射的方式动态的创建组件、统一管理组件的周期,并且给组件生命状态的变化提供了扩展点,组件的具体实现一般遵循骨架抽象类和模板模式。https。...原创 2022-07-15 22:48:56 · 283 阅读 · 0 评论 -
Day677.Jetty架构之Handler组件 -深入拆解 Tomcat & Jetty
JettyServer就是由多个Connector、多个Handler,以及一个线程池组成。Jetty的Handler设计是它的一大特色,Jetty本质就是一个Handler管理器,Jetty本身就提供了一些默认Handler来实现Servlet容器的功能,你也可以定义自己的Handler来添加到Jetty中,这体现了“微内核+插件”的设计思想。httpshttpshttpshttps。...原创 2022-07-14 21:29:41 · 815 阅读 · 0 评论 -
Day676.Jetty架构之Connector组件 -深入拆解 Tomcat & Jetty
Hi,我是阿昌,今天学习的是关于。 是 Eclipse 基金会的一个开源项目,和 Tomcat 一样,Jetty 也是一个“”,并且 Jetty 和 Tomcat 在架构设计上有不少相似的地方。但同时 Jetty 也有自己的特点,主要是更加小易于定制化。Jetty 作为一名后起之秀,应用范围也越来越广,比如 Google App Engine 就采用了 Jetty 来作为 Web 容器。 就是由、,以及一个线程池组成。整体结构请看下面这张图:跟 Tomcat 一样,Jetty 也有 HTTP 服务器和 S.原创 2022-07-13 21:24:34 · 705 阅读 · 0 评论 -
Day675.Tomcat的“高层们” -深入拆解 Tomcat & Jetty
Hi,我是阿昌,今天学习记录的关于Tomcat 的/bin目录下的脚本来启动 Tomcat,那你是否知道我们执行了这个脚本后发生了什么呢?下面这张流程图来了解一下:可以把 Bootstrap 看作是上帝,它初始化了类加载器,也就造万物的工具。如果我们把 Tomcat 比作是一家公司,那么 Catalina 应该是公司创始人,因为 Catalina 负责组建团队,也就是创建 Server 以及它的子组件。Server 是公司的 CEO,负责管理多个事业群,每个事业群就是一个 Service。Service 是原创 2022-07-12 21:57:47 · 264 阅读 · 0 评论 -
Day674.Tomcat如何实现一键式启停 -深入拆解 Tomcat & Jetty
Hi,我是阿昌,今天学习的是关于Tomcat是的。先复习一下前几天学习的内容:上面这张图描述了组件之间的,如果想让一个系统能够提供服务,我们需要创建、组装并启动这些组件;在服务停止的时候,我们还需要释放资源,销毁这些组件,因此这是一个动态的过程。也就是说,Tomcat 需要动态地管理这些组件的。在我们实际的工作中,如果你需要设计一个比较大的系统或者框架时,你同样也需要考虑这几个问题:如何统一管理组件的创建、初始化、启动、停止和销毁?如何做到代码逻辑清晰?如何方便地添加或者删除组件?如何做到组件启动和停止不原创 2022-07-11 21:15:44 · 272 阅读 · 2 评论 -
Day673.Tomcat系统架构(容器) -深入拆解 Tomcat & Jetty
Hi,我是阿昌,昨天学习的是关于Tomcat系统架构的连接器内容,今天是关于容器的内容。Tomcat 有两个核心组件连接器负责外部交流,容器负责内部处理。具体来说就是,连接器处理 Socket 通信和应用层协议的解析,得到 Servlet 请求;而容器则负责处理 Servlet 请求。通过下面这张图来回忆一下。容器,顾名思义就是用来装载东西的器具,在 Tomcat 里,容器就是用来装载 Servlet 的。那 Tomcat 的 Servlet 容器是如何设计的呢?Tomcat 设计了 4 种容器,分...原创 2022-07-10 17:42:52 · 385 阅读 · 0 评论 -
Day672.Tomcat系统架构(连接器) -深入拆解 Tomcat & Jetty
Hi,我是阿昌,今天学习记录的是关于。Tomcat 要实现 2 个核心功能:因此 Tomcat 设计了两个核心)和来分别做这两件事情。连接器负责对外交流,容器负责内部处理。所以连接器和容器可以说是 Tomcat 架构里最重要的两,需要你花些精力理解清楚。Tomcat 支持的多种 I/O 模型和应用层协议。Tomcat 支持的 I/O 模型有:Tomcat 支持的应用层协议有:Tomcat 为了实现支持多种 I/O 模型和应用层协议,一个容器可能对接多个连接器,就好比一个房间有多个门。但是单独的连接器或者容器原创 2022-07-09 14:52:28 · 288 阅读 · 0 评论 -
Day671.纯手工打造和运行一个Servlet -深入拆解 Tomcat & Jetty
Hi,我是阿昌,今天学习关于的是在一个简易的HelloWorld程序。作为 Java 程序员,我们可能已经习惯了使用 IDE 和 Web 框架进行开发DE 帮我们做了编译、打包的工作,而 Spring 框架在背后帮我们实现了 Servlet 接口,并把 Servlet 注册到了 Web 容器,这样我们可能很少有机会接触到一些底层本质的东西,比如怎么开发一个 Servlet?如何编译 Servlet?如何在 Web 容器中跑起来?纯手工编写一个 Servlet,并在 Tomcat 中运行起来。主要的步骤有:原创 2022-07-08 23:53:15 · 290 阅读 · 1 评论 -
Day670.Servlet规范&Servlet容器 -深入拆解 Tomcat & Jetty
Hi,我是阿昌,今天学习关于的内容是的学习记录。浏览器发给服务端的是一个 的请求,HTTP 服务器收到这个请求后,需要调用服务端程序来处理,所谓的服务端程序就是你写的 Java 类,一般来说不同的请求需要由 Java 类来处理。那么问题来了,HTTP 服务器怎么知道要调用哪个 Java 类的哪个方法呢。最直接的做法是在 HTTP 服务器代码里写一大堆 if else 逻辑判断:如果是 A 请求就调 X 类的 M1 方法,如果是 B 请求就调 Y 类的 M2 方法。但这样做明显有问题,因为 HTTP 服务器.原创 2022-07-07 21:10:32 · 297 阅读 · 0 评论 -
Day669.HTTP协议 -深入拆解 Tomcat & Jetty
Hi,我是阿昌,今天学习的是关于。首先:HTTP 和 HTML 有什么区别?HTTP 协议是浏览服务器之间的数据传送协议。作为应用层协议,HTTP 是基于 ·TCP/IP 协议·来传递数据的(HTML 文件、图片、查询结果等),HTTP 协议不涉及数据包(Packet)传输,主要规定了客户端和服务器之间的通信格式。浏览器需要从远程 HTTP 服务器获取一个 HTML 文本,在这个过程中,浏览器实际上要做两件事情。第一步比较容易理解,浏览器从地址栏获取用户输入的网址和端口,去连接远端的服务器,这样就能通信了原创 2022-07-06 21:17:01 · 415 阅读 · 0 评论 -
Day668.Web容器学习路径 -深入拆解 Tomcat & Jetty
Hi,阿昌来也,今天开始学习新的文章,更多去学习关于Web容器相关的知识。回顾一下 Web 技术的发展历史,可以帮助你理解 Web 容器的由来。早期的 Web 应用主要用于浏览新闻等,HTTP 服务器(比如 Apache、Nginx)向浏览器返回静态 HTML,浏览器负责解析 HTML,将结果呈现给用户。随着互联网的发展,我们已经不满足于仅仅浏览静态页面,还希望通过一些操作,来获取动态结果,因此也就需要一些扩展机制能够让 HTTP 服务器调用服务端程序。于是 推出了 。你可以把 Servlet 简单理解..原创 2022-07-05 21:44:58 · 405 阅读 · 0 评论