但是,当我试图运行我的jsp页面时(我已经嵌入了我的applet),我得到了 AccessControlException 异常。现在,我是我的最后一个选择,即使用3层架构将applet与数据库进行通信,就像我在互联网上找到的那样。现在,我不知道如何使用Servlet作为中间层从数据库中将值检索到applet中。因为,我无法将数据库中的数据导入我的applet。请帮我。提前致谢。!!
答案 0 :(得分:2)
在Applet中编写JDBC时,你确实走错了路。 Applet的源代码对最终用户是公开可见的。恶意最终用户可以对其进行反编译并查看数据库名称/密码和/或对其进行编辑,以更改SQL查询以执行DELETE
或TRUNCATE
或任何其他不良操作。再见数据库。
您需要设计和创建一个“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());
// ...