GWT プロジェクトを MySQL データベースに数時間接続しようとしましたが、ドライバーをロードするときに奇妙なエラーが何度も発生してスタックしました。
サーバーのコードは次のとおりです。 mysql のドライバーをロードしようとしているだけで、GWT に付属のサンプル プロジェクトを使用していることに注意してください。saveToDB(String) は興味深い部分です。
package test.server;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import test.client.GreetingService;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
/**
* The server side implementation of the RPC service.
*/
@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet implements
GreetingService {
public String greetServer(String input){
// Verify that the input is valid.
saveToDB(input);
String serverInfo = getServletContext().getServerInfo();
String userAgent = getThreadLocalRequest().getHeader("User-Agent");
// Escape data from the client to avoid cross-site script vulnerabilities.
input = escapeHtml(input);
userAgent = escapeHtml(userAgent);
return "Hello, " + input + "!<br><br>I am running " + serverInfo
+ ".<br><br>It looks like you are using:<br>" + userAgent;
}
/**
* Escape an html string. Escaping data received from the client helps to
* prevent cross-site script vulnerabilities.
*
* @param html the html string to escape
* @return the escaped string
*/
private String escapeHtml(String html) {
if (html == null) {
return null;
}
return html.replaceAll("&", "&").replaceAll("<", "<")
.replaceAll(">", ">");
}
public void saveToDB(String input){
String query = "INSERT INTO `oryx.model`" +
"VALUES ('" + input + "');";
// Save the model that is in variable "message" (very long string/text)
//try {
Connection conn = getConn();
// Statement update = (Statement) conn.createStatement();
//update.executeUpdate(query);
//get last id
/*ResultSet result = (ResultSet) update.getGeneratedKeys();
if (result != null && result.next()) {
int rsId = result.getInt(1);
}
result.close();
update.close();
conn.close();
} catch(SQLException e) {
System.err.println("Mysql Statement Error: " + query);
e.printStackTrace();
}*/
}
private Connection getConn() {
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/";
String db = "mysqld";
String driver = "com.mysql.jdbc.Driver";
String user = "user";
String pass = "pass";
try {
System.out.println("ERROR 1");
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("ERROR 2");
} catch (Exception e) {
// TODO Auto-generated catch block
//e.printStackTrace();
System.out.println("ERROR 3");
}
//conn = DriverManager.getConnection(url+db, user, pass);
//SQL EXCEPTION
//System.err.println("Mysql Connection Error: ");
//CLASS NOT FOUND
//e.printStackTrace();
return conn;
}
}
私がいつも得るエラー:
SEVERE: javax.servlet.ServletContext ログ: 着信 RPC 呼び出しのディスパッチ中の例外 com.google.gwt.user.server.rpc.UnexpectedException: サービス メソッド 'public abstract java.lang.String test.client.GreetingService.greetServer(java.lang .String)' が予期しない例外をスローしました。 com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) の RPC.invokeAndEncodeResponse(RPC.java:579) com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost( RemoteServiceServlet.java:248) で com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) で javax.servlet.http.HttpServlet で。org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) で javax.servlet.http.HttpServlet.service(HttpServlet.java:717) でサービス (HttpServlet.java:637) org.mortbay.jetty で.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) at org.mortbay.jetty.servlet.ServletHandler$CachedChain .doFilter(ServletHandler.java:1157) com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) ) org.mortbay.jetty.servlet.ServletHandler$CachedChain の com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) で。org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java: 1157) com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) で org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) で com.google.appengine .tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) at com.google.appengine.tools.development.BackendServersFilter.doFilter (BackendServersFilter.java:97) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) で org.org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler. java:182) org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) で org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) で com.google.appengine.tools で.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService .java:409) org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) で org.mortbay.jetty.Server.handle(Server.java:326) org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) で org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938) で org.mortbay.jetty.HttpParser.parseNext(HttpParser) .java:755) で org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) で org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) で org.mortbay.io.nio.SelectChannelEndPoint. run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 原因: java.lang.ExceptionInInitializerError at java.lang.Class.forName0(Native Method) at java. test.server.GreetingServiceImpl.getConn(GreetingServiceImpl.java:88) の lang.Class.forName(不明なソース) test.server.GreetingServiceImpl.saveToDB(GreetingServiceImpl.java:56) test.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:22) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) で sun.reflect.NativeMethodAccessorImpl.invoke(不明なソース) で sun.reflect.DelegatingMethodAccessorImpl.invoke( java.lang.reflect.Method.invoke (不明なソース) で com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115) で com.google.gwt.user で.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561) ... 38 以上) で java.security.AccessController.checkPermission(不明なソース) で java.lang.SecurityManager.com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:289) の checkPermission(不明なソース) com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:314) の) で java.lang.ThreadGroup.checkAccess (不明なソース) で java.lang.Thread.init (不明なソース) で java.lang.Thread.(不明なソース) で com.mysql.jdbc.NonRegisteringDriver$1.(NonRegisteringDriver.java :90) com.mysql.jdbc.NonRegisteringDriver.(NonRegisteringDriver.java:89) ... 49 もっと見るcheckAccess(DevAppServerFactory.java:314) の java.lang.ThreadGroup.checkAccess(不明なソース) の java.lang.Thread.init(不明なソース) の java.lang.Thread.(不明なソース) の com.mysql.jdbc. NonRegisteringDriver$1.(NonRegisteringDriver.java:90) at com.mysql.jdbc.NonRegisteringDriver.(NonRegisteringDriver.java:89) ... 49 もっと見るcheckAccess(DevAppServerFactory.java:314) の java.lang.ThreadGroup.checkAccess(不明なソース) の java.lang.Thread.init(不明なソース) の java.lang.Thread.(不明なソース) の com.mysql.jdbc. NonRegisteringDriver$1.(NonRegisteringDriver.java:90) at com.mysql.jdbc.NonRegisteringDriver.(NonRegisteringDriver.java:89) ... 49 もっと見る
必要に応じて、次の URL でコード全体を確認できます: http://www19.zippyshare.com/v/9248211/file.html
すべての助けをいただければ幸いです。
//サーミ