我已经用 Java 后端的 GWT + GAE 建立了一个简单的 Web 应用程序(很像教程中的 stockwatcher 示例:http: //www.gwtproject.org/doc/latest/tutorial/clientserver.html)。从 .appspot.com 域提供服务时,它运行良好。
我希望能够从不同的服务器(现在我的 PC 中的本地 Web 服务器)为客户端(GWT)部分提供服务,并且仍然使用 GAE 作为后端。如何才能做到这一点?
尝试的解决方案
我认为这加起来就是做跨服务器 Ajax,我没有找到太多关于如何做到这一点的信息,所以我通过反复试验进行;这是我所做的:
客户端应用程序称为myapp_web,服务器端称为myapp。
我将 GWT 部分复制到本地服务器的目录/webapps/myapp_web 中;它加载得很好。我在/webapps/myapp_web/myapp上遇到 404 错误,所以我推断这是应用程序尝试查找后端的 url。
我在http://developer.yahoo.com/javascript/howto-proxy.html中找到了一个示例 PHP 脚本,它应该用作代理以允许跨服务器调用:
<?php
// PHP Proxy example for Yahoo! Web services.
// Responds to both HTTP GET and POST requests
//
// Author: Jason Levitt
// December 7th, 2005
//
// Allowed hostname (api.local and api.travel are also possible here)
define ('HOSTNAME', 'http://search.yahooapis.com/');
// Get the REST call path from the AJAX application
// Is it a POST or a GET?
$path = ($_POST['yws_path']) ? $_POST['yws_path'] : $_GET['yws_path'];
$url = HOSTNAME.$path;
// Open the Curl session
$session = curl_init($url);
// If it's a POST, put the POST data in the body
if ($_POST['yws_path']) {
$postvars = '';
while ($element = current($_POST)) {
$postvars .= urlencode(key($_POST)).'='.urlencode($element).'&';
next($_POST);
}
curl_setopt ($session, CURLOPT_POST, true);
curl_setopt ($session, CURLOPT_POSTFIELDS, $postvars);
}
// Don't return HTTP headers. Do return the contents of the call
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// Make the call
$xml = curl_exec($session);
// The web service returns XML. Set the Content-Type appropriately
header("Content-Type: text/xml");
echo $xml;
curl_close($session);
?>
我将此脚本复制到/webapps/myapp_web/myapp,文件myapp,没有扩展名,我让 Apache 将其作为 php 处理。我将变量HOSTNAME从 http://search.yahooapis.com/更改为http://myapp_url.appspot.com/myapp_web/myapp。
现在我收到 500 服务器错误,我被卡住了,不知道如何调试它。感谢您的任何帮助,您可以提供。