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

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

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

    Java, Only Java!

    統(tǒng)計(jì)

    留言簿(20)

    積分與排名

    好友空間

    文檔技巧

    閱讀排行榜

    評(píng)論排行榜

    在Tomcat上開發(fā)Web應(yīng)用如何保證兼容性

    最近,協(xié)助伙伴將Tomcat上開發(fā)的應(yīng)用向Apusic移植時(shí)發(fā)現(xiàn)了一個(gè)兼容性問題。
    應(yīng)用中代碼為:HashMap params = (HashMap) request.getParameterMap();

    而getParameterMap()在JCP規(guī)范中的定義為:
    public java.util.Map getParameterMap()
    Returns a java.util.Map of the parameters of this request. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.
    請(qǐng)求的參數(shù)將返回一個(gè)java.util.Map。請(qǐng)求參數(shù)是請(qǐng)求發(fā)送的特別信息。對(duì)于HTTP servlets來說,參數(shù)包含在查詢字符串或者發(fā)出的表單數(shù)據(jù)中。

    Returns: an immutable java.util.Map containing parameter names as keys and parameter values as map values. The keys in the parameter map are of type String. The values in the parameter map are of type String array.
    一個(gè)不可更改的java.util.Map包含參數(shù)名稱(關(guān)鍵字)和參數(shù)值(映射值)。參數(shù)映射中的關(guān)鍵字是String類型。參數(shù)映射中的值是String數(shù)組類型。

    可見規(guī)范中定義的返回值只是Map類型,而沒有強(qiáng)制為HashMap。
    Apusic在實(shí)現(xiàn)的時(shí)候也是Map作為返回值,而Tomcat返回時(shí)(參考o(jì)rg.apache.catalina.connector.Request.java)就是一個(gè)擴(kuò)展自HashMap的ParameterMap類,因此開發(fā)時(shí)如何作為Map來用也不會(huì)出現(xiàn)問題,但是如果強(qiáng)制轉(zhuǎn)換成HashMap就可能會(huì)與其他應(yīng)用服務(wù)器產(chǎn)品無法正確兼容。

    Tomcat是一款非常不錯(cuò)的開源Web服務(wù)器,許多公司在軟件開發(fā)時(shí)都使用Tomcat作為Web容器,并且Tomcat也較好的對(duì)Servlet和JSP規(guī)范進(jìn)行了支持,因此許多在Tomcat上開發(fā)的應(yīng)用都可以向其他商業(yè)應(yīng)用服務(wù)器上進(jìn)行移植。

    但是,Tomcat因?yàn)槲慈ネㄟ^規(guī)范測(cè)試,因此可能會(huì)存在沒有完全參考規(guī)范實(shí)現(xiàn)的部分,因此在開發(fā)中建議開發(fā)人員去www.jcp.org上去下載一個(gè)規(guī)范來進(jìn)行參考,開發(fā)過程中盡可能按照規(guī)范給定的參數(shù)和返回值來使用系統(tǒng)的核心功能,從而避免在移植中出現(xiàn)不必要的問題。

    附注:出現(xiàn)問題也不可怕,總有許多方式可以解決,就如上文出現(xiàn)的Map與HashMap的問題。其實(shí)網(wǎng)上有許多Map向HashMap轉(zhuǎn)換的代碼,可以增加個(gè)過渡參數(shù)將得到的Map進(jìn)行一次轉(zhuǎn)換就可以不修改其他業(yè)務(wù)代碼了。

    posted on 2008-08-14 07:42 zYx.Tom 閱讀(1902) 評(píng)論(7)  編輯  收藏 所屬分類: 1.Java世界

    評(píng)論

    # re: 在Tomcat上開發(fā)Web應(yīng)用如何保證兼容性 2008-08-14 08:38 Hatter Jiang

    暈,就是應(yīng)該使用Map的,為什么要強(qiáng)制類型轉(zhuǎn)換為HashMap呢,要記錄依賴上層,而不能依賴下層  回復(fù)  更多評(píng)論   

    # re: 在Tomcat上開發(fā)Web應(yīng)用如何保證兼容性 2008-08-14 08:43 wxm

    這是開發(fā)者的問題,不能說是Tomcat未通過規(guī)范測(cè)試,jee上說返回的是Map,開發(fā)者強(qiáng)轉(zhuǎn)為HashMap是不對(duì)的了  回復(fù)  更多評(píng)論   

    # re: 在Tomcat上開發(fā)Web應(yīng)用如何保證兼容性 2008-08-14 09:05 朱遠(yuǎn)翔-Apusic技術(shù)顧問

    呵呵,都認(rèn)為是開發(fā)者的問題。

    其實(shí),這篇文章也是想提醒程序員們注意規(guī)劃,而不僅僅是Map與HashMap

    因?yàn)檫€有許多朋友做J2EE開發(fā)確從沒有了解過規(guī)范,希望這篇文章能夠幫助他們?cè)陂_發(fā)期就能避免這樣的失誤,以免后期上線時(shí)再來修改代碼從而增加項(xiàng)目的成本與風(fēng)險(xiǎn)。  回復(fù)  更多評(píng)論   

    # re: 在Tomcat上開發(fā)Web應(yīng)用如何保證兼容性 2008-08-14 14:32 小高

    以用前面 那個(gè)兄弟的話 :"希望這篇文章能夠幫助他們?cè)陂_發(fā)期就能避免這樣的失誤,以免后期上線時(shí)再來修改代碼從而增加項(xiàng)目的成本與風(fēng)險(xiǎn)。"

    說的很好.  回復(fù)  更多評(píng)論   

    # re: 在Tomcat上開發(fā)Web應(yīng)用如何保證兼容性 2008-08-14 21:04 Apusic門外漢

    在Apusic上開發(fā)Web應(yīng)用如何保證兼容性

    最近,協(xié)助伙伴將Apusic上開發(fā)的應(yīng)用向Tomcat移植時(shí)發(fā)現(xiàn)了一個(gè)兼容性問題。
    應(yīng)用中代碼為:HashMap params = (HashMap) request.getParameterMap();

    而getParameterMap()在JCP規(guī)范中的定義為:
    public java.util.Map getParameterMap()
    Returns a java.util.Map of the parameters of this request. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.
    請(qǐng)求的參數(shù)將返回一個(gè)java.util.Map。請(qǐng)求參數(shù)是請(qǐng)求發(fā)送的特別信息。對(duì)于HTTP servlets來說,參數(shù)包含在查詢字符串或者發(fā)出的表單數(shù)據(jù)中。

    Returns: an immutable java.util.Map containing parameter names as keys and parameter values as map values. The keys in the parameter map are of type String. The values in the parameter map are of type String array.
    一個(gè)不可更改的java.util.Map包含參數(shù)名稱(關(guān)鍵字)和參數(shù)值(映射值)。參數(shù)映射中的關(guān)鍵字是String類型。參數(shù)映射中的值是String數(shù)組類型。

    可見規(guī)范中定義的返回值只是Map類型,而沒有強(qiáng)制為HashMap。
    Tomcat 在實(shí)現(xiàn)的時(shí)候也是Map作為返回值,而Apusic返回時(shí)(參考 org.apache.catalina.connector.Request.java)就是一個(gè)擴(kuò)展自HashMap的ParameterMap類,因此開發(fā)時(shí)如何作為Map來用也不會(huì)出現(xiàn)問題,但是如果強(qiáng)制轉(zhuǎn)換成HashMap就可能會(huì)與其他應(yīng)用服務(wù)器產(chǎn)品無法正確兼容。

    Apusic是一款非常不錯(cuò)的開源Web服務(wù)器,許多公司在軟件開發(fā)時(shí)都使用Apusic作為Web容器,并且Apusic也較好的對(duì)Servlet和JSP規(guī)范進(jìn)行了支持,因此許多在Apusic上開發(fā)的應(yīng)用都可以向其他商業(yè)應(yīng)用服務(wù)器上進(jìn)行移植。

    但是,Apusic因?yàn)槲慈ネㄟ^規(guī)范測(cè)試,因此可能會(huì)存在沒有完全參考規(guī)范實(shí)現(xiàn)的部分,因此在開發(fā)中建議開發(fā)人員去www.jcp.org上去下載一個(gè)規(guī)范來進(jìn)行參考,開發(fā)過程中盡可能按照規(guī)范給定的參數(shù)和返回值來使用系統(tǒng)的核心功能,從而避免在移植中出現(xiàn)不必要的問題。

    附注:出現(xiàn)問題也不可怕,總有許多方式可以解決,就如上文出現(xiàn)的Map與HashMap的問題。其實(shí)網(wǎng)上有許多Map向HashMap轉(zhuǎn)換的代碼,可以增加個(gè)過渡參數(shù)將得到的Map進(jìn)行一次轉(zhuǎn)換就可以不修改其他業(yè)務(wù)代碼了。   回復(fù)  更多評(píng)論   

    # re: 在Tomcat上開發(fā)Web應(yīng)用如何保證兼容性 2008-08-15 00:38 隔葉黃鶯

    Tomcat 不應(yīng)該受此罪責(zé),它完全沒有問題啊

    規(guī)范是返回 Map,Tomcat 怎么實(shí)現(xiàn) Map 全是它自己的事。

    要說規(guī)范,那么我在 WAS5.1下的 request 好像還沒有 getParameterMap() 這個(gè)方法呢?  回復(fù)  更多評(píng)論   

    # re: 在Tomcat上開發(fā)Web應(yīng)用如何保證兼容性 2008-08-15 16:27 朱遠(yuǎn)翔-Apusic技術(shù)顧問

    @隔葉黃鶯
    本文沒有指責(zé)Tomcat有問題,但是Tomcat在實(shí)現(xiàn)的時(shí)候確實(shí)留下了誤用的通道。
    就如C/C++用不好會(huì)有內(nèi)存泄漏,當(dāng)然這個(gè)不是語言的問題,而是程序員的問題,而本文也是希望程序員在用Tomcat的時(shí)候注意不要因?yàn)檎`用而給未來的移植帶來困難。

    WAS V5.1不支持getParameterMap()這個(gè)方法是因?yàn)閃AS V5.1只通過了J2EE 1.3的規(guī)范,他的WEB容器只需要實(shí)現(xiàn)Servlet 2.3規(guī)范,這個(gè)方法是在J2EE 1.4(Servlet 2.4)中才加入的。
    規(guī)范認(rèn)證請(qǐng)參考下面的鏈接:
    http://java.sun.com/j2ee/compatibility_1.3.html

    Servlet 2.4認(rèn)證可以到www.jcp.org上下載servlet-2_4-fr-spec.pdf,在PDF文件的P284有說明增加了這個(gè)方法:
    Add missing getParameterMap() in the enumerated list (4.1)  回復(fù)  更多評(píng)論   

    主站蜘蛛池模板: 无码国产精品一区二区免费| 亚洲国产美女精品久久久| 国产三级免费电影| 免费在线视频一区| 久久亚洲国产午夜精品理论片| 国产亚洲精品精华液| 亚洲国产夜色在线观看| 亚洲午夜无码毛片av久久京东热| 美女扒开屁股让男人桶爽免费| 中文字幕手机在线免费看电影| 亚洲精品免费视频| 日韩一级免费视频| 国产亚洲精AA在线观看SEE| 久久99精品免费一区二区| 男男AV纯肉无码免费播放无码| 免费看国产一级片| 狠狠综合亚洲综合亚洲色| 99久在线国内在线播放免费观看 | 99久久免费国产特黄| 国产精品69白浆在线观看免费| 亚洲香蕉网久久综合影视| 亚洲粉嫩美白在线| 花蝴蝶免费视频在线观看高清版| 日本一道高清不卡免费| 美女的胸又黄又www网站免费| 亚洲综合无码AV一区二区| 亚洲综合激情五月丁香六月| 日韩毛片无码永久免费看| 无码精品人妻一区二区三区免费| 69天堂人成无码麻豆免费视频| 永久亚洲成a人片777777| 久久久高清日本道免费观看| 大胆亚洲人体视频| 精品亚洲成A人无码成A在线观看| 中文字幕无码免费久久| 亚洲黄色片免费看| 国产成人精品一区二区三区免费| 亚洲国产精品一区二区久| 又爽又高潮的BB视频免费看 | 亚洲人成www在线播放| 亚洲精品A在线观看|