[英]MYSQL driver error in GWT
我试图将我的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;
}
}
我总是得到的错误:
严重: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处com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389)处的java.lang.ExceptionInInitializerError。 com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)上的RPC.invokeAndEncodeResponse(RPC.java:579) com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)处的RemoteServiceServlet.java:248)(javax.servlet处的javax.servlet.http.HttpServlet.service(HttpServlet.java:637)处) org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)上的.http.HttpServlet.service(HttpServlet.java:717)在org.mortbay.jetty.ser上 org.mortbay.jetty.servlet.ServletHandler $ CachedChain上的com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)上的vlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1166)。 com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123)上的doFilter(ServletHandler.java:1157)org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)上的doFilter(ServletHandler.java:1157)在com.google.appengine.api上的com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)上,在org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)在com.google.appengine.api上org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)上的.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61)在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)位于org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)位于org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1157)上的com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97)在org.mortbay.jetty.servlet处。 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)(位于org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)处的ServletHandler.handle(ServletHandler.java:388) org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)的com.google.appengine.tools.development.DevAppEngineWebAppContext.handle的.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) (DevAppEngineWebAppContext.java:94),位于org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152),位于com.google.appengine.tool org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)上的s.development.JettyContainerService $ ApiProxyHandler.handle(JettyContainerService.java:409)在org.mortbay.jetty.Server.handle(Server.java: 326)在org.mortbay.jetty.HttpConnection $ RequestHandler.content(HttpConnection.java:938)在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。在org.mortbay.thread.QueuedThreadPool $ PoolThread.run(QueuedThreadPool.java:582)处运行(SelectChannelEndPoint.java:409)原因:java处java.lang.Class.forName0(Native Method)处的java.lang.ExceptionInInitializerError。 test.server.GreetingServiceImpl.getConn(GreetingServiceImpl.java:88)的lang.Class.forName(未知源)在test.server.GreetingServiceImpl.saveToDB(GreetingSer 在test.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:22)上的ViceImpl.java:56)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect处。 com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)上的java.lang.reflect.Method.invoke(未知源)处的DelegatingMethodAccessorImpl.invoke(未知源) .gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)... 38更多原因:java.security.AccessControlException:访问被拒绝(java.lang.RuntimePermission ModifyThreadGroup)在java.security.AccessControlContext。 com.google.appengine.tools.development.DevAppServerFactory $ CustomSecurityManager.checkPermission(DevAppServerFactory.java)上java.lang.SecurityManager.checkPermission(Unknown Source)上的checkPermission(Unknown Source): 289),网址为com.google.appengine.tools.development.DevAp pcomFactory $ 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个
如果您愿意,可以在以下URL上查看整个代码: http : //www19.zippyshare.com/v/9248211/file.html
所有帮助将不胜感激。
//萨米
由以下原因引起:java.security.AccessControlException:访问被拒绝(java.lang.RuntimePermission ModifyThreadGroup)
和
在com.google.appengine.tools.development.DevAppServerFactory $ CustomSecurityManager中
是有趣的部分。
您不能在AppEngine上使用MySQL: https : //developers.google.com/appengine/docs/java/jrewhitelist
除非您使用CloudSQL,否则它具有特定的API: https : //developers.google.com/appengine/docs/java/cloud-sql/developers-guide
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.