I am trying to run the following servlet.
*************************************************************************
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import java.io.*;
/**
* This class demonstrates how JDBC can be used within a servlet. It
uses
* initialization parameters (which come from the web.xml configuration
file)
* to create a single JDBC database connection, which is shared by all
clients
* of the servlet.
***/
public class Query extends HttpServlet {
Connection db; // This is the shared JDBC connection
public void init() throws ServletException {
// Read initialization parameters from the web.xml file
ServletConfig config = getServletConfig();
String driverClassName =
config.getInitParameter("driverClassName");
String url = config.getInitParameter("url");
String username = config.getInitParameter("username");
String password = config.getInitParameter("password");
// Use those init params to establish a connection to the
database
// If anything goes wrong, log it, wrap the exception and
re-throw it
try {
Class.forName(driverClassName);
db = DriverManager.getConnection(url, username, password);
}
catch (Exception e) {
log("Can't create DB connection", e);
throw new ServletException("Query: can't initialize: " +
e.getMessage(), e);
}
}
/** Close the database connection when the servlet is unloaded */
public void destroy() {
try{ db.close(); } // Try to close the connection
catch (SQLException e) {} // Ignore errors; at least we
tried!
}
public void doGet(HttpServletRequest request, HttpServletResponse
response) throws IOException, ServletException
{
response.setContentType("text/html"); // We'returnoutputting
HTML
PrintWriter out = response.getWriter(); // Where to output it
to
// Output document header and a form for entering SQL queries
// When the form is submitted, this servlet is reloaded
out.println("<HEAD><TITLE>DB Query</TITLE></HEAD>\n" +
"<BODY BGCOLOR=white><H1>DB Query</H1>\n" +
"<FORM><B>Query:</B><INPUT NAME='q'>" +
"<INPUT TYPE=submit></FORM>");
// See if a query was specified in this request.
String query = request.getParameter("q");
if (query != null) {
// display the query text as a page heading
out.println("<H1>" + query + "</H1>");
// Now try to execute the query and display the results in
a table
Statement statement = null; // An object to execute the
query
try {
// Create a statement to use
statement = db.createStatement();
// Use it to execute the specified query, and get the
result set
ResultSet results = statement.executeQuery(query);
// Ask for extra information about the results
ResultSetMetaData metadata = results.getMetaData();
// How many columns are there in the results?
int numcols = metadata.getColumnCount();
// Begin a table, and output a header row of column
names
out.println("<TABLE BORDER=2><TR>");
for(int i = 0; i < numcols; i++)
out.print("<TH>" + metadata.getColumnLabel(i+1) +
"</TH>");
out.println("</TR>");
// Now loop through the "rows of the result set
while(results.next()){
// For each row, display the values for each column
out.print("<TR>");
for(int i = 0; i < numcols; i++)
out.print("<TH>" + results.getObject(i+1) +
"</TD>");
out.println("</TR>");
}
out.println("</TABLE>"); // end the table.
}
catch (SQLException e) {
// If anything goes wrong (usually SQL error) display
the
// error to the user so they can correct it.
out.println("SQL Error: " + e.getMessage());
}
finally { // Whatever happens, always close the Statement
object
try { statement.close();}
catch (Exception e) {}
}
}
// Finally, end the HTML output
out.println("</BODY>");
}
}
*************************************************************************
When I load the servlet I get the following error:
Error: 500
Location: /myapp/query
Internal Servlet Error:
javax.servlet.ServletException: Query: can't initialize: null
at Query.init(Query.java:31)
at javax.servlet.GenericServlet.init(GenericServlet.java:258)
at
org.apache.tomcat.core.ServletWrapper.doInit(ServletWrapper.java:317)
at org.apache.tomcat.core.Handler.init(Handler.java:215)
at org.apache.tomcat.core.ServletWrapper.init(ServletWrapper.java:296)
at org.apache.tomcat.core.Handler.service(Handler.java:254)
at
org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797)
at
org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:210)
at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
at java.lang.Thread.run(Thread.java:484)
Root cause:
java.lang.NullPointerException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at Query.init(Query.java:26)
at javax.servlet.GenericServlet.init(GenericServlet.java:258)
at
org.apache.tomcat.core.ServletWrapper.doInit(ServletWrapper.java:317)
at org.apache.tomcat.core.Handler.init(Handler.java:215)
at org.apache.tomcat.core.ServletWrapper.init(ServletWrapper.java:296)
at org.apache.tomcat.core.Handler.service(Handler.java:254)
at
org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797)
at
org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:210)
at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
at java.lang.Thread.run(Thread.java:484)
************************************************************************
I have put the location of my jdbc driver in my classpath before I
start up the tomcat server. I have also tried to put the zip file with
the drivers in myapps/web-inf/lib/ directory. It still does not seem to
be able to locate the jdbc driver. Following is my web.xml file :
************************************************************************
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<display-name>Hello, World Application</display-name>
<description>
This is a simple web application with a source code organization
based on the recommendations of the Application Developer's Guide.
</description>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>Hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>MonkeyServlet</servlet-name>
<servlet-class>Monkey</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MonkeyServlet</servlet-name>
<url-pattern>/monkey</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ListManagerServlet</servlet-name>
<servlet-class>ListManagerServlet</servlet-class>
<init-param>
<param-name>addressfile</param-name>
<param-value>addressfile.txt</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ListManagerServlet</servlet-name>
<url-pattern>/list</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Query</servlet-name>
<servlet-class>Query</servlet-class>
<init-param>
<param-name>driverClassName</param-name>
<param-value>"com.sybase.jdbc.SybDriver"</param-value>
<param-name>url</param-name>
<param-value>"jdbc:sybase:Tds:localhost:2638"</param-value>
<param-name>username</param-name>
<param-value>"DBA"</param-value>
<param-name>password</param-name>
<param-value>"SQL"</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Query</servlet-name>
<url-pattern>/query</url-pattern>
</servlet-mapping>
</web-app>
*************************************************************************
Any help on this would be greatly appreciated.
Ajay
__________________________________________________
Do You Yahoo!?
Yahoo! Auctions - buy the things you want at great prices
http://auctions.yahoo.com/