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

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

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

    每日一得

    不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發(fā)
    最近關(guān)心的內(nèi)容:SSH,seam,flex,敏捷,TDD
    本站的官方站點(diǎn)是:顛覆軟件

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      220 隨筆 :: 9 文章 :: 421 評(píng)論 :: 0 Trackbacks

    引言:最近在看一個(gè)開源的聊天室AjaxChat 時(shí)看到一個(gè)被引用的包:javawebparts,處于好奇去看了一下,突然發(fā)現(xiàn)這么好的一個(gè)常用web組件不去用實(shí)在是太可惜了,下面逐一介紹,詳細(xì)文檔大家可以去官方文檔看看,最好看它的Demo,很直觀。

    javawebparts的口號(hào)是:不用重新發(fā)明輪子 !

    header1.gif

    對(duì)這點(diǎn)我是嚴(yán)重支持啊,在我的身邊看到N多所謂的牛人來到項(xiàng)目組作的第一件事就是把以前的項(xiàng)目推倒,重新實(shí)現(xiàn)自己的所謂一套先進(jìn)的東西,靠,你有多先進(jìn)啊,你的自己"方言"一邊自我欣賞,一邊還讓別人接受,再來一個(gè)人又把這個(gè)推倒,循環(huán)。。。。無語.

    所以,用開源吧 ,是不是繞的太遠(yuǎn)了? :) 讓我們言歸正傳吧.

    一。管理你的web配置文件信息

    web的配置文件是我們經(jīng)常要用到的,配置信息我們可以分為兩大類,一類是最簡(jiǎn)單的"平板"型的,比如:

    For an XML config file like this:

    < config >
    < firstName > Frank </ firstName >
    </ config >


    The following bean could be used:
    public ? class ?MyConfigBean?{
    private ? static ?String?firstName;
    public ? void ?setFirstName(String?inFirstName)?{
    firstName?
    = ?inFirstName;
    }
    public ?String?getFirstName()?{
    return ?firstName;
    }
    }
    在應(yīng)用中你不用去自己解析xml了,javawebparts已經(jīng)幫你做好了,你只要getFirstName()就可以了,是不是很方便?

    你所要做的工作就是在web.xml中引用一個(gè)listener,配置如下:

    <context-param>
    <param-name>configFile</param-name>
    <param-value>/WEB-INF/app_config.xml<?/param-value></context-param>
    <context-param>
    <param-name>rootElement</param-name>
    <param-value>config</param-value>?</context-param>
    <context-param>
    <param-name>configClass</param-name>
    <param-value>javawebparts.sampleapp.?SampleAppConfigBean</param-value>
    </context-param>
    <context-param>
    <param-name>AjaxPartsTaglibConfig</param-name>
    <param-value>/WEB-INF/ajax_config.xml</param-value>
    </context-param>

    <listener>
    <listener-class>javawebparts.listener.?AppConfigContextListener</listener-class>
    </listener>

    這種平板型結(jié)構(gòu)的數(shù)據(jù)這樣就已經(jīng)OK了,還有一種是復(fù)雜一點(diǎn)的,有層次結(jié)構(gòu),比如在Bean中可能還有collection,需要自己實(shí)現(xiàn)一下,也不復(fù)雜直接調(diào)用apache的Digester就可以了(實(shí)際上在javawebparts到處都有Digester的影子),需要了解的請(qǐng)參看 用Digester解析xml到bean

    二。緩存頁面

    比如,我想緩存所有的gif圖片,但是jpg的不緩存,web.xml中配置如下:

    <filter>
    <filter-name>CacheControlFilter</filter-name>
    <filter-class>javawebparts.filter.?CacheControlFilter</filter-class>
    <init-param>
    <param-name>pathSpec</param-name>
    <param-value>include</param-value>
    </init-param>
    <init-param>
    <param-name>pathList</param-name>
    <param-value>*/header1.gif,?*.jpg</param-value>
    </init-param>
    </filter>

    <filter-mapping>
    <filter-name>CacheControlFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    它的后臺(tái)實(shí)現(xiàn)機(jī)制很簡(jiǎn)單,內(nèi)部部分代碼如下:

    ((HttpServletResponse)response).setHeader("Pragma",?"No-cache");
    ((HttpServletResponse)response).setHeader(
    "Cache-Control",
    "no-cache,no-store,max-age=0");
    ((HttpServletResponse)response).setDateHeader(
    "Expires",?1);

    三。圖片壓縮


    是不是對(duì)gzip壓縮很親切? 對(duì)的,就是傳說中可以壓縮圖片減少網(wǎng)絡(luò)傳輸體積的玩意,現(xiàn)在你只要在web.xml中增加以下內(nèi)容就可以輕松實(shí)現(xiàn)了:

    <filter>
    <filter-name>CompressionFilter</filter-name>
    <filter-class>javawebparts.filter.?CompressionFilter</filter-class>
    <init-param>
    <param-name>pathSpec</param-name>
    <param-value>include</param-value>
    </init-param>
    <init-param>
    <param-name>pathList</param-name>
    <param-value>*/bigimage2.gif</?param-value>
    </init-param>
    <init-param>
    <param-name>compressType</param-name>
    <param-value>gzip_first</param-value>
    </init-param>
    </filter>

    <filter-mapping>
    <filter-name>CompressionFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    上面的配置表示只對(duì)bigimage2.gif的文件進(jìn)行壓縮,其他不用,pathSpec的屬性有兩種include,exclude,意思已經(jīng)很明確了,相反地意思,而pathList得內(nèi)部實(shí)現(xiàn)也是用正則表達(dá)式實(shí)現(xiàn)的,支持*等用法.這些內(nèi)部實(shí)現(xiàn)你覺得復(fù)雜的話就不用管它了,反正人家已經(jīng)給你實(shí)現(xiàn)好了,你只要說"給我壓縮'美女與野獸.JPG'"就可以了

    四.控制只在設(shè)定的時(shí)間范圍內(nèi)訪問應(yīng)用

    比如說只允許在工作時(shí)間內(nèi)可以訪問應(yīng)用,其他時(shí)間禁止訪問,雖然不是很普遍不過這種需求還是有的,如果自己實(shí)現(xiàn)還是比較麻煩的,我們用現(xiàn)成的,配置如下:(怎么都是配置阿?對(duì),全部是配置就可以了,難道不好嗎?太爽了啊,乖乖龍地動(dòng))

    <filter>
    <filter-name>AppAvailabilityFilter</filter-name>
    <filter-class>javawebparts.filter.?AppAvailabilityFilter</filter-class>
    <init-param>
    <param-name>pathSpec</param-name>
    <param-value>include</param-value>
    </init-param>
    <init-param>
    <param-name>pathList</param-name>
    <param-value>*/AAFTestTarget.jsp?</param-value>
    </init-param>
    <init-param>
    <param-name>monday</param-name>
    <param-value>0600-2359</param-value>
    </init-param>
    <init-param>
    <param-name>tuesday</param-name>
    <param-value>0600-2359</param-value>
    </init-param>
    <init-param>
    <param-name>wednesday</param-name>
    <param-value>0600-2359</param-value>
    </init-param>
    <init-param>
    <param-name>thursday</param-name>
    <param-value>0600-2359</param-value>
    </init-param>
    <init-param>
    <param-name>friday</param-name>
    <param-value>0600-2359</param-value>
    </init-param>
    <init-param>
    <param-name>saturday</param-name>
    <param-value>0600-2359</param-value>
    </init-param>
    <init-param>
    <param-name>sunday</param-name>
    <param-value>0600-2359</param-value>
    </init-param>
    <init-param>
    <param-name>redirectTo</param-name>
    <param-value>AAFReject.jsp<?/param-value>
    </init-param>
    <init-param>
    <param-name>bypassCheckClass<?/param-name>
    <param-value>javawebparts.sampleapp.?AAFBypassCheck</param-value>
    </init-param>
    </filter>

    <filter-mapping>
    <filter-name>AppAvailabilityFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    上面的配置很明確了吧,表示在訪問AAFTestTarget.jsp 文件的時(shí)候必須在設(shè)定的時(shí)間內(nèi),其他則無限制,很清楚了哦.

    五。統(tǒng)一重定向

    redirect或者forward大家都再熟悉不過了,不過這個(gè)是基于配置的,不用你寫代碼,比如,你希望在訪問某個(gè)目錄的時(shí)候自動(dòng)重訂向到其他文件,或者直接轉(zhuǎn)到其他網(wǎng)站比如google.com,配置如下:

    <filter>
    <filter-name>URLRedirectFilter</filter-name>
    <filter-class>javawebparts.filter.URLRedirectFilter</?filter-class>
    <init-param>
    <param-name>configFile</param-name>
    <param-value>/WEB-INF/redirect_config.xml?</param-value>
    </filter>

    <filter-mapping>
    <filter-name>URLRedirectFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    其中redirect_config.xml配置如下:

    <config>
    <redirect?from="*/app/redirect_test/*"?to="http://www.google.com"?/>
    <forward?from="*/app/forward/test.htm"?to="/index.jsp"?/>
    </config>

    很直觀吧?凡是訪問/app/redirect_test下的所有應(yīng)用都重訂向到google,太簡(jiǎn)單了,我就不多說了.


    六.估算每個(gè)請(qǐng)求所花費(fèi)的時(shí)間

    這個(gè)對(duì)性能調(diào)整是很有好處的,性能的調(diào)整的前提是你了解你的系統(tǒng)的瓶頸在什么地方,更具體的說是你的應(yīng)用哪些地方花費(fèi)的資源較多,一個(gè)是監(jiān)控sql的執(zhí)行情況,這里推薦jdbmonitor,大家可以去看看,另一種就是本文所說的查看每個(gè)請(qǐng)求的執(zhí)行時(shí)間,他會(huì)告訴你本請(qǐng)求花費(fèi)了多少秒,很直觀了.

    配置如下:

    <filter>
    <filter-name>ElapsedTimeFilter</filter-name>
    <filter-class>javawebparts.filter.ElapsedTimeFilter</?filter-class>
    <init-param>
    <param-name>pathSpec</param-name>
    <param-value>include</param-value>
    </init-param>
    <init-param>
    <param-name>pathList</param-name>
    <param-value>*</param-value>
    </init-param>
    </filter>

    <filter-mapping>
    <filter-name>ElapsedTimeFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    上面的一個(gè)include ,一個(gè)pathList的*就代表了所有的應(yīng)用都過濾,反之,你想暫時(shí)取消這個(gè)功能就直接把include換成exclude就行了

    應(yīng)用在啟動(dòng)后你直接觀察后臺(tái)日志就可以了,就這么就OK了,還要你做什么呢? 沒有.

    七.監(jiān)控session的會(huì)話

    經(jīng)常碰到這樣的一個(gè)情況,用戶在登陸系統(tǒng)一段時(shí)間后session實(shí)效,但是他接著點(diǎn)擊里面的連接,結(jié)果報(bào)異常,因?yàn)閟ession里已經(jīng)取不到數(shù)據(jù)了,常常是空指針錯(cuò)誤,在每一個(gè)頁面里都進(jìn)行這種低級(jí)問題的判斷是很煩人的,現(xiàn)在我們有新的方式可以一次性解決所有的問題,還是一段簡(jiǎn)單的配置:

    <filter>
    <filter-name>SessionInactivityFilter<?/filter-name>
    <filter-class>javawebparts.filter.?SessionInactivityFilter</filter-class>
    <init-param>
    <param-name>forwardTo</param-name>
    <param-value>/login.jsp<?/param-value>
    </init-param>
    </filter>

    <filter-mapping>
    <filter-name>SessionInactivityFilter<?/filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    表示會(huì)話失效后直接重定向到登陸界面,讓用戶重新登陸.

    八.控制訪問應(yīng)用的IP

    出于安全考慮,過濾某些IP能或不能訪問,配置如下:

    <filter>
    <filter-name>IPAccessControlFilter</filter-name>
    <filter-class>javawebparts.filter.?IPAccessControlFilter</filter-class>
    <init-param>
    <param-name>pathSpec</param-name>
    <param-value>include</param-value>
    </init-param>
    <init-param>
    <param-name>pathList</param-name>
    <param-value>*/IACTestTarget.jsp</?param-value>
    </init-param>
    <init-param>
    <param-name>addressSpec</param-name>
    <param-value>include</param-value>
    </init-param>
    <init-param>
    <param-name>addressList</param-name>
    <param-value>localhost</param-value>
    </init-param>
    <init-param>
    <param-name>forwardTo</param-name>
    <param-value>/IACReject.jsp</param-value>?</init-param>
    </filter>

    <filter-mapping>
    <filter-name>IPAccessControlFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    以上的配置效果就是只允許是從服務(wù)器上訪問應(yīng)用的來源(太苛刻了吧? :))

    九.隨機(jī)顯示文字

    比如每日一語,隨機(jī)廣告,很實(shí)用的,配置如下:


    <servlet>
    <servlet-name>TextReturnerServlet</servlet-name>
    <servlet-class>javawebparts.servlet.?TextReturnerServlet</servlet-class>
    <init-param>
    <param-name>order</param-name>
    <param-value>random</param-value>
    </init-param>
    <init-param>
    <param-name>itemsFile</param-name>
    <param-value>/WEB-INF/text_returner_items.xml?</param-value>
    </init-param>
    </servlet>

    <servlet-mapping>
    <servlet-name>TextReturnerServlet</servlet-name>
    <url-pattern>/textReturner</url-pattern>
    </servlet-mapping>

    上面的配置表示隨機(jī)顯示text_returner_items.xml 中的文字,text_returner_items.xml 內(nèi)容如下:

    <TextReturnerServletItems>
    <item>0?-?It's?always?darkest?before?the?dawn</item>
    <item>1?-?A?journey?of?a?thousand?miles?begins?with?a?single?step</item>
    <item>2?-?The?universe?is?like?stupidity:?both?are?infinite?and?actually,?I'm?not?sure?about?the?universe</item>
    <item>3?-?I?believe?there?is?intelligent?life?in?the?universe,?except?for?some?parts?of?New?Jersey</item>
    <item>4?-?If?your?falling?of?a?cliff,?you?might?as?well?try?and?fly</item>
    <item>5?-?The?cost?of?life?is?to?chance?the?consequence</item>
    </TextReturnerServletItems>

    十.隨機(jī)顯示圖片

    和上面有點(diǎn)類似,只是顯示的內(nèi)容可以是圖片

    <servlet>
    <servlet-name>RedirectReturnerServlet</servlet-name>
    <servlet-class>javawebparts.servlet.?RedirectReturnerServlet</servlet-class>
    <init-param>
    <param-name>order</param-name>
    <param-value>random</param-value>
    </init-param>
    <init-param>
    <param-name>itemsFile</param-name>
    <param-value>?/WEB-INF/redirect_returner_items.xml</param-value>
    </init-param>
    </servlet>

    <servlet-mapping>
    <servlet-name>RedirectReturnerServlet</servlet-name>
    <url-pattern>/redirectReturner</url-pattern>
    </servlet-mapping>

    redirect_returner_items.xml的內(nèi)容如下:

    <RedirectReturnerServletItems>
    <item>http://www.google.com/intl/en/images/logo.gif</item>
    <item>/img/header1.gif</item>
    <item>/img/mouse.gif</item>
    <item>http://javawebparts.sourceforge.net/logo.jpg</item>
    </RedirectReturnerServletItems>

    我就不用解釋了吧

    十一.生成文字圖片

    你提供文字,系統(tǒng)幫你生成對(duì)應(yīng)的圖片,是不是很有用? 比如驗(yàn)證碼里經(jīng)常需要用到,生成的效果如下:

    renderFong.png

    配置如下:

    <servlet>
    <servlet-name>TextRendererServlet</servlet-name>
    <servlet-class>javawebparts.servlet.?TextRendererServlet</servlet-class>
    <init-param>
    <param-name>fontName</param-name>
    <param-value>arial</param-value>
    </init-param>
    <init-param>
    <param-name>fontPoint</param-name>
    <param-value>24</param-value>
    </init-param>
    <init-param>
    <param-name>color</param-name>
    <param-value>255,0,0?</param-value>
    </init-param>
    <init-param>
    <param-name>backColor</param-name>
    <param-value>255,255,0?</param-value>
    </init-param>
    <init-param>
    <param-name>stylePlain</param-name>
    <param-value>false</param-value>
    </init-param>
    <init-param>
    <param-name>styleBold</param-name>
    <param-value>true</param-value>
    </init-param>
    <init-param>
    <param-name>styleItalic</param-name>
    <param-value>true</param-value>
    </init-param>
    </servlet>

    <servlet-mapping>
    <servlet-name>TextRendererServlet</servlet-name>
    <url-pattern>/textRenderer</url-pattern>
    </servlet-mapping>

    好了,基本介紹到這里,基本感覺web常碰到的東西都有所涉及,另外還有Ajax的封裝,但我個(gè)人感覺沒什么大用,如果需要可以考慮別的開源產(chǎn)品,比如prototype或者DWR等,感覺更方便.

    好東西不敢獨(dú)享,如果你覺得有點(diǎn)用我就很開心了 :)



    posted on 2006-09-08 21:18 Alex 閱讀(2563) 評(píng)論(7)  編輯  收藏 所屬分類: java 、開源產(chǎn)品

    評(píng)論

    # re: web開發(fā)的瑞士軍刀 javawebparts 2006-09-09 10:11 freetan
    不錯(cuò)  回復(fù)  更多評(píng)論
      

    # re: web開發(fā)的瑞士軍刀 javawebparts 2006-09-09 11:17 Tony
    挺好
      回復(fù)  更多評(píng)論
      

    # re: web開發(fā)的瑞士軍刀 javawebparts 2006-09-09 12:50 Sunky
    好東西!!  回復(fù)  更多評(píng)論
      

    # re: web開發(fā)的瑞士軍刀 javawebparts 2006-09-11 17:30 themax
    有沒有詳細(xì)的例子呢?比如說具體的配置.需要copy那些文件到lib目錄下  回復(fù)  更多評(píng)論
      

    # re: web開發(fā)的瑞士軍刀 javawebparts 2006-09-14 10:20 壞男孩
    好貼就要頂  回復(fù)  更多評(píng)論
      

    # re: web開發(fā)的瑞士軍刀 javawebparts 2007-01-10 11:14 王彥鋒的技術(shù)實(shí)踐
    還真是不錯(cuò),有機(jī)會(huì)實(shí)踐一下。  回復(fù)  更多評(píng)論
      

    # re: web開發(fā)的瑞士軍刀 javawebparts 2009-01-21 01:56 瑞士法郎
    還真是不錯(cuò)  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 国产精品免费看久久久无码| 永久亚洲成a人片777777| 亚洲精品精华液一区二区| 日产国产精品亚洲系列| 中文字幕在线免费视频| 亚洲午夜精品国产电影在线观看| 日韩免费观看的一级毛片| 四虎影视无码永久免费| 亚洲制服丝袜第一页| 国产精品亚洲综合一区| 在线天堂免费观看.WWW| 国产99视频精品免费视频76| 亚洲综合激情六月婷婷在线观看| 四虎国产精品免费久久影院| 外国成人网在线观看免费视频| 亚洲精品国产首次亮相| 亚洲高清在线观看| 国产成人青青热久免费精品| 日本亚洲欧洲免费天堂午夜看片女人员 | 国产日韩AV免费无码一区二区三区| 亚洲天天做日日做天天看 | 亚洲国产日韩女人aaaaaa毛片在线 | 色费女人18女人毛片免费视频| 亚洲国产精品国自产拍电影| 真实乱视频国产免费观看| 久久精品国产免费一区| 日韩国产欧美亚洲v片| 亚洲视频在线视频| 免费大黄网站在线观看| 四虎永久在线观看免费网站网址 | 亚洲精品无码成人片在线观看 | 亚洲av中文无码乱人伦在线r▽ | 两个人看www免费视频| 亚洲国产成人久久精品软件| 亚洲乱色熟女一区二区三区丝袜| 成年人免费网站在线观看| 99久久免费观看| 久久er国产精品免费观看8| 久久亚洲精品11p| 亚洲一卡二卡三卡四卡无卡麻豆 | 老妇激情毛片免费|