Servlet、Listener、Filter由javax.servlet.ServletContext去加载,无论是使用xml配置文件还是使用Annotation注解配置,均由Web容器进行初始化,读取其中的配置属性,然后向容器中进行注册。
ServletContext对象,它是Servlet的上下文,它记录着Servlet的相关信息。
在Servlet 3.0 API中,允许ServletContext使用动态进行注册,在Web容器初始化时,也就说创建ServletContext对象的时候进行动态注册,它提供了add*/create*方法来实现动态注入的功能
Servlet
是运行在Web服务器上或应用服务器上的程序,它是作为来自HTTP客户端的请求和HTTP服务端上的数据库或应用程序之间的中间层。它负责处理用户的请求,并根据请求生成相应的返回信息提供给用户
请求处理过程:
Filter
过滤器,其主要功能是在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest;在HttpServletResponxe返回客户端之前,拦截Servlet的HttpServletResponxe
当Servlet容器开始调用某个Servlet程序时,如果发现已经注册了一个Filter程序来对该Servlet进行拦截,那么容器不在直接调用Servlet的service方法,而事调用Filter的doFilter方法,再由doFilter方法决定是否激活service方法,激活方式是通过调用FilterChain.doFilter方法
Listener
监听器,用于监听某些特定动作。当特定动作发生时,监听该动作的监听器会调用对应方法
Tomcat 8.0.45
Tomcat作为一个Web服务器,实现了两个非常核心的功能:
上述两个功能对应着tomcat的两个核心组件连接器(Connector)和容器(Container),连接器负责对外交流(完成Http服务器功能),容器负责内部处理(完成Servlet容器功能)
Server:服务器,代表整个tomcat服务器,一个tomcat只有一个Server,用于提供具体服务
Service:服务,是Server那边组件,一个Server可以包括多个Service,它将若干个Connector组件绑定到一个Container
Connector:连接器,一个Service可以有多个Connector,主要连接客户端请求,用于接收请求并将请求封装成Request和Response对象,然后交给Container处理,处理完成交给Connector返回给客户端
主要完成的核心功能:
以上分别对应三个组件 EndPoint、Processor、Adapter 来完成。Endpoint 负责提供请求字节流给Processor,Processor 负责提供 Tomcat 定义的 Request 对象给 Adapter,Adapter 负责提供标准的 ServletRequest 对象给 Servlet 容器。