趣文网 > 作文大全

tomcat学习|DefaultServlet|tomcat做文件服务器

2020-11-19 16:05:01
相关推荐

学习背景

前面,我们一起学习到了tomcat对web请求的处理通过学习我们可以知道在对web请求进行处理时,以CoyoteAdapter.service为入口,然后经历了各级Container(Engine, Host , Context, wrapper)的pipeline 中 valve 来进行处理,到最后的时候,会经过ApplicationFilterChain到达我们的过滤器链,最后到Servlet, 这个servlet 就是最后处理请求的地方

ApplicationFilterChain

最原始的web应用,其实是web.xml和servlet的组合. 所有和web相关的配置都在web.xml里面,现在用了spring-boot 之后,我们看不到web.xml了,但并不代表他不存在了.web.xml里面的东西都是在的.在Web整个请求的过程中,我们从过滤器链执行完之后,调用Servlet开始处理逻辑ApplicationFilterChain的主要字段有四个, filters,pos, n , servletfilters: 当前过滤器链中有的过滤器pos: 代表当前执行的过滤器的位置n: 代表这个过滤器链中总共有多少个过滤器servlet: 当过滤器执行到最后一个的时候,即pos = n 的时候,就调用servlet的实例,执行servlet方法

源码如下:/** * Filters. */private ApplicationFilterConfig[] filters = new ApplicationFilterConfig[0];/** * The int which is used to maintain the current position * in the filter chain. */privateint pos = 0;/** * The int which gives the current number of filters in the chain. */privateint n = 0;/** * The servlet instance to be executed by this chain. */private Servlet servlet = null;

可以看到, 在过滤器链执行结束的时候,会调用servlet.service方法

框架的通用封装方法

我们在ApplicationFilterConfig这个类中可以看到,过滤器主要是调用doFilter方法进行处理

但是在doFilter方法中,我们看到,只有一些通用的逻辑,并没有实际的处理,而是把逻辑下放到internalDoFilter里面

在tomcat源码中,对internalDoFilter做了直接实现. 在通用封装中,我们会把internalDoFilter做成一个抽象方法,然后交于子类去实现, 这样可以定义不同的子类去实现不同的逻辑.如我们以前讲的初始化的时候init方法的实现

DefaultServlet

我们在Servlet声明,都是在web.xml之中,所以我们要去web.xml里面去找,这个web应用有哪些servlet,我们找到了DefaultServlet, 其实还有一个jspServlet,这里就不展开了

同样还有配套的servletMapping ,当没有别的servlet处理请求时,就使用这个defaultServlet来处理

我们可以通过类关系图,看到DefaultServlet的继承关系

通过类关系图,他在通用的Servlet的基础之上添加了Http的处理我们从入口service方法可以看到:

然后在父类方法中可以看到:

然后会调用实现类的doGet方法,我们回到DefaultServlet中,看看doGet方法,可以看到,实际上是对服务器资源的处理

我们细致分析下来,可以划分为以下几段,从请求资源的定位,到获取资源的属性,到获取资源的内容,到最后设置response的输出

tomcat做文件服务器

经过上面对DefaultServlet的分析,我们可以发现,他就是一个资源服务器,所以我们可以直接用tomcat做一个文件服务器,如下图所示,我们在webapps下面新建了一个文件夹

然后启动tomcat,访问我们的资源

提示: content-type

最后说两句

通过这一系列学习,我们学习了tomcat请求从入口,到最后的servlet处理,大家有什么想法,可以分享给小刀

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

雾的作文 感动的事作文 好奇作文 误会作文 乐观的作文 什么的我作文 说明文的作文 梅花 作文 同行作文 作文立意 作文指导 我的奇思妙想作文450字四年级 传承优良家风争做时代新人作文 任何题目都可以套的万能作文 我的课余生活作文300字 这才是少年应有的模样作文 让自己奔跑起来作文 校园新变化作文 美丽的秋天作文300字 以阳光为话题的作文 童年趣事作文800字 关于端午节的英语作文 以书为话题的作文 让我感动的一件事作文 最有趣的一件事作文 我的老师作文350字 22年高考作文 走一步再走一步作文 欧阳修论作文 雪中情作文