0

所以这里是我知道的事情。附上 java 应用程序,有两个 JPanel,一个带有基本图形,一个更详细。这两个图一起托管在一个小程序上。小程序读取包含所有学生调查数据的文件。这一切都托管在 Desire 2 Learn http://www.desire2learn.com/的实例上,称为 courselink https://courselink.uoguelph.ca/shared/login/login.html

所以这一切都有效。没有从注册的 courselink 获得的方面,因此可以显示适当的图表。一个开发 courselink 的人给了我一个 php 程序,它可以获取该信息并将其以 JSON 块的形式返回。

php代码托管在与java应用程序不同的服务器上(托管在courselink上。所以这是我尝试过的:

首先只是抓取从java返回的页面

String name = null;
    URL php = null;
    try {
        php = new URL ("http://coles- vs250.cs.uoguelph.ca/whoami/index.php");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    URLConnection yc = php.openConnection();
    BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
    String inputLine;

    while ((inputLine = in.readLine()) != null) 
        System.out.println(inputLine);
    in.close();
    return name;
}

然后我要解析出字符串,解析出用户名并返回它。当我在课程链接上运行它时,虽然我得到了一个安全错误,而且我对 java 安全错误一无所知。这是错误:

Exception in thread "AWT-EventQueue-2" java.security.AccessControlException: 
access denied ("java.net.SocketPermission" 
"coles-vs250.cs.uoguelph.ca:80"  "connect,resolve")

所以接下来我尝试使用JQuery从 html 页面调用 php,这样字符串将成为正确调查中的变量,然后 java 应用程序可以获取它。经过一番研究,这是我放在一起的。我不了解 JQuery,而且当涉及到这种编程时,我实际上完全不了解我的元素。警报没有显示,我不知道出了什么问题。

<html>
    <head>
        <title>Java Example</title>
        <script type='text/javascript' src='http://code.jquery.com/jquery-1.5.2.js'></script>
        <script type='text/javascript'>
            $(document).ready(function() {
                alert("String from iframe: " + $('#whoami').contents().find('body').html());
                whoami();
            });

            function whoami() {
                $.ajax({
                    type: "GET",
                    data: {},
                    url: "http://coles-vs250.cs.uoguelph.ca/whoami/index.php",
                    success: function(data) {
                        alert("whoami complete: " + data);
                    }
                });
            }
        </script>
    </head>

    <body>
        <p>
            <iframe style="visibility: visible;" id="whoami" src="http://coles-vs250.cs.uoguelph.ca/whoami/index.php"></iframe>--&gt;</p>
        <p>
            <applet width="800" height="1000" code="graphRun.class"></applet>
        </p>
    </body>

</html>

任何和所有的帮助或建议将不胜感激,如果有更多信息我应该得到或忘记,我会尽力而为。

4

3 回答 3

0

我相信您遇到此问题是因为您尝试访问的表单需要身份验证,我假设基于重定向到登录页面。在我看来,你应该有不同的方法。您应该强制验证到达登录页面。我不太了解 Java,但我在 .Net 中使用过屏幕抓取。您应该在登录表单中共享一个会话,然后尝试访问此 URL。您将模拟浏览器访问。很抱歉,我无法帮助您处理 Java 源代码。

于 2013-07-15T19:47:07.380 回答
0

我认为您遇到了该异常,因为小程序的默认安全策略不允许执行套接字操作(在您的情况下连接和解析)。

因此,您应该尝试更改默认策略(但不确定您是否可以做任何您想做的事情)。所以创建一个security.policy

grant {
    permission java.security.AllPermission;
};

请注意,这将授予您的小程序的所有权限。您只能授予套接字权限,但由于它总是有点棘手,我会从这个开始,看看它是否首先解决了您的问题。

然后从命令行指定安全策略:

-J-Djava.security.policy=security.policy

您也可以使用 设置属性System.setProperty()

于 2013-08-27T08:52:14.750 回答
0

更新

您说用户将在其浏览器上登录到服务器。这意味着您需要从该浏览器运行一些代码,该代码将从远程服务器下载内容并将内容保存在本地。我将通过以下方式解决问题:

  1. 创建一个网页并将其托管在服务器上 (example.com/download.html)。
  2. 使用您的 java 程序打开默认浏览器到您的网页:

    URI uri = new URI("http",null, "example.com/download.html","",null); Desktop.getDesktop().browse(uri);

  3. 使用jquery下载远程服务器的内容

  4. 找到一种将内容保存到特定文件位置的方法 - 一种可能性是下载(需要闪存)
  5. 在您的 java 应用程序中有一个 while 循环来检查特定文件的存在。如果它在那里,那么你有内容,如果没有,那么你需要继续等待。

  6. 使用下面的代码将文件转换为 json 对象:

GetJsonFromWeb:

private JSONObject getJSONFromWeb(String param){
    try{
        FileInputStream is = new FileInputStream("file.json");
        BufferedReader br = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
        StringBuilder sb = new StringBuilder();
        int cp;
        while((cp = br.read()) != -1) {
            sb.append((char) cp);
        }
        String jsonText = sb.toString();
        return new JSONObject(jsonText);
    } catch (IOException e) {
        //Handle exception
    } catch (JSONException e) {
        //Handle exception
    }
    return null;
}

然后您可以通过以下方式使用此对象:

JSONObject jsonObj = getJSONFromWeb("Param_value");
try {
    boolean val1 = jsonObj.getBoolean("some_Json_index");
    double val2 = jsonObj.getDouble("some_Json_index2");
    //etc.
于 2013-07-15T16:41:10.510 回答