0

HTMLページにアプレットを埋め込みます。アプレットはMySQLjarファイルも使用します。

MySQLjarファイルがなくても問題なく動作します。ローカルWebサーバーまたはホストされているWebサーバーから実行すると、次のエラーが発生します。

Exception in thread "AWT-EventQueue-2" java.lang.ExceptionInInitializerError
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:286)
at java.sql.DriverManager.getConnection(Unknown Source)
.........
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "file.encoding" "read")
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)

マイファイルリスト:

/appletTest.html
/mysql-connector-java-5.1.18-bin.jar
/applet/testApplet.class

testApplet.class:

package applet;

import java.applet.Applet;
import java.awt.Graphics;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class HelloWorldApplet extends Applet {

@Override
public void paint(Graphics g) {
    g.drawString("Hello World", 25, 50);

    Connection con = null;
    Statement st = null;
    ResultSet rs = null;

    String url = "jdbc:mysql://localhost:3306/testdb";

    try {
        con = DriverManager.getConnection(url, "root", ""); // <= here fails
        st = con.createStatement();
        rs = st.executeQuery("SELECT VERSION()");

        if (rs.next()) {
            g.drawString(rs.getString(1), 25, 50);
        }

    } catch (SQLException ex) {
        System.out.println(ex);
    } 
  }
}

appletTest.html:

<html>
  <head>
  <title>Applet Test</title>
  </head>
   <body>
      <applet code="applet.testApplet.class" width="500" height="300" archive="mysql-connector-java-5.1.18-bin.jar">
      </applet>
   </body>
</html>

このセキュリティエラーは、「署名」または「ローカルセキュリティポリシーの変更」を行わない限り、アプレットがローカルリソースにアクセスできないために発生すると思います。しかし、私のファイルはすべてWebサーバーにあり、アプレットはWebサーバーにもあるjarファイルを要求します。

したがって、ここにはローカルファイル要求は表示されませんが、それでもこのエラーが発生します。何か提案をお願いします。

4

1 に答える 1

1

「通常、署名されていない Java アプレットまたはアプリケーションは、元の Web サーバーにのみ接続することができます。この制限により、アプレットがインターネット上の任意のマシンに迅速に接続してサービス拒否攻撃を引き起こすことを防ぎます。」

テスト中は、Web サーバーと同じドメインにいることを確認してください。 file:///.../appletTest.htmllocalhost にアクセスしても機能しません。

その行: String url = "jdbc:mysql://localhost:3306/testdb";Web サーバーのアドレスに変更する必要があります。

paint()[編集]が呼び出されるたびに新しい接続を開くのはばかげていると思いませんか?

[編集] あなたの投稿をもっと注意深く読みました。問題は、jar ファイルにアクセスできないことです。最も簡単な方法は、ドライバーをアプレットと同じ jar にパッケージ化することです。

于 2013-02-25T18:43:32.933 に答える