一直以来都觉得写框架是一个很困难的事情,但是随着经验的增加也开始研究了一些主流的webmvc框架,现在依样画瓢来完成一个最简单的框架。
既然是web框架servlet是必不可少的
一般的主流web框架加载配置不外乎xml配置filter或者listener当然或许也有用servlet的。。
我们先看下用listener filter 以及servlet的配置
首先我用一个servlet 2.5的api
<filter> <filter-name>testFilter2</filter-name> <filter-class>cn.github.studyframework.filter.TestFilter2</filter-class> </filter> <filter> <filter-name>testFilter1</filter-name> <filter-class>cn.github.studyframework.filter.TestFilter1</filter-class> </filter> <filter-mapping> <filter-name>testFilter1</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>testFilter2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>testServlet1</servlet-name> <servlet-class>cn.github.studyframework.servlet.TestServlet1</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>testServlet1</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>testServlet2</servlet-name> <servlet-class>cn.github.studyframework.servlet.TestServlet2</servlet-class> <load-on-startup>-111</load-on-startup> </servlet> <servlet-mapping> <servlet-name>testServlet2</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <listener> <listener-class>cn.github.studyframework.listener.TestListener2</listener-class> </listener> <listener> <listener-class>cn.github.studyframework.listener.TestListener1</listener-class> </listener>
代码中各个init方法我们都加上system.out.println这样可以看出servlet加载的先后顺序
启动容器
可以看出listener首先执行 其次是fitler 最后才是servlet.listener跟fitler的执行顺序跟配置先后相关。
最后说下servlet
在servlet上 load-on-startup 这个参数可以控制servlet的加载策略以及顺序。
0是立即加载 正数越大加载越慢。负数跟不配置调用才会执行。
我使用tomcat6 7都是这样的顺序,但是我本机用的嵌入式的jetty 这个时候-111明显执行而且优于0,也许是jetty默认的设置原因,但是请使用servlet的人都注意点
最后的结论是我建议大家使用listener来加载,这样优先级更高。
下章继续说明。