1. 程式人生 > >Linux下tomcat設定jsp連線mysql 的問題忙了幾天,終於搞定

Linux下tomcat設定jsp連線mysql 的問題忙了幾天,終於搞定

OS: Ubuntu6.06
Tomcat: Tomcat 5.0.30
Mysql: MySQL5.0.22
mysql-connector: mysql-connector-java-3.1.14

本來安裝完JDBC驅動mysql-connector-java後應該可以正常連線mysql的,
可是卻碰到了這樣的錯誤:
QUOTE: javax.servlet.ServletException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.security.AccessControlException
MESSAGE: access denied (java.net.SocketPermission localhost resolve)

root cause
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.security.AccessControlException
MESSAGE: access denied (java.net.SocketPermission localhost resolve)

mysql 執行正常,可以在我的Apache2+PHP下連線。

很明顯主要錯誤資訊是:access denied (java.net.SocketPermission localhost resolve)
在網上找了好久,很多人都碰到了這樣的問題,但是沒有一個能夠解決,都說是mysql的授權問題,我在mysql裡grant了N遍都沒用!在百度知道問了,也只有一人回答,而且還是說 mysql!
後來找到了一個類似的問題,聽說是許可權(tomcat security manager),於是模仿了一個他的解決方法,
編輯了tomcat目錄下的policy.d/04webapps.policy,
在下面加了行:
CODE:
//added by flashlm 07-01-13
permission java.net.SocketPermission "localhost", "resolve";
其實就是用了錯誤資訊裡的:java.net.SocketPermission localhost resolve
得啟tomcat,發現錯誤資訊改變了:
QUOTE: MESSAGE: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:3306 connect,resolve)
這次有經驗了,把剛才加的那句改成:
CODE:
//added by flashlm 07-01-13
permission java.net.SocketPermission "localhost", "connect,resolve";
重啟Tomcat,一切OK了,呵呵,終於連上資料庫了。