以下是我所知道的事情。附带了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>--></p>
<p>
<applet width="800" height="1000" code="graphRun.class"></applet>
</p>
</body>
</html>
任何和所有帮助或建议将不胜感激,如果有任何更多信息我应该得到或忘记我会尽我所能。
答案 0 :(得分:0)
<强>更新强>
您说用户将在其浏览器上登录服务器。这意味着您需要从该浏览器运行一些代码,这些代码将从远程服务器下载内容并在本地保存内容。我将通过以下方式解决问题:
使用您的java程序打开网页的默认浏览器:
URI uri = new URI("http",null, "example.com/download.html","",null);
Desktop.getDesktop().browse(uri);
使用jquery下载远程服务器的内容
在您的java应用程序中有一个while循环,用于检查特定文件的存在。如果它在那里你有内容,如果不是,那么你需要继续等待。
使用下面的代码将文件转换为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.
答案 1 :(得分:0)
我相信你有这个问题因为你想要达到的表格需要身份验证,我认为这是基于重定向到登录页面。 在我的视野中,你应该有一个不同的方法。您应该强制身份验证到达登录页面。 我不太了解Java,但我曾在.Net中使用过屏幕。 您应该在登录表单中共享会话,然后尝试访问此URL。 您将模拟浏览器访问。 对不起,我无法帮助您使用Java源代码。
答案 2 :(得分:0)
我认为您正在获得该异常,因为applet的默认安全策略不允许执行套接字操作(在您的情况下连接并解决)。
因此,您应该尝试更改默认策略(不确定您可以执行任何操作)。
因此,请创建security.policy
:
grant {
permission java.security.AllPermission;
};
请注意,这会授予您的小程序的所有权限。你只能授予套接字权限,但因为它总是有点棘手,我会从这开始看它是否先解决你的问题。
然后从命令行指定安全策略:
-J-Djava.security.policy=security.policy
您还可以使用System.setProperty()
设置属性。