Posted on 2011-11-25 11:43
马航 阅读(341)
评论(0) 编辑 收藏
承接上篇的简单介绍,下面详细介绍整个框架的大致结构。
先来看一下整个框架包的结构:
可以看出框架包含的包很少,包的结构也超简单。这里 涉及Filter、ActionSupport、Router等三个概念,他们之间的关系,通过下图来表示:
图也不规范,说不上来是哪个UML图,不过通过它也能看出一个请求到达时,框架基本的处理流程。首先由Filter拦截到所有请求,然后把请求交给所有注册的Router类,如果请求的Url正好是一个Router要拦截的,则把此请求交给这个Router,框架不再把请求向下传递。Router得到请求后,分析Url,通过Url里的信息把请求交给对应的ActionSupport的子类来处理。
这里拦截采用Filter来处理,这跟多数的web框架一样,使用Filter比Servlet有更多的能力进行请求的分发。首先在一个web工程的web.xml文件中配置框架的UrlFilter类来拦截所有的请求。需要注意的一点是dispatcher 要设置为request,如果设置了forward的话,由框架内部进行的forward又会被框架拦截,从而造成无限的循环。Url-pattern设置为/*,表示所有的请求都会拦截,从而把对url分发的权利交由框架本身,而不是采用jsp规范里的url分发策略。框架在处理所有请求的url 时,依次交给各个Router类来处理,如果Router类判断是符合自己的url格式,则分发给 action 处理。如果不能处理再交给下一级的Router,最后url经由所有Router处理完,剩下的资源文件的url,如http://xxx.xxx.xxx.jpg,则框架调用filter的doChain()方法,通过filter的过滤去访问web里的资源。
<filter>
<filter-name>unicornWeb</filter-name>
<filter-class>com.mh.mvc.filter.UrlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>unicornWeb</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
|
大致的原理就是这样,在下篇介绍框架的详细实现。