一文读懂tomcat - Go语言中文社区

一文读懂tomcat


https://www.cnblogs.com/zhuawang/p/5213192.html

问:http和https有什么区别?

答:https是在http的基础上加了一层SSL或者TLS协议,提供了加解密的机制;http的端口号是80,https的端口号是443

问:https在三次握手的时候与http的区别?

答:https比http多了一步SSL的握手协议,具体的步骤如下:

(1)客户端浏览器向服务器发送SSL/TLS协议的版本号,加密算法的种类,产生的随机数,以及其它需要的各种信息;

(2)服务器选择一种客户端支持的价码算法和Hash算法,并且把自己的证书信息(网站地址,加密公钥,证书颁发机构)发给客户端;

(3)浏览器获取到证书信息后,进行对其验证,验证不通过会显示证书不受信;

(4)然后,客户端浏览器生成一个随机数并且用服务器传来的公钥加密,再用Hash算法计算握手消息,发生到服务端;

(5)服务端接到握手消息后用自己的私钥解密,并用散列算法验证,这样双方都有了此次通信的密钥;

(6)服务器再使用密钥加密一段握手消息,返回给客户端;

(7)浏览器用密钥解密,并用散列算法验证,确认算法与密钥。

问:web容器中的servlet的工作机制是什么?

答:web容器有多个一般会有多个servlet对象,servlet有著名的生命周期,实例化--初始化--处理请求--销毁;其中实例化由web容器完成,其它三个由servlet完成,init,service,destroy方法;初始化只需读取配置文件,处理请求一般是获取和返回,就是servletRequset和servletResponse,最后可以调用destory销毁servlet。

问:tomcat的启动脚本是startup.bat吗?

答:不是,startup.bat是为了寻找catalina.bat文件

问:一次完整的tomcat请求是什么逻辑?

答:

(1)Tomcat启动后,Connector组件的接受器(Acceptior)将会监听客户端的Socket

(2)与Socket连接后,将连接交给线程池Executor

(3)Http11Processor组件读取客户端的消息报文,解析HTTP的请求行,请求头,请求体;并且解析完的信息封装成Request对象,之后代码可以根据Request对象获取到信息

(4)Mapper组件是分析HTTP的URL属性和请求头Host的属性匹配哪个Host容器、哪个Context容器、哪个Wrapper容器来处理请求,简单说就是配置该请求对应的是哪一个servlet(一步步找到属于自己的servlet)

(5)CoyoteAdaptor负责连接Connector组件和Engine容器(承上启下的作用)

(6)接下来的Engine、Host、Context、Wrappe依次执行相应的阀门,Wrapper对应的是Servlet

(7)返回结果给客户端

问:线程池的原理是什么?

答:线程池里面的线程也不是一直在那待着不动的,在线程池里的线程一旦调用start方法就开始执行任务了,关键就是这个任务是什么,才能保持它一直在做类似于等待被调用的状态,不然会被GC回收;

线程池的三要素,线程数量、线程数组、任务队列,其中最关键的就是任务队列,所以刚才说的线程池中的所有线程start之后就是在不断检测任务队列里有没有任务,一旦有,线程就抢着去执行

问:tomcat接受请求的两种模式是BIO模式和NIO模式,有什么区别?

答:BIO先消耗线程池中的线程数,再去创建新的线程,直到消耗到线程池的最大线程数,再有请求的话会放在一个队列里面,如果超过队列大小就直接拒绝请求,客户端报“connection refused”

NIO所以的一切客户端请求由一个接收线程接收,将具体读写操作交给线程池,不会像BIO直接去访问线程池

问:提到Tomcat的性能,会考虑到并发,Tomcat有控制流量的流量控制器,它是怎么实现的?

答:AQS并发框架

问:两种模式的默认并发数是多少?

答:BIO是200,NIO是1000,这个数字只是最大接收的客户端连接;进来之后还是会放在接收队列的,系统的接收队列的默认长度是100,当然上面的三个数字都是可配置的

问:tomcat的连接时,会产生连接对象,tomcat会频繁地出现生成对象和销毁对象的情况;为了提高性能应该怎么去优化呢?

答:这种是比较常见的优化方式:将即将被销毁的对象放到一个队列里面,下次用这个对象的时候优先去队列里去找,如果找不到再去生成这个对象。

问:war包部署的过程?

答:(1)尝试读取war包里面的/META-INF/context.xml文件

(2)通过Digester框架解析context.xml文件,根据配置属性生成Context对象

(3)通过反射生成ContextConfig,并作为监听器添加到Context对象

(4)设置Context对象的其他属性

(5)调用Host的addChild方法将Context对象添加到Host中,此时Context会开始启动

(6)将Context对象中的WatchedResource添加到重加载监听列表中,tomcat会有专门的后台线程去检测这些变动,如果有改动就去更改Context内容

问:在tomcat,servlet容器是指哪一个容器

答:在context容器里有若干个Wrapper容器,属于tomcat最小的容器,Wrapper容器就是servlet

问:websocket的请求原理?

答:

 

问:什么是双亲委派模式?

答:如果一个类需要被加载,类加载不会立马自己去加载,而是委派给父类去加载,父类再往上委派,直到最上层;其中一层父类表示没办法加载了,子类加载器才会自己加载;这种模式保证了所以类都是同一版本的,提高了安全性

问:tomcat有自己的类加载器吗?

有:叫common类加载器

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_34707991/article/details/90262310
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-08-27 13:25:15
  • 阅读 ( 1827 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢