servlet

 servlet容器Catalina 

服务器上需要一些程序,常常是根据用户输入访问数据库的程序,之前通常是使用公共网关接口(CGI)应用程序完成的。然而在通信量大的时候,javaServlet的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务端处理请求的系统开销将明显降低。

servlet是平台独立的java类,可以被动态得加载到支持java技术的web服务器中运行。servlet API与协议无关。

刚出现servlet时,许多web服务器不支持servlet,为了支持servlet需要单独开发程序,这种程序被叫做servlet container(servlet容器)或servlet engine小程序引擎。Catalina便是tomcat的servlet容器。

servlet容器由两部分构成:web服务器插件和java容器。web服务器插件在web服务器内存地址空间中打开一个JVM实例,然后在此jvm实例上加载java容器并运行servlet。如果客户端调用servlet(通过web.xml),web服务器先将此请求的控制权交给web服务器插件,web服务器插件使用JNI技术交给java容器,java容器再把此请求交给servlet来处理。处理完后servlet将response中的处理结果转发给web服务器,并将控制权返回web服务器。

根据组成tomcat的组件将tomcat分层:

tomcat由一系列可配置的组件组成,核心组件是servlet容器catalina,它是其他tomcat组件的顶层容器。各个组件将tomcat分为若干层。各层通过数据管道pipeline交互。

http://blog.csdn.net/yanghua_kobe/article/details/7561016

server层: 逻辑上表示整个tomcat,即整个儿servlet容器catalina,处于tomcat顶层,包含一个或多个service层。

service层:包含一个engine层,以及一个或多个connector。

engine层:可以连接多个connector,此层是请求分发处理层。engine组件从connector接受请求后,解析出用户请求的url后,根据url把请求匹配到正确的host上。host处理完请求后,engine层把结果返回给适合的连接器,再由连接器传输给用户。

host层:表示一个虚拟主机。一个engine层可包含多个host。host层接到请求后根据url将请求定位到对应的context层。

context层:一个host可包含多个context层,对应不同的web应用。

 servlet包下http包:

Tomcat的主线程干了些什么?

            传给servlet的doService方法(doGet或doPost)的HttpServletRequest对象没有获取参数的getParameter方法,该方法继承于其父类ServletRequest。那么,ServletRequest中的数据怎么来的?客户端的数据是怎么被封装到ServletRequest中的?【getParameter怎么是抽象方法???在哪里被实现的???】                                             

新生的小心情
原文地址:https://www.cnblogs.com/jianmianruxin/p/7764995.html