David Bustin wrote:
> Servlet experts,
>
> I am learning Java and servlets and ran into a challenge getting a JDBC connection
>
> to work within a servlet.
>
> I can get the connection to work via a simple java app without any issues. As a
> servlet
> I get the errors (see screen shot) below.
>
> Using tomcat3.2 on NT4.0 w/ jdk1.3.1 and a Oracle 8.1.6 database on a remote
> Unix host.
>
> What am I doing wrong?
>
> Thanks,
> Dave
>
> ======== Screen shot ========
> it's a DB test
>
> Error: 500
>
> Location: /examples/servlet/DBServlet
>
> Internal Servlet Error:
>
> java.lang.NullPointerException
> at DBServlet.service(DBServlet.java:54)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> at
> org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:405)
> at org.apache.tomcat.core.Handler.service(Handler.java:287)
> at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
> at
> org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:812)
> at org.apache.tomcat.core.ContextManager.service(ContextManager.java:758)
> at
>
>org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213)
>
> at
> org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
> at
> org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501)
> at java.lang.Thread.run(Thread.java:484)
> ======== DBServlet.java ========
> import java.io.*;
> import java.sql.*;
> import javax.servlet.*;
> import javax.servlet.http.*;
>
> public class DBServlet extends HttpServlet {
> private Connection con;
> private PrintWriter out;
>
> public void init(ServletConfig conf)
> throws ServletException {
> super.init(conf);
> try{
>
> // tried this - statement works within java app but not as servlet
> //DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
>
> // compiles w/o error but gives null pointer exception
> // on "Statement stmt = con.createStatement();" below
> Class.forName ("oracle.jdbc.driver.OracleDriver");
>
> con = DriverManager.getConnection("jdbc:oracle:thin:@myhost:1521:mySID",
> "user", "passwd");
>
> } catch(Exception e) {
> System.err.println("Error was: " + e);
> }
> }
>
> public void service(HttpServletRequest req,
> HttpServletResponse res)
> throws ServletException, IOException {
> res.setContentType("text/html");
> try {
> out = res.getWriter();
> out.println("<html>");
> out.println("<head>");
> out.println("<title>DB Demo</title>");
> out.println("</head>");
> out.println("<body>");
>
> out.println("<h1> it's a DB test </h1>");
>
> Statement stmt = con.createStatement();
> ResultSet rs = stmt.executeQuery("select key from keytable");
>
> out.println("<UL>");
>
> while(rs.next()) {
> out.println("<LI>" + rs.getString("key"));
> }
>
> out.println("</UL>");
> rs.close();
>
> stmt.close();
>
> } catch(SQLException e) {
> out.println("An SQL Exception was thrown.");
> } catch(IOException e) {
> System.err.println("An IOException was thrown.");
> }
>
> out.println("</body>");
> out.println("</html>");
> out.close();
> }
>
> public void destroy(){
> try{
> con.close();
> } catch(SQLException e) {
> ;
> }
> }
> }
> [...]
It is better to make out( a PrintWriter) be a local field inside your service method,
this
will increase the Thread-safty when more than one request reach your Servlet, but I
don't
know if it is the reason of the "java.lang.NullPointerException at
DBServlet.service(DBServlet.java:54)"
Bo
Oct.25, 2001
___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".
Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html