我将一个小程序嵌入到 HTML 页面中。该小程序还使用 MySQL jar 文件。
没有 MySQL jar 文件它也能正常工作。从本地网络服务器或托管网络服务器执行它时,会出现以下错误:
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>
我认为出现此安全错误是因为除非您“签名”或“更改本地安全策略”,否则小程序无法访问本地资源。但我的所有文件都位于网络服务器上,并且小程序请求的 jar 文件也位于网络服务器上。
所以,我在这里没有看到本地文件请求,但仍然收到此错误。您能给我一些建议吗?
最佳答案
当您进行测试时,请确保您与网络服务器位于同一域中。
即使您访问本地主机,file:///.../appletTest.html
也不会工作。
该行:String url = "jdbc:mysql://localhost:3306/testdb";
需要更改为您的网络服务器的地址。
[编辑]
每次调用 paint()
时打开一个新连接不是很愚蠢吗?
[编辑] 我更仔细地阅读了您的帖子。问题是您无法访问 jar 文件。最简单的方法是将驱动程序打包在与小程序相同的 jar 中。
关于HTML 中嵌入 jar 的 Java Applet 安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15073967/