升級tomcat8及更高版本帶來的問題
由於使用get請求,鏈接中參數攜帶特殊字符,由於Tomcat的新版本中增加了一個新特性,就是嚴格按照 RFC 3986規范進行訪問
解析,而 RFC 3986規范定義了Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符
(RFC3986中指定了以下字符為保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])
1.統一的解決辦法使用encodeURIComponent(對請求參數編碼)
使用encodeURIComponent會對參數所以參數都編碼,這里不建議使用encodeURI,因為它不會對“; / ? : @ & = + $ , #”幾個
特殊字符編碼。
比如請求參數是:"{"criteria":{"matchMode":"AND","subCriteriaList":[{"fieldName":"oilNo","targetValue":"1","compareMode":"EQ"}]}}"
代碼如下:
encodeURIComponent(JSON.stringify((new Query().buildQueryCrit('oilNo', formData.oilNo, 'EQ').queryCrit)));
編碼后:
"%7B%22criteria%22%3A%7B%22matchMode%22%3A%22AND%22%2C%22subCriteriaList%22%3A%5B%7B%22fieldName%22%3A%22oilNo%22%2C%22targetValue%22%3A%221%22%2C%22compareMode%22%3A%22EQ%22%7D%5D%7D%7D"
在springMVC的Controlelr層能正確接收字符串。
備注另一個問題的解決方法:Linux tomcat8,JDK8 啟動卡住半天 后才能正常啟動解決方案
將$JAVA_HOME/jre/lib/security/java.security內,將securerandom.source的內容改為file:/dev/./urandom即可
linux或者部分unix系統提供隨機數設備是/dev/random 和/dev/urandom ,兩個有區別,urandom安全性沒有random高,但random需要時間間隔生成隨機數。
可能在生成隨機數的時候卡住了,導致tomcat啟動不了