Java RPC调用失败

Java RPC调用失败,java,mysql,eclipse,tomcat,Java,Mysql,Eclipse,Tomcat,当我运行我的项目时,我收到错误消息“RPC调用失败”。这将来自我的LoginView类AuthenticationHandler类。此外,ClickHandler中的窗口警报显示输入“aa/bb”页面的值。MySQL和Tomcat已经启动,我已经尝试通过遵循大量在线指南和论坛来确保安装所有驱动程序。不过,我怀疑我在这方面做得不对。然而,我可能错了。有人能告诉我要检查什么以及如何修理吗。细节将不胜感激,因为我是一个新手 我“作为”Web应用程序运行,但GAE未启用(我提到这一点是因为我发现这是另一

当我运行我的项目时,我收到错误消息“RPC调用失败”。这将来自我的LoginView类AuthenticationHandler类。此外,ClickHandler中的窗口警报显示输入“aa/bb”页面的值。MySQL和Tomcat已经启动,我已经尝试通过遵循大量在线指南和论坛来确保安装所有驱动程序。不过,我怀疑我在这方面做得不对。然而,我可能错了。有人能告诉我要检查什么以及如何修理吗。细节将不胜感激,因为我是一个新手

我“作为”Web应用程序运行,但GAE未启用(我提到这一点是因为我发现这是另一个问题中的原因)。我有一个MySQL数据库奖励跟踪器,用户为DBuser,密码为DBpass,其中一个表中有数据

错误日志中显示了我在MySQLConnection类中插入的消息“连接到数据库时出错-不好”。以下是日志和类:

控制台:

java.sql.SQLException: No suitable driver found for jbdc:mysql://localhost:3306/awardtracker
Error connecting to database - not good eh
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at org.AwardTracker.server.MySQLConnection.<init>(MySQLConnection.java:23)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:463)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
Starting Jetty on port 8888
[WARN] Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract org.AwardTracker.client.User org.AwardTracker.client.DBConnection.authenticateUser(java.lang.String,java.lang.String)' threw an unexpected exception: java.lang.NullPointerException
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
Caused by: java.lang.NullPointerException
at org.AwardTracker.server.MySQLConnection.authenticateUser(MySQLConnection.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
... 22 more
[ERROR] 500 - POST /org.AwardTracker.AwardTracker/MySQLConnection (127.0.0.1) 57 bytes
Request headers
  Accept: */*
  X-GWT-Permutation: HostedMode
  X-GWT-Module-Base: http://127.0.0.1:8888/org.AwardTracker.AwardTracker/
  Content-Type: text/x-gwt-rpc; charset=utf-8
  Referer: http://127.0.0.1:8888/AwardTracker.html?gwt.codesvr=127.0.0.1:9997
  Accept-Language: en-au
  Accept-Encoding: gzip, deflate
  User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)
  Host: 127.0.0.1:8888
  Content-Length: 199
  Connection: Keep-Alive
  Cache-Control: no-cache
Response headers
  Content-Type: text/plain
用户类

package org.AwardTracker.client;

import com.google.gwt.user.client.rpc.IsSerializable;

public class User implements IsSerializable {
@SuppressWarnings("unused")
private String username;
@SuppressWarnings("unused")
private String password;
@SuppressWarnings("unused")
private User() {
    //just here because GWT wants it.
}
public User(String username, String password) {
    this.username = username;
    this.password = password;
}

}
LoginView类

package org.AwardTracker.client;


import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;

public class LoginView extends Composite {
private TextBox textBoxUsername;
private PasswordTextBox passwordTextBox;

private DBConnectionAsync rpc;

public LoginView(final NavHandler navHandler) {

    rpc = (DBConnectionAsync) GWT.create(DBConnection.class);
    ServiceDefTarget target = (ServiceDefTarget) rpc;
    String moduleRelativeURL = GWT.getModuleBaseURL() + "MySQLConnection";
    target.setServiceEntryPoint(moduleRelativeURL);

    VerticalPanel verticalPanel = new VerticalPanel();
    initWidget(verticalPanel);

    Label lblWelcomeToThe = new Label("Welcome to the Award Tracker login page");
    lblWelcomeToThe.setStyleName("gwt-Label-Login");
    verticalPanel.add(lblWelcomeToThe);

    Label lblSignInTo = new Label("Please sign in to your account");
    lblSignInTo.setStyleName("gwt-Label-Login");
    verticalPanel.add(lblSignInTo);

    FlexTable flexTable = new FlexTable();
    verticalPanel.add(flexTable);

    Label lblUserName = new Label("Username:");
    lblUserName.setStyleName("gwt-Label-Login");
    flexTable.setWidget(0, 0, lblUserName);
    lblUserName.setHeight("12px");

    textBoxUsername = new TextBox();
    flexTable.setWidget(0, 1, textBoxUsername);

    Label lblNewLabel = new Label("Password:");
    lblNewLabel.setStyleName("gwt-Label-Login");
    flexTable.setWidget(1, 0, lblNewLabel);

    passwordTextBox = new PasswordTextBox();
    flexTable.setWidget(1, 1, passwordTextBox);

    CheckBox chckbxRememberMeOn = new CheckBox("Remember me on this computer");
    chckbxRememberMeOn.setStyleName("gwt-Checkbox-Login");
    flexTable.setWidget(2, 1, chckbxRememberMeOn);

    Button btnSignIn = new Button("Sign In");
    btnSignIn.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            if (textBoxUsername.getText().length() == 0) {
                    Window.alert("Username is empty."); 
                }else if (passwordTextBox.getText().length() == 0) {
                    Window.alert("Password is empty."); 
                }else {
                    AsyncCallback<User> callback = new AuthenticationHandler<User>();
                    Window.alert(textBoxUsername.getText() + "/" + passwordTextBox.getText());
                    rpc.authenticateUser(textBoxUsername.getText(), passwordTextBox.getText(), callback);
                }
        }
        class AuthenticationHandler<T> implements AsyncCallback<User> {
            public void onFailure(Throwable ex) {
                Window.alert("RPC call failed.");   
            }
            public void onSuccess(User result) {
                navHandler.go("SelectPerson");
            }
        }
    });
    flexTable.setWidget(3, 1, btnSignIn);

    Label lblCreateAcct = new Label("Create an account");
    lblCreateAcct.setStyleName("gwt-Link-Login");
    lblCreateAcct.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            navHandler.go("CreateAccount");
        }
    });
    flexTable.setWidget(4, 1, lblCreateAcct);
}

}

数据库url的字符串似乎错误。您没有数据库保护

private String url = "jbdc:mysql://localhost/awardtracker/";
如果数据库使用默认保护,请更改为:

 private String url = "jbdc:mysql://localhost:3306/awardtracker/";

答案是看

MySQLConnection "private String url = "jbdc:mysql://localhost/awardtracker/";" 

jbdc应该是jdbc。

您好,中英,很抱歉,这不起作用。另外,我不知道我做了什么,但我不再在Eclipse中使用服务器选项卡。我曾经选择该选项卡来启动服务器。这次我不得不从Windows启动服务器进行测试。关于,Glyn。单击Eclipse工具栏中的“窗口”,选择“显示视图”,然后选择需要打开的选项卡。:)谢谢中英,我现在有我的服务器标签回来了。您好,格林。您好,中英,我重新尝试了您添加的更改:3306,但它不起作用。还有其他想法吗?你好,格林。我收到了在我的第一条消息之后添加“e.printStackTrace();”的建议。我已经更新了上面的日志。简而言之,我有一条信息“没有找到适合jbdc的驱动程序:mysql://localhost:3306/awardtracker". 我已经按照所有说明安装了驱动程序,所以我应该看哪里?你好,格林。
 private String url = "jbdc:mysql://localhost:3306/awardtracker/";
MySQLConnection "private String url = "jbdc:mysql://localhost/awardtracker/";"