I have a few guesses as to what your problem is, so I'll give it a
try:
        1.  In your web.xml file, you surround your values with quotes, this
is unnecessary and will probably cause other problems once you can actually
load the correct values.
        2.  What URL are you trying to load?  Remember that each set of
init-params are assigned to a particular instance of a servlet and each
servlet mapping defines a particular instance.  In other words, the only way
to use the init-parms in your file is to call /query (note, that is not
/webapp/servlet/query, just /webapp/query)
        3.  Why don't you try and reduce the complexity and first try hard
coding your Driver class name into the servlet?  (Eliminates the question of
whether its Tomcat can't find the driver or the servlet doesn't know what
class to load)
        4.  If you rename your .zip to a .jar you can place it in the
web-inf/lib directory and not need it to be in the classpath, but if you
leave the filename as .zip the Tomcat won't automatically add it to the
webapp's classpath.

        That's all I can come up with off the top of my head....

        Randy

> -----Original Message-----
> From: Ajay Ejantkar [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, May 17, 2001 11:23 AM
> To: [EMAIL PROTECTED]
> Cc: [EMAIL PROTECTED]
> Subject: NullPointerException error
> 
> 
> 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(ContextM
> anager.java:797)
>       at
> org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
>       at
> org.apache.tomcat.service.http.HttpConnectionHandler.processCo
> nnection(HttpConnectionHandler.java:210)
>       at
> org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoin
> t.java:416)
>       at
> org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPo
> ol.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(ContextM
> anager.java:797)
>       at
> org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
>       at
> org.apache.tomcat.service.http.HttpConnectionHandler.processCo
> nnection(HttpConnectionHandler.java:210)
>       at
> org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoin
> t.java:416)
>       at
> org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPo
> ol.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/
> 

Reply via email to