将数据库值检索到applet中

时间:2012-02-15 15:22:27

标签: java jsp servlets jdbc applet

自从最近两天以来,我试图将applet嵌入到我的网页中,applet将检索数据库值并将其显示在组合框中。

但是,当我试图运行我的jsp页面时(我已经嵌入了我的applet),我得到了 AccessControlException 异常。现在,我是我的最后一个选择,即使用3层架构将applet与数据库进行通信,就像我在互联网上找到的那样。现在,我不知道如何使用Servlet作为中间层从数据库中将值检索到applet中。因为,我无法将数据库中的数据导入我的applet。请帮我。提前致谢。!!

1 个答案:

答案 0 :(得分:2)

在Applet中编写JDBC时,你确实走错了路。 Applet的源代码对最终用户是公开可见的。恶意最终用户可以对其进行反编译并查看数据库名称/密码和/或对其进行编辑,以更改SQL查询以执行DELETETRUNCATE或任何其他不良操作。再见数据库。

您需要设计和创建一个“Web服务”,它仅侦听某些URL,并以XML,JSON,CSV等通用格式返回结果。然后,您的Applet只需通过URLConnection完全调用该URL并处理结果。有许多Java库可以将Java对象转换为XML / JSON / CSV格式,反之亦然。您可以在Web服务和applet的代码中使用相同的库。

想象一下,您正在选择JSON并因此使用Gson在Java和JSON之间进行转换,那么您基本上可以在作为“Web服务”的Servlet中执行以下操作:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // Just a basic example. In real, just retrieve data from DB.
    List<String> list = new ArrayList<String>();
    list.add("item1");
    list.add("item2");
    list.add("item3");
    String json = new Gson().toJson(list);

    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(json);
}

这可以在Applet中获得如下:

URL url = new URL(getCodeBase(), "servletURL");
Reader reader = new InputStreamReader(url.openStream(), "UTF-8");
List<String> list = new Gson().fromJson(reader, new TypeToken<List<String>>() {}.getType());
// ...