【问题标题】:retrieve database value into applet将数据库值检索到小程序中
【发布时间】:2012-03-06 22:51:54
【问题描述】:

从前两天开始,我试图在我的网页中嵌入一个小程序,小程序将检索数据库值并将其显示到组合框中。

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

【问题讨论】:

  • 通常数据库设置为仅接受来自本地主机的连接。这意味着您只能从 servlet(或其他东西,但从服务器)连接到它。 Applet 尝试从客户端的 ip 连接到数据库,但通常被禁止。

标签: java jsp servlets jdbc applet


【解决方案1】:

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

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

假设您选择 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());
// ...

【讨论】:

  • 你能告诉我什么是 Gson 和这个 typetoken,因为我在这里遇到错误。 :(
  • 不要盲目复制粘贴代码。阅读答案文本,包括所有链接。那些蓝色的字不只是装饰。
  • 对不起...对于我的问题..我对此很陌生。这就是为什么我要问这种类型的问题。最后一件事,我怎么能把这个列表用在小程序的组合框中。
  • 这是一个不同的问题,它与数据库和applet-servlet 通信完全无关。只需提出一个新问题,即询问如何在JComboBox 中显示List&lt;String&gt;。所有其他细节都无关紧要。
猜你喜欢
  • 2012-02-03
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多