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

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

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

    WebWork 2.2 Filter,Url Rewrite,Servlet規(guī)范

    在WebWork 2.2中,默認(rèn)已經(jīng)使用Filter的方式來進(jìn)行對(duì)action的處理,這樣做固然帶來了很多好處,但是也有很多弊端.

    當(dāng)然,事情總是不斷進(jìn)步的,我們就要揚(yáng)長(zhǎng)避短了.

    使用Filter方式帶來的優(yōu)點(diǎn)有:

    • 可以服務(wù)靜態(tài)內(nèi)容(當(dāng)然后來webwork也提供了方式來避免服務(wù)靜態(tài)內(nèi)容,因?yàn)閷?duì)于普通文件應(yīng)用服務(wù)器一般不比普通web服務(wù)器性能好)
    • 可以處理多種請(qǐng)求,當(dāng)然目前也沒有更多的請(qǐng)求處理

    缺點(diǎn)有:

    • 在Servlet 2.3中,不能使用jsp:include或者ww:include包含action輸出的結(jié)果了(當(dāng)然可以使用ww:action)
    • 一個(gè)請(qǐng)求如果發(fā)生了Forward,一般不會(huì)再經(jīng)過Filter了(include同理,這是前面一條的原因)
    • 由于Servlet和Filter的不同,還會(huì)有很多其他問題--不過目前還沒有注意到

    首先我們來看看如何配置Filter

    ?

    配置WebWork的Filter

    在最簡(jiǎn)單的情況下,webwork 2.2.的web.xml是這樣的:

    ??? <filter>
    ??????? <filter-name>webwork</filter-name>
    ??????? <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
    ??? </filter>

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


    如果使用了SiteMesh,那么是這樣配置的:

    ?<filter>
    ???? <filter-name>webwork-cleanup</filter-name>
    ???? <filter-class>com.opensymphony.webwork.dispatcher.ActionContextCleanUp</filter-class>
    ?</filter>
    ??? <filter>
    ??????? <filter-name>sitemesh</filter-name>
    ??????? <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
    ??? </filter>
    ?<filter>
    ???? <filter-name>webwork</filter-name>
    ???? <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
    ?</filter>

    ?<filter-mapping>
    ???? <filter-name>webwork-cleanup</filter-name>
    ???? <url-pattern>/*</url-pattern>
    ?</filter-mapping>
    ?<filter-mapping>
    ???? <filter-name>sitemesh</filter-name>
    ???? <url-pattern>/*</url-pattern>
    ?</filter-mapping>
    ?<filter-mapping>
    ???? <filter-name>webwork</filter-name>
    ???? <url-pattern>/*</url-pattern>
    ?</filter-mapping>


    注意中間是使用jsp時(shí)的配置,如果使用FreeMarker,要換成對(duì)應(yīng)的PageFilter. (WebWork提供了FreeMarkerPageFilter和VelocityPageFilter)

    ?

    分析Servlet 規(guī)范

    Filter在Servlet 2.3規(guī)范中出現(xiàn),配置方式就和最簡(jiǎn)單的webwork的配置相同,在Servlet 2.4中,對(duì)mapping做了改進(jìn),可以設(shè)置Filter服務(wù)于何種請(qǐng)求.舉例如下:

    ??? <filter-mapping>
    ??????? <filter-name>webwork</filter-name>
    ??????? <url-pattern>/*</url-pattern>
    ??<dispatcher>FORWARD</dispatcher>
    ??<dispatcher>REQUEST</dispatcher>
    ??<dispatcher>INCLUDE</dispatcher>
    ??? </filter-mapping>

    也就是說,Filter通過配置可以服務(wù)FORWARD和INCLUDE(以及ERROR)方式的請(qǐng)求了,而在Servlet 2.3中,是沒有規(guī)定的.而在Servlet 2.4中,如果沒有設(shè)置dispatcher,默認(rèn)情況下是僅服務(wù)REQUEST類型的請(qǐng)求. 我覺得在Servlet 2.3的情況下,Filter也應(yīng)該僅服務(wù)于REQUEST請(qǐng)求.(在Tomcat 下,本人測(cè)試確實(shí)如此,其他環(huán)境沒有測(cè)試)

    通過上述分析,我們可以看到,如果應(yīng)用服務(wù)器支持Servlet 2.4,通過設(shè)置我們的web.xml為2.4的格式,然后設(shè)置Filter的服務(wù)類型,則可以對(duì)FORWARD,INCLUDE,ERROR類型的請(qǐng)求進(jìn)行服務(wù).

    通過Servlet 2.4規(guī)范我們可以避免一些使用Filter的缺點(diǎn),當(dāng)然如果設(shè)置不當(dāng),可能也會(huì)帶來一些毛病:

    • 如果sitemesh映射處理不好,可能一個(gè)頁面被多次裝飾,所以要注意裝飾設(shè)置和Filter設(shè)置的合理搭配
    • 多次經(jīng)過Filter,可能會(huì)造成混亂,以及性能問題

    Include 一個(gè)Action

    前面我們說過,升級(jí)到webwork 2.2后,文檔上已經(jīng)說使用ww:action的調(diào)用來替換ww:include和jsp:include對(duì)一個(gè)action的包含,當(dāng)然我也是推薦ww:action來替換老的方式的. 但是這不等于說ww:include,jsp:include不能包含一個(gè)action了.

    通過對(duì)filter-mapping的dispatcher的設(shè)置,可以完全使用包含action.

    ?<filter-mapping>
    ???? <filter-name>webwork</filter-name>
    ???? <url-pattern>/*</url-pattern>
    ??????? <dispatcher>REQUEST</dispatcher>
    ??????? <dispatcher>FORWARD</dispatcher>
    ??????? <dispatcher>INCLUDE</dispatcher>
    ?</filter-mapping>

    注意如果有其他相關(guān)的Filter,也要進(jìn)行類似配置,例如webwork-cleanup.

    警告:我們不推薦使用這種方式!

    URL Rewrite Filter的使用

    url rewrite filter是一個(gè)java編寫的優(yōu)秀的重寫url引擎.用于在java應(yīng)用中重寫URL. 當(dāng)然如果你有web服務(wù)器的重寫權(quán)限(例如apache),最好使用web服務(wù)器的ReWrite引擎,它們的效率會(huì)高于Url Rewrite Filter.

    在WebWork 2.1.7的時(shí)候,因?yàn)閃ebWork使用Servlet處理請(qǐng)求,所以不對(duì)Filter造成不良影響,在WebWork 2.1.7中使用的配置如下:

    ??? <filter>
    ??????? <filter-name>UrlRewriteFilter</filter-name>
    ??????? <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    ??????? <init-param>
    ??????????? <param-name>logLevel</param-name>
    ??????????? <param-value>WARN</param-value>
    ??????? </init-param>
    ??? </filter>

    ??? <filter>
    ??????? <filter-name>sitemesh</filter-name>
    ??????? <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
    ??? </filter>


    ??? <filter-mapping>
    ??????? <filter-name>UrlRewriteFilter</filter-name>
    ??????? <url-pattern>/someurl/*</url-pattern>
    ??? </filter-mapping>

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


    ?<servlet>
    ??<servlet-name>webwork</servlet-name>
    ??<servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
    ?</servlet>
    ?
    ?<servlet-mapping>
    ??<servlet-name>webwork</servlet-name>
    ??<url-pattern>*.action</url-pattern>
    ?</servlet-mapping>


    而升級(jí)到webwork 2.2.2中時(shí),由于webwork的配置改變了,對(duì)webwork的action的forward方式的重寫就會(huì)無法生效了.? ---如果你的rewrite全部都是redirect,則無須修改

    (如果使用了forward重寫方式,會(huì)發(fā)生404錯(cuò)誤)

    在Servlet 2.3規(guī)范的應(yīng)用服務(wù)器中,這可能是個(gè)無法解決的問題!(也許能通過修改某些程序的代碼可以做到)

    如果你的應(yīng)用服務(wù)器支持Servlet 2.4,則可以按照上面的說明修改web.xml,就可以繼續(xù)使用了. (但是要避免前面說的多次filter的問題)

    配置示例如下:

    <web-app version="2.4"
    ?xmlns="http://java.sun.com/xml/ns/j2ee"
    ?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    ?xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    ?http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    ??? <filter>
    ??????? <filter-name>UrlRewriteFilter</filter-name>
    ??????? <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    ??????? <init-param>
    ??????????? <param-name>logLevel</param-name>
    ??????????? <param-value>WARN</param-value>
    ??????? </init-param>
    ??? </filter>

    ?<filter>
    ???? <filter-name>webwork-cleanup</filter-name>
    ???? <filter-class>com.opensymphony.webwork.dispatcher.ActionContextCleanUp</filter-class>
    ?</filter>
    ??? <filter>
    ??????? <filter-name>sitemesh</filter-name>
    ??????? <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
    ??? </filter>
    ?<filter>
    ???? <filter-name>webwork</filter-name>
    ???? <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
    ?</filter>

    ??? <filter-mapping>
    ??????? <filter-name>UrlRewriteFilter</filter-name>
    ??????? <url-pattern>/srun/*</url-pattern>
    ??????? <dispatcher>REQUEST</dispatcher>
    ??????? <dispatcher>FORWARD</dispatcher>
    ??? </filter-mapping>

    ?<filter-mapping>
    ???? <filter-name>webwork-cleanup</filter-name>
    ???? <url-pattern>/*</url-pattern>
    ??????? <dispatcher>REQUEST</dispatcher>
    ??????? <dispatcher>FORWARD</dispatcher>
    ?</filter-mapping>
    ?<filter-mapping>
    ???? <filter-name>sitemesh</filter-name>
    ???? <url-pattern>/*</url-pattern>
    ?</filter-mapping>
    ?<filter-mapping>
    ???? <filter-name>webwork</filter-name>
    ???? <url-pattern>/*</url-pattern>
    ??????? <dispatcher>REQUEST</dispatcher>
    ??????? <dispatcher>FORWARD</dispatcher>
    ?</filter-mapping>


    注意sitemesh的filter的配置,你的可能和此處不同,因?yàn)槲乙苊忭撁娑啻伪谎b飾.當(dāng)然可以通過sitemesh的配置文件,設(shè)置只裝飾某個(gè)處理中的url即可. 也就是說,某種情況下,有可能你的sitemesh的filter-mapping中也要包括dispatcher的配置.

    總之,要根據(jù)實(shí)際情況編寫自己的web.xml.

    ?

    沒有好好組織,說的比較亂,請(qǐng)多見諒.

    _____________________________________________
    JavaScud 免費(fèi)開源平臺(tái) http://www.javascud.org

    posted on 2006-04-11 10:26 Scud(飛云小俠) 閱讀(2902) 評(píng)論(1)  編輯  收藏 所屬分類: WEB

    評(píng)論

    # re: WebWork 2.2 Filter,Url Rewrite,Servlet規(guī)范 2006-05-11 09:44 wsk

    不錯(cuò),感謝  回復(fù)  更多評(píng)論   

    <2006年4月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    文章發(fā)布許可
    創(chuàng)造共用協(xié)議:署名,非商業(yè),保持一致

    我的郵件
    cnscud # gmail


    常用鏈接

    留言簿(15)

    隨筆分類(113)

    隨筆檔案(103)

    相冊(cè)

    友情鏈接

    技術(shù)網(wǎng)站

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲国产欧美一区二区三区| 亚洲精品无码午夜福利中文字幕| 国产成人免费网站| 国产91免费视频| 亚洲大片免费观看| 久久免费看黄a级毛片| 91大神在线免费观看| 99ee6热久久免费精品6| 最近中文字幕大全免费视频| 亚洲国产精品免费在线观看| AV无码免费永久在线观看| 2021免费日韩视频网| 大香人蕉免费视频75| 77777午夜亚洲| 色偷偷女男人的天堂亚洲网| 亚洲人成网站免费播放| 精品国产亚洲AV麻豆| 青青草国产免费国产是公开| XXX2高清在线观看免费视频| 污污网站免费观看| 我们的2018在线观看免费高清| 成年女人毛片免费播放人| 免费精品国产自产拍观看| 国产精品亚洲综合一区| 亚洲今日精彩视频| 亚洲av片不卡无码久久| 老牛精品亚洲成av人片| 久久免费国产精品| 最近中文字幕完整免费视频ww| 亚洲欧洲免费无码| avtt亚洲天堂| 亚洲av日韩av激情亚洲| 亚洲国产熟亚洲女视频| 免费播放国产性色生活片| 免费日本一区二区| 久久久久久国产精品免费免费| 亚洲精品国产精品乱码在线观看| 亚洲av网址在线观看| 亚洲中文字幕久久无码| 丰满妇女做a级毛片免费观看| 日本免费中文字幕|