tomcat是如何处理请求的

主要查看tomcat的server.xml配置文件,其顺序大致如下:

在输入http://localhost:8080/myweb/index.jsp的时候;

1,请求被端口为8080的connector监听到,对应于server.xml里:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

2,connector将请求交给他所在的service里对应的engine,来处理;

<Engine defaultHost="localhost" name="Catalina">

3,engine获得请求后,将匹配他所有的host主机,如果匹配不到则交给默认的defaultHost,也就是localhost;此时,从请求localhost/myweb/index.jsp中解析到,对应的host主机名为“localhost”;

4,host接收到请求后,匹配他下面的context,也就是你部署的项目,这里从请求路径“/myweb/index.jsp”中,解析到对应的context为“myweb”,故交给name=”myweb”的context处理;

5,context随后在自己的mapping table里寻找servlet-mapping拦截路径为*.jsp的servlet,这里找到得是JSPServlet处理(下面解释);

6,找到JSPServlet后,开始构造 HttpServletRequest和HttpServletResponse,用于参数调用JSPServlet的doGet或doPOST方法;

7,context执行完毕后,将HttpServletResponse 返回给Host;

8,host将HttpServletResponse 返回给engine;

9,engine 将HttpServletResponse 返回给 connector;

10, connector 将 HttpServletResponse 返回给用户的browser;

补充,tomcat容器在启动后,context对应的项目在初始化的时候,要加载相应的servlet,加载的顺序为:

1,$CATALINA_HOME/conf/web.xml里定义的servlet(对应于上面第5步的JSPServlet);

2,context对应的项目WEB-INF下的web.xml中定义的servlet;

更正:,HttpServletRequest不是在context处生成的,而是在connector生成的,connector在接受到请求后,也就是一个socket连接,将socket封装成Request和Response对象;

补充2:tomcat采用的是BIO的方式,即同步阻塞方式,也就是说,一个连接创建一个线程,注意,是一次“连接”,也就是说,只要有一个TCP连接,tomcat就会创建对应的线程来处理,这里势必会造成不必要的开销,当然可以采用线程池优化,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值