您的位置:首页 > 编程语言 > Java开发

Struts、Ajax、Restful、Web Service 狂想曲框架实现篇(一)

2011-11-25 11:43 393 查看
承接上篇的简单介绍,下面详细介绍整个框架的大致结构。

先来看一下整个框架包的结构:



可以看出框架包含的包很少,包的结构也超简单。这里 涉及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>

大致的原理就是这样,在下篇介绍框架的详细实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: