<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Asktalk

    天行健,君子以自強(qiáng)不息!
    posts - 21, comments - 79, trackbacks - 0, articles - 2
      BlogJava :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理

    2007年12月25日

     

    這是一個目前最好的一個開源分頁標(biāo)簽的實現(xiàn)---extremeTable標(biāo)簽。今天談?wù)勊?/span>Limit的設(shè)計架構(gòu)思想。

    這個設(shè)計很通用,經(jīng)過作者的多次重構(gòu),現(xiàn)在extremeTable的架構(gòu)非常漂亮。這個標(biāo)簽現(xiàn)在缺點是有些參數(shù)對mvc控制器屏蔽了,應(yīng)提供一致的對外接口。不過整體上設(shè)計還是很精致的,面向?qū)ο髞硖幚?html元素,與spring非常的默契,非常便于開發(fā)和測試。

    類圖關(guān)系

    1, 工廠LimitFactory

    TableLimitFactoryAbstractLimitFactoryLimitFactory

    TableLimitFactory是最終實現(xiàn)的工廠,它extendsAbstractLimitFactory抽象類,AbstractLimitFactory implementsLimitFactory接口。

    TableLimitFactory主要是用來實例化,通過構(gòu)造函數(shù)傳入?yún)?shù)。同時創(chuàng)建Registry來完成jsp頁面參數(shù)傳入Registry。當(dāng)然還有一個功能就是從web.xml的配置文件讀取一些全局參數(shù)。首先讀取配置文件參數(shù),然后根據(jù)參數(shù)創(chuàng)建LimitRegistry對象。

    this.registry = new LimitRegistry(context, tableId, prefixWithTableId, state, stateAttr);

    AbstractLimitFactory主要是用來獲取jsp頁面上設(shè)置的參數(shù),比如分頁的信息(第幾頁,起始行,結(jié)束行,每頁顯示行數(shù),查詢條件,排序條件等),當(dāng)然他是通過工具類Registry來實現(xiàn)。

    2, Limit

    TableLimitLimit。其主要作用是一個參數(shù)參數(shù)器,就是把Registry對象的參數(shù)傳入TableLimit,考慮到分層吧,TableLimit是該標(biāo)簽和action通信的橋梁。就像我們的j2ee項目vodaostrutsview等數(shù)據(jù)傳輸工具。

    3, Preferences

    TablePropertiesProperties 主要是來實現(xiàn)從web.xml配置的文件中讀取配置的一些全局參數(shù)。

    InputStream input = this.getClass().getResourceAsStream(preferencesLocation);

    if (input != null) {

    properties.load(input);

    }

    其中preferencesLocation是路徑,在TableLimitFactory初始化時候,通過工具類TableModelUtils.getPreferencesLocation(context)獲取。

    這個設(shè)計也是大多數(shù)需要配置文件的系統(tǒng)常用的方法。

    4, Registry

    LimitRegistryAbstractRegistryRegistry

    這個體系結(jié)構(gòu)和上面的工廠模式一樣,就是LimitRegistry主要是用來實例化,通過構(gòu)造函數(shù)傳入?yún)?shù)。AbstractRegistry是實際實現(xiàn)類,獲取jsp表單提交的參數(shù),并提供getter方法供Limit來使用。Registry是一個接口。

    所以這設(shè)計模式,我們可以來學(xué)習(xí),

    經(jīng)典表述:抽象類接口

    類:初始化,定義構(gòu)造函數(shù),傳入?yún)?shù)。

    抽象類:定義業(yè)務(wù)方法在此。

    接口:定義接口方法,這個不用多說。

    (作者:asktalk   來自 http://m.tkk7.com/askltak 原創(chuàng)文章,轉(zhuǎn)載請注明出處)

    posted @ 2007-12-26 16:17 Asktalk 閱讀(4613) | 評論 (5)編輯 收藏

     

    下面是從struts的角度來談?wù)?/span>spring自帶的web框架的使用。
    當(dāng)然,我們在配置
    web框架前,需要把spring配置好,這里就不多說了。

    1.web框架核心servletweb.xml中的配置。


     

     1<servlet>  
     2<servlet-name>Dispatcher</servlet-name>  
     3<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <init-param>   
     4<param-name>contextConfigLocation</param-name>   <param-value>/WEB-INF/Config.xml</param-value>
     5  </init-param> 
     6</servlet>  
     7
     8<servlet-mapping>  
     9<servlet-name>Dispatcher</servlet-name>  
    10<url-pattern>*.do</url-pattern>
    11 </servlet-mapping>
    12

     

    如果沒有配置config.xml文件,那么其默認(rèn)的配置文件為[ servlet-name ]-servlet.xml 。也就是我們這個配置的默認(rèn)配置文件是Dispatcher-servlet.xml

    2.web框架的xml配置

    spring web框架與struts最大的不同就是spring web框架根據(jù)分工,把每一種功能都定義為一種組件,所以在開發(fā)過程中需要配置的東西就非常多;Spring中分為幾個角色:

    核心控制器,就是web框架的主 servlet

    業(yè)務(wù)控制器,也就是struts中的action對象;

    映射處理器,定義了訪問路徑如何與webxml中的bean相匹配,就是定義了一種策略;

    視圖和視圖解析器,視圖就是jstl,velocity,xslt等,視圖解析器定義了action最終導(dǎo)航頁面的策略;

    模型,就是struts MVC結(jié)構(gòu)中的model

    Command對象,類似于struts中的formBean

    2.1 Spring web框架與struts框架的區(qū)別

    下面列出了一些。例如,

    Web框架要攔截*.do路徑,那么*.do如何與我們下面的bean匹配,就需要一個映射控制器。在struts中就是名字相同的匹配,不需要配置。

    action最后要導(dǎo)向到不同的頁面,在struts中我們用的是默認(rèn)的不需要在xml文件中配置,在spring中就需要配置視圖解析器。

    下面代碼中,ActioncommandClass配置的就是類似于struts中的formBean對象。

     1<?xml version="1.0" encoding="UTF-8"?>
     2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
     3 "http://www.springframework.org/dtd/spring-beans.dtd">
     4<beans>
     5 <!--Definition of View Resolver -->
     6 <bean id="viewResolver"
     7  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     8  <property name="viewClass"> 
     9   <value>org.springframework.web.servlet.view.JstlView</value>
    10  </property>
    11  <property name="prefix">
    12   <value>/WEB-INF/view/</value>
    13  </property>
    14  <property name="suffix">
    15   <value>.jsp</value>
    16  </property>
    17 </bean>
    18  
    19<!—就是我們上面說的映射控制器 -->
    20 <!--Request Mapping -->
    21 <bean id="urlMapping"
    22  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    23  <property name="mappings">
    24   <props>
    25    <prop key="/login.do">LoginAction</prop>
    26   </props>
    27  </property>
    28 </bean>
    29 
    30<!---類似于struts的action配置-->
    31 <!---Action Definition-->
    32 <bean id="LoginAction"
    33  class="com.maxway.action.LoginAction">
    34  <property name="commandClass">
    35   <value>com.maxway.action.LoginInfo</value>
    36  </property>
    37  <property name="fail_view">
    38   <value>loginfail</value>
    39  </property>
    40  <property name="success_view">
    41   <value>main</value>
    42  </property>
    43 </bean>
    44</beans>
    45


     

    3.代碼的編寫

    Action不外乎繼承一些現(xiàn)成的類,來實現(xiàn)我們view部分的業(yè)務(wù)。
    作者:http://m.tkk7.com/asktalk

    posted @ 2007-12-25 02:23 Asktalk 閱讀(4325) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 久久国内免费视频| 亚洲VA成无码人在线观看天堂| 日韩大片免费观看视频播放| 三上悠亚亚洲一区高清| 久久精品无码专区免费青青| 亚洲大成色www永久网址| 亚洲日韩精品无码专区网站| 91免费福利精品国产| 国产AV无码专区亚洲AV琪琪| 久久久久亚洲av无码专区蜜芽 | 无码国产精品一区二区免费3p| 亚洲国产电影在线观看| 亚洲AV伊人久久青青草原| 120秒男女动态视频免费| 青娱乐在线视频免费观看| 久久国产亚洲高清观看| 亚洲国产精品综合久久一线| 182tv免费视视频线路一二三| 男女男精品网站免费观看| 亚洲日产2021三区在线| 亚洲色一色噜一噜噜噜| 日韩欧美一区二区三区免费观看| 中国黄色免费网站| 亚洲国产AV无码一区二区三区| 亚洲av无码不卡| 亚洲av午夜精品一区二区三区| 亚洲免费综合色在线视频| 在线观看免费黄网站| 羞羞视频免费观看| 中文字幕亚洲精品| 亚洲国产精品尤物YW在线观看| 皇色在线视频免费网站| 99久久99久久免费精品小说| 成人久久久观看免费毛片| 狠狠色伊人亚洲综合网站色| 亚洲午夜久久久精品影院| 久久久久久久亚洲精品| 性做久久久久免费观看| 免费99精品国产自在现线| 午夜视频免费在线观看| 中文字幕手机在线免费看电影 |