暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Tomcat原理解析(壹)— Servlet

CodeForLearning 2020-09-28
750

    Tomcat 汤姆猫大家应该都不陌生,是我们Javaer都应该知道的内容,它是一个Web容器,是Java Web的基础,所以我们都应该了解了解其原理相关内容。

我们先从Servlet讲起:


Servlet


    在编写Servlet应用时,必须遵守Servlet规范,即Servlet接口和Servlet容器的一整套规范被称作Servlet规范,来看下图:


    Servlet通俗将就是一个接口,实现了Servlet的接口的类即我们的业务类,Servlet接口很简单:

public interface Servlet {
void init(ServletConfig config) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest req, ServletResponse res)throws ServletException, IOExc
String getServletInfo();
void destroy();
}
  • 其中Service是最重要的方法,是实现业务类的方法,参数是ServletRequest,ServletResponse,其中将请求的所有信息封装成ServletRequest,比如cookie,请求头,ServletResponse则是返回的对象

  • initdestory是声明周期方法,在servlet创建时调用init方法,在销毁时调用destory方法,可以初始化资源和释放资源

  • ServetConfig是一个配置对象,封装初始化参数。



Servlet容器:

    Servlet容器是用来管理Servlet的,Tomcat将请求交给Servlet容器处理,Servlet容器会转发到具体的Servlet,如果还没有创建,则需要先加载并实例化这个Servlet并调用Servlet的Service方法;


Servlet容器请求流程:


  • 当客户请求某个资源时,HTTP 服务器会用一个 ServletRequest 对象把客户的请求信息封装起来,

  • 然后调用 Servlet 容器的 service 方法,Servlet 容器拿到请求后,根据请求的URL 和 Servlet 的映射关系,找到相应的 Servlet,如果 Servlet 还没有被加载,就用反射机制创建这个 Servlet,

  • 并调用 Servlet 的 init 方法来完成初始化,接着调用 Servlet 的service 方法来处理请求,

  • 把 ServletResponse 对象返回给 HTTP 服务器,HTTP 服务器会把响应发送给客户端  

ServletContext

    每一个ServletContext对应一个Web应用,Servlet容器在启动时,为每一个Web应用创建一个ServletContext对象,一个Web容器中有可能有多个Servlet,我们就可以将ServletContext看做是一个全局对象,用来共享数据(Web应用的初始化参数、Web应用目录下的文件资源等数据)


Filter

    Filter是过滤器,这个接口允许对请求和响应做一些统一的处理,比如你可以根据请求的频率来限制访问,或者过滤不合法字符。


过滤器的工作原理是这样的:

    Web 应用部署完成后,Servlet 容器需要实例化 Filter 并把 Filter 链接成一个FilterChain。当请求进来时,获取第一个 Filter 并调用 doFilter 方法,doFilter 方法负责调用这个 FilterChain 中的下一个 Filter。 


Listener

    Listener是监听器。当 Web 应用在 Servlet 容器中运行时,Servlet容器内部会不断的发生各种事件,如Web应用的启动和停止、用户请求到达等。Servlet容器提供了一些默认的监听器来监听这些事件,当事件发生时,Servlet 容器会负责调用监听器的方法 。


Servlet和Spring的关联

    先来一个简单的关联:


  1. Tomcat在启动时给每一个Web应用创建一个全局的上下文环境ServletContext,为Spring提供宿主;

  2. Tomcat在启动过程中触发容器初始化条件,Spring的ContextLoaderListener监听到后触发contextInitialized方法,在这个方法中,初始化全局Spring容器即IoC容器,IoC初始化完后,Spring将其存储到ServletContext中,以便后来获取使用。

一张图足以说明:


本文到此结束,下一篇Tomcat系统架构已更新!

文章转载自CodeForLearning,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论