Inside tomcat(一)-------你所认识的容器是怎样的?

最近在研究tomcat容器,打算写一系列文章和大家一起分享。本文第一篇作为引子,不涉及任何tomcat的底层实现。

 

我们知道servlet规范

规定servlet的生命周期:init->service->doXXX-->destory()。

还规定一个请求必须被封装成HttpServletRequest再由servlet的service方法来处理,并用HttpServletResponse来表示返回对象。

还规定Session必须被封装成HttpSession的形式。

Servlet规范还规定了Filter过滤器可以拦截请求做一些处理。

Servlet规范还规定了监听器Listener可以在context初始化、servlet初始化等一系列事件发生时触发一些事情。

 

Servlet规范使得我们的应用可以和底层的socket、字节流等完全隔离。

但是servlet规范只是个接口,真正使得我们实现了这些隔离的工作是由容器帮我们做的。

 

那么你所认为的容器应该是怎么样的?ServletJsp容器应该做些什么?

1:实现Servlet api规范。这是最基础的一个实现,servlet api大部分都是接口规范。如requestresponsesessioncookie。为了我们应用端能正常使用,容器必须有一套完整实现。

2:启动Socket监听端口,等待http请求。

3:获取http请求,分发请求给不同的协议处理器,如httphttps在处理上是不一样的。

4:封装请求,构造HttpServletRequest。把socket获取的用户请求字节流转换成java对象httprequest。构造httpResponse

5:调用(若未创建,则先加载)servlet,调用init初始化,执行servlet.service()方法。

6:为httpResponse添加header等头部信息。

7socket回写流,返回满足http协议格式的数据给浏览器。

8:实现JSP语法分析器,JSP标记解释器。JSPservlet实现和渲染引擎。

9JNDIJMX等服务实现。容器一般额外提供命名空间服务管理。

10:线程池管理,创建线程池,并为每个请求分配线程。

11…..

 

 

还有没有其他的事情需要容器实现的?大家补充,哈哈。

 

那么tomcat是如何实现的呢?下面将会有一系列总结和大家一起探讨哈。

 

附上一个tomcat deverloper guide,基于tomcat6的,有兴趣的大家一起研究

 

 

 

 

你可能感兴趣的:(tomcat,jsp,应用服务器,servlet,socket)