每日一得

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評論 :: 0 Trackbacks

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

          javawebparts的口號是:不用重新發明輪子 !

          header1.gif

          對這點我是嚴重支持啊,在我的身邊看到N多所謂的牛人來到項目組作的第一件事就是把以前的項目推倒,重新實現自己的所謂一套先進的東西,靠,你有多先進啊,你的自己"方言"一邊自我欣賞,一邊還讓別人接受,再來一個人又把這個推倒,循環。。。。無語.

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

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

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

          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;
          }
          }
          在應用中你不用去自己解析xml了,javawebparts已經幫你做好了,你只要getFirstName()就可以了,是不是很方便?

          你所要做的工作就是在web.xml中引用一個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>

          這種平板型結構的數據這樣就已經OK了,還有一種是復雜一點的,有層次結構,比如在Bean中可能還有collection,需要自己實現一下,也不復雜直接調用apache的Digester就可以了(實際上在javawebparts到處都有Digester的影子),需要了解的請參看 用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>

          它的后臺實現機制很簡單,內部部分代碼如下:

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

          三。圖片壓縮


          是不是對gzip壓縮很親切? 對的,就是傳說中可以壓縮圖片減少網絡傳輸體積的玩意,現在你只要在web.xml中增加以下內容就可以輕松實現了:

          <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>

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

          四.控制只在設定的時間范圍內訪問應用

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

          <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 文件的時候必須在設定的時間內,其他則無限制,很清楚了哦.

          五。統一重定向

          redirect或者forward大家都再熟悉不過了,不過這個是基于配置的,不用你寫代碼,比如,你希望在訪問某個目錄的時候自動重訂向到其他文件,或者直接轉到其他網站比如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下的所有應用都重訂向到google,太簡單了,我就不多說了.


          六.估算每個請求所花費的時間

          這個對性能調整是很有好處的,性能的調整的前提是你了解你的系統的瓶頸在什么地方,更具體的說是你的應用哪些地方花費的資源較多,一個是監控sql的執行情況,這里推薦jdbmonitor,大家可以去看看,另一種就是本文所說的查看每個請求的執行時間,他會告訴你本請求花費了多少秒,很直觀了.

          配置如下:

          <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>

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

          應用在啟動后你直接觀察后臺日志就可以了,就這么就OK了,還要你做什么呢? 沒有.

          七.監控session的會話

          經常碰到這樣的一個情況,用戶在登陸系統一段時間后session實效,但是他接著點擊里面的連接,結果報異常,因為session里已經取不到數據了,常常是空指針錯誤,在每一個頁面里都進行這種低級問題的判斷是很煩人的,現在我們有新的方式可以一次性解決所有的問題,還是一段簡單的配置:

          <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>

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

          八.控制訪問應用的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>

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

          九.隨機顯示文字

          比如每日一語,隨機廣告,很實用的,配置如下:


          <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>

          上面的配置表示隨機顯示text_returner_items.xml 中的文字,text_returner_items.xml 內容如下:

          <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>

          十.隨機顯示圖片

          和上面有點類似,只是顯示的內容可以是圖片

          <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的內容如下:

          <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>

          我就不用解釋了吧

          十一.生成文字圖片

          你提供文字,系統幫你生成對應的圖片,是不是很有用? 比如驗證碼里經常需要用到,生成的效果如下:

          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的封裝,但我個人感覺沒什么大用,如果需要可以考慮別的開源產品,比如prototype或者DWR等,感覺更方便.

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



          posted on 2006-09-08 21:18 Alex 閱讀(2565) 評論(7)  編輯  收藏 所屬分類: java 、開源產品

          評論

          # re: web開發的瑞士軍刀 javawebparts 2006-09-09 10:11 freetan
          不錯  回復  更多評論
            

          # re: web開發的瑞士軍刀 javawebparts 2006-09-09 11:17 Tony
          挺好
            回復  更多評論
            

          # re: web開發的瑞士軍刀 javawebparts 2006-09-09 12:50 Sunky
          好東西?。?nbsp; 回復  更多評論
            

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

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

          # re: web開發的瑞士軍刀 javawebparts 2007-01-10 11:14 王彥鋒的技術實踐
          還真是不錯,有機會實踐一下。  回復  更多評論
            

          # re: web開發的瑞士軍刀 javawebparts 2009-01-21 01:56 瑞士法郎
          還真是不錯  回復  更多評論
            

          主站蜘蛛池模板: 泽普县| 府谷县| 康保县| 晋城| 铁岭县| 卓尼县| 高碑店市| 城口县| 夏河县| 西乡县| 高邑县| 漳州市| 博白县| 修武县| 穆棱市| 铅山县| 杭锦后旗| 上杭县| 彰化市| 普定县| 桦甸市| 金平| 莆田市| 尉犁县| 同江市| 永城市| 长治市| 五莲县| 晴隆县| 大兴区| 隆德县| 龙江县| 来凤县| 四会市| 南漳县| 蓝山县| 海丰县| 新乡市| 中牟县| 扬州市| 桦南县|