Question

I'm getting a weird error when trying to connect to a mysql database. I have an index.jsp:

<%@page import="proj.team.Team" %>
<%@page import="servlets.Init" %>
<%@page import="java.sql.Connection" %>
<%@page import="java.sql.DriverManager" %>

<!-- default html doctype, head, body etc. -->

<select class="select">
   <option selected="selected">Choose Team</option>
   <%= Init.getTeams() %>
</select>

<!-- default html, closing body and html -->

Which is calling this servlet's (Init.java) static method getTeams():

package servlets;

import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import proj.database.MySQLConnection;
import proj.team.Team;

@WebServlet("/Init")
public class Init extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public Init() {
        super();
    }

    public static String getTeams() {
        String s = "";

        ArrayList<Team> teams = new ArrayList<Team>();
        teams = MySQLConnection.getTeams();

        for (Team t : teams) {
            s += "<option value='" + t.getId() + "'>" + t.getName() + "</option>";
        }

        return s;
    }

}

When I run the static method getTeams() from another java class, it works and outputs all of the <option>s that I have in the database. But when I invoke this method from my jsp it is giving me these errors:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1718)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:259)
    at proj.database.MySQLConnection.getConnection(MySQLConnection.java:23)
    at proj.database.MySQLConnection.getTeams(MySQLConnection.java:34)
    at servlets.Init.getTeams(Init.java:34)
    at org.apache.jsp.index_jsp._jspService(index_jsp.java:93)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:744)
Apr 27, 2014 2:45:49 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jsp] in context with path [/class-java-project-baseball] threw exception [An exception occurred processing JSP page /index.jsp at line 28

25:                 <select class="select">
26:                     <option selected="selected">Choose Team</option>
27:                     <%= 
28:                         Init.getTeams()
29:                     %>
30:                 </select>
31:             </div>


Stacktrace:] with root cause
java.lang.NullPointerException
    at proj.database.MySQLConnection.getTeams(MySQLConnection.java:36)
    at servlets.Init.getTeams(Init.java:34)
    at org.apache.jsp.index_jsp._jspService(index_jsp.java:93)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:744)

I've been debugging this for a while, and people have seemed to clear this up with changes in the build path, but I'm not sure what could be wrong with it as it works from another java class and just not in the jsp, but here's what that looks like just in case.

Build Path

Thank you in advance for any help you can offer me.

Was it helpful?

Solution

I figured this out, and here's how:

You'll notice that java.lang.NullPointerException at proj.database.MySQLConnection.getTeams(MySQLConnection.java:36) around the middle part of the printed out stacktrace. I was getting a NullPointerException when trying to connect to the database - and the only difference between accessing the Init.getTeams() method was calling it from another java class instead of from a webpage - my index.jsp.

So, after a couple more google's I found out that it's best to place the mysql-connector.jar in the WebContent/WEB-INF/libs folder, and change the build path to reference this location. Changed it and works now.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top