简体   繁体   English

jsp,连接到mysql数据库的servlet

[英]jsp, servlet connecting to mysql database

I'm getting a weird error when trying to connect to a mysql database. 尝试连接到mysql数据库时出现奇怪的错误。 I have an index.jsp: 我有一个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(): 正在调用此Servlet的(Init.java)静态方法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. 当我从另一个Java类运行静态方法getTeams()时,它可以工作并输出数据库中所有的<option> But when I invoke this method from my jsp it is giving me these errors: 但是,当我从jsp调用此方法时,它给了我这些错误:

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. 我已经调试了一段时间,人们似乎已经通过构建路径的更改来解决这个问题,但是我不确定它有什么问题,因为它可以在另一个Java类中工作,而不能在jsp中工作,但以防万一。

建立路径

Thank you in advance for any help you can offer me. 预先感谢您为我提供的任何帮助。

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. 您会注意到, java.lang.NullPointerException at proj.database.MySQLConnection.getTeams(MySQLConnection.java:36)打印出的java.lang.NullPointerException at proj.database.MySQLConnection.getTeams(MySQLConnection.java:36)中间部分的java.lang.NullPointerException at proj.database.MySQLConnection.getTeams(MySQLConnection.java:36) ,存在java.lang.NullPointerException at proj.database.MySQLConnection.getTeams(MySQLConnection.java:36) 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 . 尝试连接数据库时遇到NullPointerException-访问Init.getTeams()方法之间的唯一区别是从另一个Java类而不是从网页-我的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. 因此,再经过几个Google之后,我发现最好将mysql-connector.jar放在WebContent/WEB-INF/libs文件夹中,并更改构建路径以引用此位置。 Changed it and works now. 对其进行了更改并可以立即使用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM