传说用户发来的请求是在JIoEndpoint的accept函数中接收的,是tomact与外界交互的分界点
传说用户发来的请求是在JIoEndpoint的accept函数中接收的,
这是tomact与外界交互的分界点,所以来研究一下,
》》》》》》》》》》》》》》》JIoEndpoint》》》》》》》》》》》》》》》》》》》 从最顶层的interface开启: ==================JIoEndpoint 怎么被拉起================ public interface ProtocolHandler
---》public abstract class AbstractProtocol<S> implements ProtocolHandler,MBeanRegistration
---》public abstract class AbstractAjpProtocol<S> extends AbstractProtocol<S> {
---》public class AjpProtocol extends AbstractAjpProtocol<Socket> java.org.apache.coyote.ajp.AjpProtocol.AjpProtocol() public AjpProtocol() {
endpoint = new JIoEndpoint();
cHandler = new AjpConnectionHandler(this);
((JIoEndpoint) endpoint).setHandler(cHandler);
setSoLinger(Constants.DEFAULT_CONNECTION_LINGER);
setSoTimeout(Constants.DEFAULT_CONNECTION_TIMEOUT);
setTcpNoDelay(Constants.DEFAULT_TCP_NO_DELAY);
} public class JIoEndpoint extends AbstractEndpoint<Socket>
JIoEndpoint ==================JIoEndpoint 怎么被拉起================ ================JIoEndpoint 处理请求================== endpoint = new JIoEndpoint(); ((JIoEndpoint) endpoint).setHandler(cHandler);
-----》 public void setHandler(Handler handler ) { this.handler = handler; }
------》cHandler = new AjpConnectionHandler(this); this --》AjpProtocol--》AbstractAjpProtocol--》AbstractProtocol
----------》void java.org.apache.coyote.AbstractProtocol.init() throws Exception
---》endpoint.init();
-------》AbstractEndpoint.init()
---》bind();
---》public abstract void bind() throws Exception; ----》JIoEndpoint.bind() serverSocket = serverSocketFactory.createSocket(getPort(), getBacklog()); ???是谁调用的?startInternal()
----->startAcceptorThreads();
---> AbstractEndpoint.startAcceptorThreads()
acceptors[i] = createAcceptor();
t.start(); --->JIoEndpoint
protected AbstractEndpoint.Acceptor createAcceptor() {
return new Acceptor();
}
-----------> java.org.apache.tomcat.util.net.AbstractEndpoint.Acceptor ---->run()
---> JIoEndpoint.processSocket(Socket socket)
--> getExecutor().execute(new SocketProcessor(wrapper)); --->SocketProcessor
---->run()
--> state = handler.process(socket, SocketStatus.OPEN_READ); handler====Http11Protocol 之后又会是谁去处理呢?
结论是 JIoEndpoint在调用 Http11ConnectionHandler 的process方法进行处理。
看网上有人给的,我是没有想通,只是猜的,最后的解释在最后面给出。
Http11Processor {
Http11Protocol() public Http11Protocol() {
endpoint = new JIoEndpoint();
cHandler = new Http11ConnectionHandler(this);
((JIoEndpoint) endpoint).setHandler(cHandler);
setSoLinger(Constants.DEFAULT_CONNECTION_LINGER);
setSoTimeout(Constants.DEFAULT_CONNECTION_TIMEOUT);
setTcpNoDelay(Constants.DEFAULT_TCP_NO_DELAY);
}
----------------》Http11ConnectionHandler
---------------》protected static class Http11ConnectionHandler
extends AbstractConnectionHandler<Socket, Http11Processor> implements Handler {
}
Http11Processor createProcessor()
之后的都是看网上的,待后再看
processor.setAdapter(proto.adapter); adapter---》CoyoteAdapter StandardEngin容器默认管道StandardEnginValve StandardHost ---》StandardHostValue
StandardHostValue则选择相应的Context容器
StandardContext默认情况下配置了StandardContextValve
之后选择一个合适的Wrapper容器。
StandardWrapper容器默认情况下配置了StandardWrapperValve。
是启动过滤器FilterChain,对请求执行过滤操作。2)执行service方法。 补充说明,StandardWrapper容器是对于Servlet的包装,
所有的Request的资源可以分成4种不同的类型,
静态资源请求(HTML,图片,CSS等),JSP请求,Servlet请求,以及CGI请求。
对于不同的请求Tomcat用WebdavServlet处理静态资源文件,JspServlet处理Jsp请求,CGIServlet处理CGI请求。
================JIoEndpoint 处理请求================== =======解释========
猜 因为用的http协议是1.1,所以最后用到的是Http11Protocol public interface Handler extends AbstractEndpoint.Handler
的实现类有如下 java.org.apache.coyote
AbstractProtocol<S>
AbstractConnectionHandler<S, P> (potential match) java.org.apache.coyote.ajp
AjpAprProtocol
AjpNioProtocol
AjpProtocol
java.org.apache.coyote.http11
Http11AprProtocol
Http11NioProtocol
Http11Protocol
java.org.apache.naming.factory.webservices -
ServiceRefFactory
initHandlerChain(QName, HandlerRegistry, HandlerInfo, ArrayList<String>) (2 potential matches)
java.org.apache.tomcat.util.net
AprEndpoint
JIoEndpoint
NioEndpoint =======解释======== 》》》》》》》》》》》》》》》JIoEndpoint》》》》》》》》》》》》》》》》》》》
传说用户发来的请求是在JIoEndpoint的accept函数中接收的,是tomact与外界交互的分界点的更多相关文章
- 在controller的action内, 得到用户发过来的请求地址和参数url
class PController extends Controller{ public function Log() { echo $_SERVER["HTTP_HOST"] . ...
- 微信程序开发系列教程(三)使用微信API给微信用户发文本消息
这个系列的第二篇教程,介绍的实际是被动方式给微信用户发文本消息,即微信用户关注您的公众号时,微信平台将这个关注事件通过一个HTTP post发送到您的微信消息服务器上.您对这个post请求做了应答(格 ...
- PHP公众号开发给用户发微信消息提醒功能
最近做的一个项目,当有用户有资金到账或者成员变动时需要给他发一条微信消息提示.针对这个,开始想使用模板消息,但是刚注册的公众号申请消息模板需要几天时间申请,在时间不足下选择了使用客服消息接口,微信文档 ...
- 一个tcp连接可以发多少http请求
-----来自:松若章 -----zhuanlan.zhihu.com/p/61423830 曾经有这么一道经典面试题:从 URL 在浏览器被被输入到页面展现的过程中发生了什么?相信大多数准备过的同学 ...
- Java发HTTP POST请求(内容为xml格式)
Java发HTTP POST请求(内容为xml格式) 一.POST请求 服务器地址:http://5.0.217.50:17001/VideoSend 服务器提供的是xml格式的http接口,接口定义 ...
- filter过滤器 默认情况下只对客户端发来的请求有过滤作用 对服务端的跳转不起作用 需要显示的在xml定义过滤的方式才行
filter过滤器 默认情况下只对客户端发来的请求有过滤作用 对服务端的跳转不起作用 需要显示的在xml定义过滤的方式才行
- jquery 发get post请求
https://www.cnblogs.com/summers/p/3225375.html POST 方法不会缓存数据 $.get(URL,callback); 2个参数 callback 参数是请 ...
- 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- HTTP请求定义不同Content-Type及在SpringMVC如何接收(必看!!!)
前言最近在和三方对接的时候发现了一些问题,这也是我写这篇文章的原因.我大概花了三天时间把这些内容了解,实践,整理,然后分享给大家,希望对大家会有所帮助.废话不多说,在和三方对接的时候我们规定使用jso ...
随机推荐
- JAVA关于byte数组与String转换的问题
1 public class ToString{ public static void main(String[] args){ String aa = "hellow"; byt ...
- LeetCode——Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings. 写一个函数找出字符串数组中 ...
- gdb与信号
http://simohayha.iteye.com/blog/493091 gdb可以监测在你的程序中的任何信号. 主要靠的命令是: handle signal [keywords...] 这里的k ...
- 怎样創建 iOS 展開式 UITableView?
原文:http://www.appcoda.com.tw/expandable-table-view/ 译者:kmyhy(appcoda的驻站译者) 幾乎全部的 App 都會以導航的方式向用戶展示多個 ...
- 50个Android开发技巧(09 避免用EditText对日期进行验证)
我们都知道,在表单中对数据进行验证不但无聊并且easy出错. (原文地址:http://blog.csdn.net/vector_yi/article/details/24424713) 想象一下,一 ...
- 汇编中中括号[]作用以及lea和mov指令的区别
现在总结一下:其中牵扯到lea指令,mov指令,[] 一.lea指令:对于寄存器来说:第二个操作数是寄存器必须要加[],不然报错,这里lea就是取[寄存器]的值,如:mov eax,2lea ebx, ...
- A string is a sequence
A string is a sequence of characters. You can access the characters one at a time with the bracket o ...
- 1.boost库的安装
一.前言 好好研究下大名鼎鼎的Boost库. 二.Boost安装 2.1Boost官网下载Boost最新版Version 1.55.0 2.2将下载压缩包解压到本地 解压后可看到目录下有个bootst ...
- 19.允许重复的unordered_map
#include <string> #include <iostream> //查询性能最高 //允许重复的,hash_map #include <unordered_m ...
- IIS 7.5 配置
安装 MVC 3 对应版本. 或者对应的版本. 登陆时候报错 检查下面几项是否配置正确 检查ASP.net 是否开启. 检查网站的应用池是否配置正确 在处理程序映射当中检查这几项是否配置正确 如果都配 ...