0

jspとサーブレットを使用して登録システムを開発していますが、ローカルで調整してもNullPointerExceptionが発生しません。しかし、それをリモートサーバーに展開すると、このNullPointerExceptionが発生します。

コードにエラーはありますか?

package com.app.base;

//imported necessary packages. removes for readability.

public class RegisterServlet extends HttpServlet {

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    PrintWriter out = null;
    // Connection connection = null;
    // Statement statement;
    // ResultSet rs;

    resp.setContentType("text/html");
    out = resp.getWriter();

    String fname = req.getParameter("fname");
    String lname = req.getParameter("lname");
    String email = req.getParameter("email");
    String password = req.getParameter("password");
    String city = req.getParameter("city");
    String country = req.getParameter("country");

    Connection connection = null;
    try {
        // Load the JDBC driver
        Class.forName("com.mysql.jdbc.Driver");

        // Create a connection to the database
        connection = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306,/main",
                "root", "root");

    } catch (SQLException ex) {
        resp.sendRedirect("index.jsp?error=SQLError");
    } catch (ClassNotFoundException e) {
        resp.sendRedirect("index.jsp?error=Class Not Found");
    }

    PreparedStatement statement;
    try {
        statement = connection
                .prepareStatement("INSERT INTO main.users(first_name, last_name, email, password, "
                        + "city, country, registered_time)VALUES(?,?,?,?,?,?, NOW())");
        statement.setString(1, fname);
        statement.setString(2, lname);
        statement.setString(3, email);
        statement.setString(4, password);
        statement.setString(5, city);
        statement.setString(6, country);

        int rs = statement.executeUpdate();

        if (rs == 1) {
            resp.sendRedirect("index.jsp?registered=true");
            // String destination = "index.jsp?registered=true";
            // RequestDispatcher rd =
            // getServletContext().getRequestDispatcher(destination);
            // rd.forward(req, resp);
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

        resp.sendRedirect("index.jsp?registered=false");
    }

}

}

スタックトレース:

  SEVERE: Servlet.service() for servlet [Register] in context with path [] threw exception
  java.lang.NullPointerException
at com.app.base.RegisterServlet.doPost(RegisterServlet.java:79)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:306)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:322)
at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:1688)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
4

2 に答える 2

2

おそらく、ドライバー クラスが見つからない可能性があります。これは、への呼び出しClass.forName()ClassNotFoundException. リダイレクトを送信します (ところで、例外をログに記録するのは良い考えではありません。エラーを見つけるのに苦労していることは既にわかります) が、呼び出しから戻りません。接続をそのままにしておくnullと、後でコードを呼び出そうとしたときに NPE が発生しますprepareStatement)。

return ;リダイレクトを送信した後に a を追加して、通話を停止します。

もちろん、Tomcat でそのドライバーを使用できるようにする方法を見つける必要があります。

于 2012-04-20T22:54:51.510 に答える
0

誤って余分な , を文字列に入れました

connection = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306,/main",
            "root", "root");

に注意してください,/main

代わりにそうあるべきです

connection = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/main",
            "root", "root");

申し訳ありませんが、これが正しい答えでない場合、私は上記のすべての人々のような専門家ではありません

于 2012-10-16T08:36:17.020 に答える