zoukankan      html  css  js  c++  java
  • Struts、Ajax、Restful、Web Service 狂想曲框架实现篇(一)

          承接上篇的简单介绍,下面详细介绍整个框架的大致结构。

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

     

          可以看出框架包含的包很少,包的结构也超简单。这里 涉及FilterActionSupportRouter等三个概念,他们之间的关系,通过下图来表示:

     

          图也不规范,说不上来是哪个UML图,不过通过它也能看出一个请求到达时,框架基本的处理流程。首先由Filter拦截到所有请求,然后把请求交给所有注册的Router类,如果请求的Url正好是一个Router要拦截的,则把此请求交给这个Router,框架不再把请求向下传递。Router得到请求后,分析Url,通过Url里的信息把请求交给对应的ActionSupport的子类来处理。

          这里拦截采用Filter来处理,这跟多数的web框架一样,使用FilterServlet有更多的能力进行请求的分发。首先在一个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,则框架调用filterdoChain()方法,通过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>

          大致的原理就是这样,在下篇介绍框架的详细实现。

  • 相关阅读:
    [HTML]HTML5实现可编辑表格
    [xcode]instruments来检验你的app
    [xcode]Xcode查找函数(方法)调用及被调用
    [工具][windows][visualStudio][充电]番茄助手vaassist常见用法
    [算法]判断一个数是不是2的N次方
    [Ogre]纹理设置
    C++中的类型重定义
    [STL]set/multiset用法详解[自从VS2010开始,set的iterator类型自动就是const的引用类型]
    [Ogre][地形][原创]基于OgreTerrain的地形实现
    PHP模板引擎Smarty内建函数section,sectionelse用法详解
  • 原文地址:https://www.cnblogs.com/mahang/p/2262966.html
Copyright © 2011-2022 走看看