問題描述: 在某個linux版本環境下,一台伺服器上執行系統就會報錯,而另一台伺服器執行系統不會報錯。百度了很多解決方案,大體說是由于 servlet-api的jar包沖突,給出的一些方案不能解決問題。
最終解決方案:
1、通過檢視錯誤日志或者錯誤提示,确定問題出現的類,比如 *.HttpServletRequest.*: XXXX,那麼HttpServletRequest可能就是導緻問題出現的沖突類。
2、查找所有包含HttpServletRequest的jar包:
./findclass.sh ./lib HttpServletRequest
3、如果有多個路徑,多次查找,分析查找出來的jar包哪個可能是不需要的,通過删除測試來确定是否解決問題。
findclass.h, 如下:
#!/bin/sh
find_dir=$1
find_key=$2
jars=`find $find_dir -name '*.jar'`
for jar in $jars
do
ret=`jar tvf $jar | grep $find_key`
if [ "$?" = "0" ]; then
echo -e "\e[1;34m${jar}\e[0m: \n\e[2;34m${ret}\e[0m"
fi
done
wars=`find $find_dir -name '*.war'`
for war in $wars
do
ret=`jar tvf $war | grep $find_key`
if [ "$?" = "0" ]; then
echo -e "\e[1;34m${war}\e[0m: \n\e[2;34m${ret}\e[0m"
fi
done