WAS 開發需要注意的一些細節

CloudSpace發表於2010-01-20

    【IT168 技術文章】

    由於很多人都是在tomcat 下面開發的系統,然後才遷移到WAS上面去,所以就會出現這樣那樣的問題,導致很多程式碼因為不相容又得做大量的修改。

    根據我在工作的過程中總結了一些開發和部署的過程中碰見的一些WAS的問題。這些問題主要是解決WAS不相容上面的一些經驗,另外還有一些常見的開發部署中碰到的一些問題的解決方法,總結了一下,希望對各位開發同仁有用。

    1、在was中基礎資料型別和他的物件之間不能被隱式轉換。如: 一個int型別的變數被賦值成一個Integer物件或者一個一個Integer直接物件和一個int型別的變數或常量進行比較等。

    解決方法:在物件的後面顯示的呼叫相應的轉換方法。如Integer物件intValue()方法。

    2、was中對三目運算子號?:的應用也不能被隱式轉換,必須保證在:的兩邊的資料型別一致。如:true?"":Long 這種寫法was不會給Long型別的物件自動加上toString()方法進行隱式轉換。

    解決方法:在物件Long的後面加上toString()方法。

    3、was自帶的1.5的jdk不能解析範型,jsp頁面不能用任何範型。但是在java類中用範型然後用sun的1.5以上的jdk編譯以後was是可以執行的。

    4、was中對jsp標籤的屬性用常量賦值時不能用的方式而應該去掉。如:

   

    index="center"

    maxPageItems=""

    maxIndexPages="10"

    isOffset=""

    url=""

    export="offset,currentPageNumber=pageNumber"

    scope="request">

   

   

    上面這段程式碼中url="" 這行的程式碼會出錯;頁面異常:找不到標記屬性 ×× 的標記屬性資訊。

    解決辦法:

    應該寫成url="/approve/print!list.action" 。

    5、was中對jsp標籤的屬性用變數賦值時不能用的方式而應該定義新的變數來賦值。

    頁面異常:找不到標記屬性 ×× 的標記屬性資訊。

    解決辦法: 將需要運算的變數採用一個臨時變數運算完賦值之後,再進行輸出。例如

    6、was字符集的設定

    進入控制檯的:伺服器-》應用程式伺服器-》執行的應用如:server1 -》Java 和程式管理 -》程式定義-》Java 虛擬機器頁面中的“通用jvm引數”的值設成“-Dfile.encoding=GBK -Ddefault.client.encoding=GBK”。

    7.WebSphere升級到6.1.0.17所有struts2的程式都會發生Action找不到的情況。

    解決方法如下,伺服器>應用程式伺服器>[選擇所使用的伺服器]>Web 容器設定>Web 容器>定製屬性,增加名稱為“com.ibm.ws.webcontainer.invokefilterscompatibility”的定製屬性,值為true。

    8、WAS 出現如下異常:

    WARNING: Cannot set status. Response already committed.

    WARNING: Cannot set header. Response already committed.

    解決辦法:was升級到6.1.0.17版本可以解決。

    9、修改was的jsp編譯jdk版本可以解決1、2、3類似的問題。

    修改方法,找到釋出之後的應用目錄,修改對應的配置檔案:

    \IBM\WebSphere\AppServer\profiles\AppSrv01\config\cells\zd-44bca248e33bNode01Cell\applications\web_war.ear\deployments\web_war\web.war\WEB-INF\ibm-web-ext.xmi檔案中

    加上

    10、myeclipse 配置websphere 除錯環境

    ·       a.  下載下websphere6.1安裝,在安裝的過程中要記住自己設定的node name和cell name.

    ·       b.   啟動eclipse,在window->preperences->myeclipse->application servers->websphere6.1

    點Browse...選擇你eclipse的安裝目錄.

    我是安裝在D:\webshpere6.1 ,之後myeclipse會自動的將Profile Root Directory,Node name,cell name設定好。你需要確認一下Profile Root Directory就是你的安裝目錄下Profiles目錄下的一個資料夾。

    我的是D:\webshpere6.0\profiles\AppSrv01 。

    而node name和cell name它會設成以你的機器名命名的名字,應該將cell name改為Profiles RootDirectory下的installedApps目錄(D:\webshpere6.0\profiles\AppSrv01\installedApps)下的資料夾的名字我的是就是localhostNode01Cell,將node name改為cell name去掉後面的cell的名字。選中enable項。點Apply儲存。

    ·       c  展開websphere6.1,選JDK,將JDK設定為webshpere6.1安裝目錄下的JDK(D:\webshpere6.0\java)。一定要設定成IBM的JDK要不websphere是不能執行的。

    ·       d  啟動websphere(不是用eclipse,而是用websphere的啟動伺服器),選管理控制檯,點伺服器->應用伺服器,選一個服務,一般為server1。在故障診斷中選記錄和跟蹤->JVM 日誌,修改兩個檔名為console。儲存,登出,停止服務。

    ·       e   在eclipse中新建自己的企業工程(一定要是企業工程)如果之前有web工程可以將該企業工程的web modle設定為該web project如沒有就自己新建一個。

    ·       f  釋出企業工程(不是web project)在第一次釋出時要選Packaged Archive

    ·       g   用eclipse或websphere工具啟動websphere,進入控制檯,應用程式->安裝新的應用程式,點瀏覽在

    \webshpere6.0\profiles\AppServ01\installableApps

    下選自己釋出的工程名的ear檔案(你可能不是AppServ01)

    然後next下去就可以了,唯一要注意的就是要設定web模組上下文根和要選上class 類檔案和jsp的修改自動裝載。

    ·       h  退到控制檯首頁,應用程式->企業應用程式,選擇自己釋出的工程,點啟動。登出,停止websphere。

    ·       I   在eclipse中再點發布,刪除剛釋出的工程,再點add。。。選擇企業工程,Exploded Archive。選Delete Remote。。。項。然後釋出。以後就可以實時除錯了。

    注:要在websphere中除錯一定要建企業工程,一般的web工程是不能的

    我們在J2EE的開發過程中還會遇到很多問題,尤其是我們開發的產品需要考慮在不同的平臺和中介軟體上執行的時候,所需要注意的東西就更多。WAS相對於其他中介軟體來說,針對配置檔案和程式碼的寫法要更嚴格的檢查,如果寫法不符合規範,就會出現錯誤。本文中提到的一些問題的解決辦法以及一些開發方法,是我在開發應用的時候碰到過的一些問題,經過一段時間的沉澱也積累了一些經驗,希望對各位同仁在處理類似問題的時候能有所幫助。在下只是拋磚引玉、班門弄斧,希望大家踴躍發言,批評指正。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-625551/,如需轉載,請註明出處,否則將追究法律責任。

相關文章