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

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

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

    Java, Only Java!

    統計

    留言簿(20)

    積分與排名

    好友空間

    文檔技巧

    閱讀排行榜

    評論排行榜

    在Tomcat上開發Web應用如何保證兼容性

    最近,協助伙伴將Tomcat上開發的應用向Apusic移植時發現了一個兼容性問題。
    應用中代碼為:HashMap params = (HashMap) request.getParameterMap();

    而getParameterMap()在JCP規范中的定義為:
    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.
    請求的參數將返回一個java.util.Map。請求參數是請求發送的特別信息。對于HTTP servlets來說,參數包含在查詢字符串或者發出的表單數據中。

    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.
    一個不可更改的java.util.Map包含參數名稱(關鍵字)和參數值(映射值)。參數映射中的關鍵字是String類型。參數映射中的值是String數組類型。

    可見規范中定義的返回值只是Map類型,而沒有強制為HashMap。
    Apusic在實現的時候也是Map作為返回值,而Tomcat返回時(參考org.apache.catalina.connector.Request.java)就是一個擴展自HashMap的ParameterMap類,因此開發時如何作為Map來用也不會出現問題,但是如果強制轉換成HashMap就可能會與其他應用服務器產品無法正確兼容。

    Tomcat是一款非常不錯的開源Web服務器,許多公司在軟件開發時都使用Tomcat作為Web容器,并且Tomcat也較好的對Servlet和JSP規范進行了支持,因此許多在Tomcat上開發的應用都可以向其他商業應用服務器上進行移植。

    但是,Tomcat因為未去通過規范測試,因此可能會存在沒有完全參考規范實現的部分,因此在開發中建議開發人員去www.jcp.org上去下載一個規范來進行參考,開發過程中盡可能按照規范給定的參數和返回值來使用系統的核心功能,從而避免在移植中出現不必要的問題。

    附注:出現問題也不可怕,總有許多方式可以解決,就如上文出現的Map與HashMap的問題。其實網上有許多Map向HashMap轉換的代碼,可以增加個過渡參數將得到的Map進行一次轉換就可以不修改其他業務代碼了。

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

    評論

    # re: 在Tomcat上開發Web應用如何保證兼容性 2008-08-14 08:38 Hatter Jiang

    暈,就是應該使用Map的,為什么要強制類型轉換為HashMap呢,要記錄依賴上層,而不能依賴下層  回復  更多評論   

    # re: 在Tomcat上開發Web應用如何保證兼容性 2008-08-14 08:43 wxm

    這是開發者的問題,不能說是Tomcat未通過規范測試,jee上說返回的是Map,開發者強轉為HashMap是不對的了  回復  更多評論   

    # re: 在Tomcat上開發Web應用如何保證兼容性 2008-08-14 09:05 朱遠翔-Apusic技術顧問

    呵呵,都認為是開發者的問題。

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

    因為還有許多朋友做J2EE開發確從沒有了解過規范,希望這篇文章能夠幫助他們在開發期就能避免這樣的失誤,以免后期上線時再來修改代碼從而增加項目的成本與風險。  回復  更多評論   

    # re: 在Tomcat上開發Web應用如何保證兼容性 2008-08-14 14:32 小高

    以用前面 那個兄弟的話 :"希望這篇文章能夠幫助他們在開發期就能避免這樣的失誤,以免后期上線時再來修改代碼從而增加項目的成本與風險。"

    說的很好.  回復  更多評論   

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

    在Apusic上開發Web應用如何保證兼容性

    最近,協助伙伴將Apusic上開發的應用向Tomcat移植時發現了一個兼容性問題。
    應用中代碼為:HashMap params = (HashMap) request.getParameterMap();

    而getParameterMap()在JCP規范中的定義為:
    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.
    請求的參數將返回一個java.util.Map。請求參數是請求發送的特別信息。對于HTTP servlets來說,參數包含在查詢字符串或者發出的表單數據中。

    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.
    一個不可更改的java.util.Map包含參數名稱(關鍵字)和參數值(映射值)。參數映射中的關鍵字是String類型。參數映射中的值是String數組類型。

    可見規范中定義的返回值只是Map類型,而沒有強制為HashMap。
    Tomcat 在實現的時候也是Map作為返回值,而Apusic返回時(參考 org.apache.catalina.connector.Request.java)就是一個擴展自HashMap的ParameterMap類,因此開發時如何作為Map來用也不會出現問題,但是如果強制轉換成HashMap就可能會與其他應用服務器產品無法正確兼容。

    Apusic是一款非常不錯的開源Web服務器,許多公司在軟件開發時都使用Apusic作為Web容器,并且Apusic也較好的對Servlet和JSP規范進行了支持,因此許多在Apusic上開發的應用都可以向其他商業應用服務器上進行移植。

    但是,Apusic因為未去通過規范測試,因此可能會存在沒有完全參考規范實現的部分,因此在開發中建議開發人員去www.jcp.org上去下載一個規范來進行參考,開發過程中盡可能按照規范給定的參數和返回值來使用系統的核心功能,從而避免在移植中出現不必要的問題。

    附注:出現問題也不可怕,總有許多方式可以解決,就如上文出現的Map與HashMap的問題。其實網上有許多Map向HashMap轉換的代碼,可以增加個過渡參數將得到的Map進行一次轉換就可以不修改其他業務代碼了。   回復  更多評論   

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

    Tomcat 不應該受此罪責,它完全沒有問題啊

    規范是返回 Map,Tomcat 怎么實現 Map 全是它自己的事。

    要說規范,那么我在 WAS5.1下的 request 好像還沒有 getParameterMap() 這個方法呢?  回復  更多評論   

    # re: 在Tomcat上開發Web應用如何保證兼容性 2008-08-15 16:27 朱遠翔-Apusic技術顧問

    @隔葉黃鶯
    本文沒有指責Tomcat有問題,但是Tomcat在實現的時候確實留下了誤用的通道。
    就如C/C++用不好會有內存泄漏,當然這個不是語言的問題,而是程序員的問題,而本文也是希望程序員在用Tomcat的時候注意不要因為誤用而給未來的移植帶來困難。

    WAS V5.1不支持getParameterMap()這個方法是因為WAS V5.1只通過了J2EE 1.3的規范,他的WEB容器只需要實現Servlet 2.3規范,這個方法是在J2EE 1.4(Servlet 2.4)中才加入的。
    規范認證請參考下面的鏈接:
    http://java.sun.com/j2ee/compatibility_1.3.html

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

    主站蜘蛛池模板: 亚洲免费在线观看视频| 一区二区三区无码视频免费福利| 亚洲s色大片在线观看| 亚洲伊人久久大香线蕉AV| 国产卡二卡三卡四卡免费网址| 免费被黄网站在观看| 亚洲日韩精品无码专区加勒比 | 一个人看的www免费在线视频| 大地资源网高清在线观看免费| 国产精品成人观看视频免费| 中文字幕亚洲精品| 亚洲大片免费观看| 亚洲制服丝袜在线播放| 午夜时刻免费入口| 曰批免费视频播放在线看片二| 久久午夜夜伦鲁鲁片免费无码影视| 国产高清在线免费| 免费国产va视频永久在线观看| 在线看无码的免费网站| jlzzjlzz亚洲jzjzjz| 暖暖在线日本免费中文| 人体大胆做受免费视频| 久久久久无码精品亚洲日韩| 久久久久久精品免费免费自慰| 久久久无码精品亚洲日韩软件 | 免费国产人做人视频在线观看| 久久久久亚洲av无码专区蜜芽| 亚洲乱码中文字幕在线| 亚洲精品高清一二区久久| a级毛片免费播放| 亚洲日本人成中文字幕| 国产美女被遭强高潮免费网站| 亚洲免费中文字幕| 亚洲国产成人久久综合区| 久久国产免费一区二区三区| 中文字幕无码亚洲欧洲日韩| 国产三级免费电影| 最近免费mv在线电影| 杨幂最新免费特级毛片| 337p日本欧洲亚洲大胆艺术| 成年女人永久免费观看片|