【问题标题】:MYSQL driver error in GWTGWT 中的 MYSQL 驱动程序错误
【发布时间】:2013-03-01 15:15:41
【问题描述】:

我已经尝试将我的 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("&", "&amp;").replaceAll("<", "&lt;")
                .replaceAll(">", "&gt;");
    }

    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: 服务方法'公共抽象java.lang.String test.client.GreetingService.greetServer(java.lang.String)' 抛出了一个 意外异常:java.lang.ExceptionInInitializerError at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389) 在 com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579) 在 com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 在 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.service(HttpServlet.java:637) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 在 com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 在 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) 在 com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61) 在 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) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 在 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在 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) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在 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) 在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 引起:java.lang.ExceptionInInitializerError at java.lang.Class.forName0(本机方法)在 java.lang.Class.forName(未知来源)在 test.server.GreetingServiceImpl.getConn(GreetingServiceImpl.java:88) 在 test.server.GreetingServiceImpl.saveToDB(GreetingServiceImpl.java:56) 在 test.server.GreetingServiceImpl.greetServer(GreetingServiceImpl.java:22) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at 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.AccessControlException:访问 拒绝(java.lang.RuntimePermission modifyThreadGroup)在 java.security.AccessControlContext.checkPermission(未知来源)在 java.security.AccessController.checkPermission(未知来源)在 java.lang.SecurityManager.checkPermission(Unknown Source) 在 com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:289) 在 com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:314) 在 java.lang.ThreadGroup.checkAccess(Unknown Source) 在 java.lang.Thread.init(未知来源)在 java.lang.Thread.(未知来源)在 com.mysql.jdbc.NonRegisteringDriver$1.(NonRegisteringDriver.java:90) 在 com.mysql.jdbc.NonRegisteringDriver.(NonRegisteringDriver.java:89) ... 49 更多

如果您愿意,可以在以下网址查看整个代码: http://www19.zippyshare.com/v/9248211/file.html

非常感谢所有帮助。

//萨米语

【问题讨论】:

    标签: java eclipse gwt jdbc


    【解决方案1】:

    原因: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

    【讨论】:

    • 感谢您的回复。有没有其他方法可以解决问题而无需在 6 月初之前使用试用版?其他方法还是什么? //萨米人
    • 首先,您是否会在 AppEngine 上进行部署?
    • 我认为不一定。最主要的是我使用 gwt 并且以某种方式可以连接到我的 mysql 数据库。如何工作并不重要。 :)
    • 如果您不打算在 AppEngine 上部署,那么只需在您的 Eclise 项目中禁用 AppEngine(项目属性 → Google → AppEngine)
    猜你喜欢
    • 2017-05-23
    • 2014-10-24
    • 2012-09-18
    • 1970-01-01
    • 2013-03-26
    • 2022-01-28
    • 2011-10-20
    • 2014-02-15
    • 1970-01-01
    相关资源
    最近更新 更多