从java应用程序(或JQuery)调用php

时间:2013-07-15 16:28:05

标签: java php jquery html accesscontrolexception

以下是我所知道的事情。附带了java应用程序,有两个JPanel,一个带有基本图形,另一个带有更详细的图形。这两个图表一起托管在applet上。 applet读取包含所有学生调查数据的文件。这一切都托管在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>

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

3 个答案:

答案 0 :(得分: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. 找到一种将内容保存到特定文件位置的方法 - 一种可能性是downloadify(需要闪存)
  5. 在您的java应用程序中有一个while循环,用于检查特定文件的存在。如果它在那里你有内容,如果不是,那么你需要继续等待。

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

  7. 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.
    

答案 1 :(得分:0)

我相信你有这个问题因为你想要达到的表格需要身份验证,我认为这是基于重定向到登录页面。 在我的视野中,你应该有一个不同的方法。您应该强制身份验证到达登录页面。 我不太了解Java,但我曾在.Net中使用过屏幕。 您应该在登录表单中共享会话,然后尝试访问此URL。 您将模拟浏览器访问。 对不起,我无法帮助您使用Java源代码。

答案 2 :(得分:0)

我认为您正在获得该异常,因为applet的默认安全策略不允许执行套接字操作(在您的情况下连接并解决)。

因此,您应该尝试更改默认策略(不确定您可以执行任何操作)。 因此,请创建security.policy

grant {
    permission java.security.AllPermission;
};

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

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

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

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