将外部JDBC jar添加到applet的问题

时间:2014-06-15 16:21:22

标签: java jdbc applet

我正在尝试创建一个访问数据库并读取表信息的applet。我不关心任何安全风险,只是想让它发挥作用。

每当我在appletviewer中运行applet时,它就可以很好地访问数据库并完成我想要它做的事情。但是,当我尝试将.class添加到HTML网站时,我得到了一个未找到类的异常。我环顾四周,似乎没有任何工作。我的.class,我的JDBC .jar和我的.html都在我桌面上的文件夹中。这是我的HTML代码:

<html>
<head>
<title>applet</title>
</head>

<body>
<applet code="testing.class" width="350" height="200" archive="mysql-connector-java-5.1.31-bin.jar"></applet>
</body>

</html>

我的小程序代码(即使我确定它是正确的):

import java.applet.Applet;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class testing extends Applet{
    public void init() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String URL = "https://ca.news.yahoo.com/-a-kick-in-the-teeth---pc-supporters-respond-to-hudak-s-resignation-195516571.html";
            Connection con = DriverManager.getConnection("jdbc:mysql://BLOCKED/BLOCKED", "BLOCKED", "BLOCKED");
            PreparedStatement statement = con.prepareStatement("INSERT INTO voting (URL, Votes) VALUES ('" + URL + "', 2) ");
            statement.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

新错误:

java.lang.ExceptionInInitializerError
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:325)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at testing.init(testing.java:11)
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(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)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at sun.plugin2.applet.AWTAppletSecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at com.mysql.jdbc.StringUtils.<clinit>(StringUtils.java:69)
... 7 more

1 个答案:

答案 0 :(得分:0)

好的,这个例外是合理的。

你的问题刚开始。您尝试运行直接连接到JDBC的applet。您注意到安全问题超出了范围。从您的角度来看可能是正确的,但从您的浏览器的角度来看并非如此。

Applet在安全性方面非常有限。他们不能使用客户端的磁盘,无法调用JNI,也无法与服务器建立连接而不是他们启动的服务器。

在您的情况下,您从文件系统运行页面,即使用c:/myproject/mypage.html之类的网址。这意味着您的“主机”类似于“myproject”。然后尝试执行到BLOCKED的JDBC连接(我猜它是localhost。但localhost不是myproject。要解决此安全问题,请尝试在HTTP下部署您的applet服务器(即使它在您的计算机上)。然后尝试通过HTTP访问该页面。

据我记得你还应该签署你的小程序。您可以将浏览器配置为运行不受信任的applet。在这种情况下,您无需签名即可运行它。

我仍然不知道Chrome中存在什么问题。

但是你为什么这样做? Applets是一种过时的技术。在过去的15年里,没有人使用它。如果您只需要某种java UI,请实现java应用程序。如果您需要某种简单的分发,请使用java web start运行它。或者实现普通的Web应用程序,因此客户端通过HTTP与服务器通信,服务器执行所需的所有连接。