【问题标题】:GWT with -noserver带 -noserver 的 GWT
【发布时间】:2010-01-18 05:44:36
【问题描述】:

我正在制作一个使用 PHP 连接到 DB2 数据库的 GWT 项目。当我编译项目并将其部署到服务器时(复制 WAR 目录的内容),它工作正常,显然在托管模式下我遇到了 SOP 问题,因为 GWT 在端口 8888 上,而 php 脚本在端口上运行80.

我正在尝试使 -noserver 选项起作用,但我一定遗漏了一些东西。我返回并从命令行创建了基本示例应用程序 (webApplicationCreator -out /home/mike/gwt/sample1) 我编辑了 build.xml 以包含 devmode 的 -noserver 和 -port 80 参数。我希望我的应用程序托管在 localhost/sample1 上,因此我将 -startupUrl 编辑为我要使用的整个 URL:http://localhost/sample1/sample1.html

我编译 (ant),将 sample1.html、sample1.css 从 war 复制到 webserver sample1 目录,以及 (md5).gwt.rpc、clear.cache.gif、sample1.nocache.js 并托管.html 文件从 war/sample1 到 sample1/sample1 目录,如 GWT 文档中所述(未创建 history.html 文件)。 然后我从项目目录(/home/mike/gwt/sample1)运行 ant devmode 我可以访问 sample1.html 页面,但是当我单击按钮将名称发送到服务器时,它会返回

远程过程调用 - 失败

服务器回复: 尝试联系服务器时出错。请检查您的网络连接,然后重试。

我打开了 firebug,它为 http://localhost/sample1/sample1/greet 返回了 404。这就是我卡住的地方..这个文件显然在我的网络服务器上不存在..但是为什么呢?这不是应该由 GWT 编译的东西吗?

谁能帮帮我?谢谢!

【问题讨论】:

    标签: php gwt


    【解决方案1】:

    所以,基本上您已经复制了客户端/服务器应用程序的客户端。当您的 GWT 客户端应用程序尝试向服务器发出远程过程调用 (RPC) 到作为初始示例一部分的问候服务时,它找不到该服务。

    如果您想复制该服务,您需要有一个 Java 应用程序服务器,复制 GreetingService、引用它的 web.xml 以及可能的其他一些东西(我必须检查更多细节)。这听起来不像您真正想要的,因此您要么想要在 PHP 中构建一个响应该 URL 的 GWT-RPC 服务,要么删除 GWT 代码中对问候服务的 RPC 调用的引用。

    使用 PHP 后端,您可能不会使用 GWT-RPC,我猜您更可能使用 JSON 或 XML,如果是这种情况,那么我会选择现在完全删除 RPC 调用。

    这一切有意义吗?随时要求进一步澄清。

    【讨论】:

      【解决方案2】:

      为了解决 SOP 问题,我使用 HttpProxyServlet 通过开发服务器将 HTTP 请求代理到我的网络服务器。

      下载httpProxyPackage.jar,将其复制到WEB-INF/lib/,然后在WEB-INF/web.xml 中进行配置(这是针对StockWatcher 教程,假设您的Web 根目录是包含StockWatcher 目录的文件夹):

      <servlet>
        <servlet-name>jsonStockData</servlet-name> 
        <servlet-class>com.jsos.httpproxy.HttpProxyServlet</servlet-class> 
        <init-param> 
          <param-name>host</param-name> 
          <param-value>http://localhost/StockWatcher/war/stockPrices.php</param-value> 
        </init-param> 
      </servlet>
      
      <servlet-mapping> 
        <servlet-name>jsonStockData</servlet-name>
        <!--
          http://127.0.0.1:8888/stockPrices.php in dev mode
          http://gwt/StockWatcher/war/stockPrices.php in prod mode
        -->
        <url-pattern>/stockPrices.php</url-pattern>
      </servlet-mapping>
      

      然后将您的 JSON URL 重新定义为:

          GWT.getHostPageBaseURL() + "stockPrices.php?q=";
      

      代替:

          GWT.getModuleBaseURL() + "stockPrices.php?q=";
      

      这可能不是最好的方法,但如果它可以让其他人开始......还有另一种方法使用php-cgi,但我没有安装它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-31
        • 1970-01-01
        • 2010-11-30
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多