天天看點

web 開發環境不同造成的錯誤

[size=medium] 今天上午郁悶死啦,因為部署項目的時候遇到了兩個大問題。這兩個問題産生的原因是本地開發環境和運作環境同生産機上的不同,下面我細細道來。

我本地使用的tomcat6.0、MyEclipse9、jdk1.6,生産機上的是tomcat5.5、jdk1.5

第一個問題:将程式部署到linux環境下之後,開始釋出的過程中,一直報找不到檔案路徑的錯誤。

因為這是一個寫日志的檔案,在windows下和linux下路徑是不同的。比如在windows下的路徑為: String pandianlogspath = "d:/logs/pandian_sql_log"; 但是在linux路徑就是 String pandianlogspath ="/usr/local/tomcat/logs/pandian_sql_log";是以在本地運作程式的時候使用的就是windows下的路徑,每次部署程式到linux系統下的生産機上的時候就要修改路徑。這是一個很麻煩的事情!

但是我確定部署的程式中檔案路徑是linux系統下的路徑,但是他就是報錯。

解決辦法:每次打war包之前都選擇MyEclipse菜單欄中的Project下的clean,清除一下要釋出的項目。

第二個問題:頁面參數亂碼問題。

這個是因為本地的D:\apache-tomcat-5.5.26\conf\server.xml和生産機上的server.xml的配置不一樣的問題,我本地的配置是

<Connector port="8080" maxHttpHeaderSize="8192"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" />

生産機上的是: <Connector port="8080" maxHttpHeaderSize="8192"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />

如果不指定編碼格式,那麼預設的編碼是iso-8859-1,是以可以使用下面這種方式轉碼:

public static String getCodeString(String str){

if (str != null && !str.isEmpty()) {

try {

str = new String(str.getBytes("ISO-8859-1"),

"GBK");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

return str;

},但是如果指定了編碼,那麼就不可以這樣轉碼了,否則就會出現亂碼。

解決辦法:第一、指定檔案編碼格式,URIEncoding="GBK"

第二、不指定編碼,利用getCodeString(String str)方法在程式中對參數處理。

第三個問題:啟動程式的時候或者查詢的時候背景報記憶體溢出的錯誤。 java.lang.OutOfMemoryError

這個問題是具有不确定性的,出現是無規律的。隻要出現記憶體溢出了,就需要重新開機伺服器,否則根本就登陸不了系統。

解決辦法:在D:\apache-tomcat-5.5.26\bin\catalina.sh中,原來的檔案是:

# Set juli LogManager if it is present

if [ -r "$CATALINA_HOME"/bin/tomcat-juli.jar ]; then

JAVA_OPTS="$JAVA_OPTS "-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" "-Djava.util.logging.config.file="$CATALINA_BASE/conf/logging.properties"

fi

隻需要添加"-Xms128" "-Xmx512"就可以了

# Set juli LogManager if it is present

if [ -r "$CATALINA_HOME"/bin/tomcat-juli.jar ]; then

JAVA_OPTS="$JAVA_OPTS "-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" "-Djava.util.logging.config.file="$CATALINA_BASE/conf/logging.properties" "-Xms128" "-Xmx512"

fi

ms初始化記憶體 mx可以使用的最大記憶體

聽同僚說這是java虛拟機的配置,但是為什麼這樣改還有待考慮。

這個連結關于tomcat記憶體溢出問題講解的還是可以的,

[url]http://www.360doc.com/content/08/0928/17/61497_1688019.shtml[/url]

第四個問題:背景說找不到 java.lang.String.isEmpty()這個方法。

這個是因為本地項目添加的是jdk1.6的jar包,打包的時候用的是1.5版本的,生産機上使用的是JDK1.5 此時程式編譯的時候一定要使用JDK1.5 編譯。jdk1.6中的方法無法被1.5的使用。

解決辦法:把jar包換成1.5或者是不使用jdk1.6中的方法,java.lang.String.isEmpty()是jdk1.6中的方法。

注意:jdk版本不同是一個很嚴重的問題,因為在本地運作的好好的程式到生産機上就報錯了。

[/size]