当前位置: 代码迷 >> Web前端 >> 学习写一个web框架入门 怎么加载配置(一)
  详细解决方案

学习写一个web框架入门 怎么加载配置(一)

热度:84   发布时间:2012-11-07 09:56:10.0
学习写一个web框架入门 如何加载配置(一)
一直以来都觉得写框架是一个很困难的事情,但是随着经验的增加也开始研究了一些主流的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来加载,这样优先级更高。
下章继续说明。
  相关解决方案