views:

63

answers:

2

Hi all:

I've been trying to obtain the Driver class for JDBC connection to MySQL. The workstation is running on Linux, Fedora 10. I have manually set up the classpath variable for Java by CLI like this:

bash-3.2$ echo $CLASSPATH
/home/cmao/public_html/jsp/mysql-connector-java-5.1.12-bin.jar

This shows that I've added the lastest mysql connection jar archive to my CLASSPATH variable.

I've created a test JSP page which can be found here

And source code for this page is:

<%@page language="java"%>
<%@page import="java.sql.*"%>
<%@page import="java.util.*"%>
<html>
<head>
    <title>UTS JDBC MySQL connection test page</title>
</head>
<body>
<%
    Connection con = null;
    out.print("Java version is   : " + System.getProperty("java.version") + "<br />");
    out.print("Tomcat version is : " + application.getServerInfo() + "<br />");
    out.print("Servlet version is: " + application.getMajorVersion() + "<br />"); 
    out.print("JSP version is    : " + JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() +"<br />");
    //out.print("Java classpath is : " + System.getProperty("java.class.path")+ "<br />");
    //out.print("JSP classpath is  : " + appliaction.getAttribute("org.apache.catalina.jsp_classpath") + "<br />");
    //out.print("Tomcat classpath is : " + System.getProperty("org.apache.tomcat.common.classpath") + "<br />");

    try
    {
        Class c = Class.forName("com.mysql.jdbc.Driver");
    }
    catch(Exception e)
    {
        out.println("Error! Failed to obtain JDBC driver for MySQL... Missing class \"com.mysql.jdbc.Driver\"<br />");
    }
%>
</body>
</html>

None of those commented out line would work, various Jsper Expetions would be thrown.

You can check those Error pages from the following links: classpath Error page catalina Error page tomcat Error page

It seems, from my limited knowledge of JSP and Servlet, the Tomcat environment "ignores" my Java CLASSPATH? In which case I cannot configure the MySQL JDBC package to let my Servlets(a JSP is but a Servlet anyway) work.

I am not sure how to fix this issue. would it be better if I use an IDE like Eclipse or NetBeans and create a real Java "web app" so that everything can be "self-configured" by the usage of a web.config XML configuration file? So that I can certainly bypass this Tomcat environment restriction?

Many thanks for the suggestions in advance.

+4  A: 

This shows that I've added the lastest mysql connection jar archive to my CLASSPATH variable.

Too bad for you that Tomcat (and all other Java EE app servers) ignore any system CLASSPATH environment variable.

You are supposed to add JDBC driver JARs in either one of two places:

  1. WEB-INF/lib for your web context, which means it's available ONLY to your app (might not be a bad thing)
  2. In the Tomcat server/lib if you're using version 5.x or /lib if you're using version 6.x.

I believe that Tomcat 6.x requires that you put JDBC driver JARs in /lib.

duffymo
@duffymo : Oh...I see, so they did this on purpose... Now that the workstation is a shared environment (all students use the same environment I believe), I reckon I must create my own web app and configure the JDBC Driver myself. I cannot access the lib folder of Tomcat, for security reasons, I believe.Thanks for your clarifiaction. I will start working on NetBeans now:)
Michael Mao
Exactly. You can't count on CLASSPATH being set, and it needs to be different for each app and app server. Best to try keeping it in your own WAR file. You have a self-contained package that way.
duffymo
+1  A: 

You may want to learn how to package up a war file, as that would be the simplest way to install the web application, if you are going to have several files.

Your jar files would go in the lib directory, and would be found easily by tomcat.

James Black
@James Black : Agreed. This is just a test page to see if I am so lucky to have a working JDBC Driver for MySQL installed "by default". I am sure they installed the Driver for Oracle9i, but not for MySQL unfortunately...
Michael Mao