我遇到了一个签名Java applet的问题,该applet对我们的服务器执行简单的HTTPS请求(使用Java的URL,Connection类)。对于大多数客户来说,一切看起来都不错。但是,我们在公司网络下有几个客户端,它们位于需要身份验证的代理(可能是基于Windows登录的身份验证)之后。对于这些客户,我们经常听到如下反馈:
虽然我们的网络速度为20mbps,但应用程序的运行速度非常慢。 20mbps连接是我们的应用程序完美工作的巨大速度。 所以我的第一个问题具体如下:
1)代理可以分析我们的请求内容,从而影响应用程序的性能。它可能只是一个特定于Java的问题吗?
下一部分是关于Java和Java applet的。 从论坛我知道Java选择在浏览器中配置的正确代理存在问题。有时Java applet无法检测IE中配置的代理,唯一的解决方案是在Java的控制面板中配置它。 话虽如此,下一个问题是:
2)考虑到不允许直接连接企业客户端并且Java控制面板没有正确配置,Java插件可能会选择另一个 - 错误的代理,它最终会访问服务器因而导致性能非常低?
我也尝试使用Apache的HttpClient(http://hc.apache.org/httpcomponents-client-ga/)来检查它在这种环境下的表现。我已经按照Apache教程中的指定配置了客户端,以自动获取JRE的代理:
httpclient = new DefaultHttpClient();
ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner(
httpclient.getConnectionManager().getSchemeRegistry(),
ProxySelector.getDefault());
httpclient.setRoutePlanner(routePlanner);
当我们尝试通过Apache的httpclient执行请求时,我们遇到的是需要身份验证的错误(407)。具体地说407 proxy authentication required. the ISA server requires
authorisation to fulfill the request
所以最后一个问题是关于Apache和Java客户端之间的这种差异。
3)Java Applet如何选择代理? Apache Client的选择逻辑与Java的选择逻辑有何不同?
请分享您可能会发现可能对我的情况有所帮助的任何强烈确认的经验。
提前致谢。
答案 0 :(得分:4)
3)Java Applet如何选择代理?
默认行为:
Applet检查控制面板\ java \ network \ network代理设置
并根据其中的配置使用代理。
设置小程序的系统属性不起作用。
即:
System.setProperty("java.net.useSystemProxies","true");
System.setProperty("http.proxyHost", "1.1.1.1");
System.setProperty("http.proxyPort", "8080");
如果要更改applet的代理选择。
那么你可以使用ProxySelector类。
还请查看此问题how-to-set-http-proxy-in-an-applet您可能会发现它很有用。