幾天前將Tomcat 7升級到7.0.26(Centos 7 yum update)後出現了一個奇怪的情況。 DriverManager
未能自動識別MySQL驅動程序,並且在servlet部署在Tomcat服務器上時返回空分鐘Connection
。另一方面,我的NetBeans上的GlassFish服務器工作良好。DriverManager只在Tomcat上返回null連接(在Glassfish上正常工作)
的簡單的測試servlet代碼是象下面這樣:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter())
{
Connection c = MySQLConnector.connect("DBFoobar", "username", "passwd");
String message = null;
if (c == null)
message = "Connection returned null";
else
message = "C is returned: " + c.toString();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<body>");
out.println(message);
.
.
.
和在MySQLConnector
,將jdbc
呼叫的定義如下所示:
public class MySQLConnector
{
private static final String dbURLPrefix
= "jdbc:mysql://dbfoobar.xxx.uswest2.rds.amazonaws.com:3306/";
public static Connection connect(String dbName, String username, String password)
{
Connection connection = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(dbURLPrefix + dbName
+ "?useUnicode=yes&characterEncoding=UTF-8&useSSL=false", username, password);
.
.
.
當servlet被GlasshFish服務器上,它正確運行顯示Connection
對象,但在Tomcat服務器上顯示Connection returned null
消息。
對此的任何想法?到目前爲止,我已經嘗試將mysql連接器jar文件放在/usr/share/tomcat/lib
目錄下,但無濟於事。 war
包正確包含mysql連接器jar文件。以前版本的Tomcat 7運行良好。
它沒有返回null。它拋出了一個例外。你的代碼返回null,但這是它的錯。異常告訴你問題是什麼。 – EJP
不,它確實返回null。在禁用SELinux的情況下,它可以正常工作,不會引發任何異常。 – jwsohn