【问题标题】:Remote API JAVA url does not work GAE远程 API JAVA url 不起作用 GAE
【发布时间】:2013-11-07 19:31:47
【问题描述】:

我已将应用程序部署到 GAE 中。当我尝试将网址设为http://aabbbaaacccc.appspot.com/_ah/remote_api 时。我收到 404 错误页面。我已在 web.xml 文件中添加。我提供了正确的应用程序 ID。它部署。部署成功后,会出现一个对话框,并显示文件未找到以及记事本。

<servlet>
<display-name>Remote API Servlet</display-name>
<servlet-name>RemoteApiServlet</servlet-name>
<servlet-class>com.google.apphosting.utils.remoteapi.RemoteApiServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>RemoteApiServlet</servlet-name>
<url-pattern>/remote_api</url-pattern>
</servlet-mapping>

我需要将我的应用部署到服务器中,并与其他应用启动远程 API,并从其他应用共享实体。

过去 2 天我一直在努力解决这个问题。请帮帮我。

您可以查看以下链接中的错误对话框。

http://i40.tinypic.com/bfgzki.png

谢谢。

【问题讨论】:

    标签: java google-app-engine


    【解决方案1】:

    Appengine 应该可以正常工作。我已经列出了基本项目设置的所有详细信息。请查看并找到您遗漏的内容。

    Servlet 类

    App Engine Java 应用程序使用 Java Servlet API 与网络服务器交互。 在 src/guestbook/ 目录下,创建一个名为 GuestbookServlet.java 的文件,内容如下:

    package guestbook;
    
    import java.io.IOException;
    import javax.servlet.http.*;
    
    public class GuestbookServlet extends HttpServlet {
        @Override
        public void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws IOException {
            resp.setContentType("text/plain");
            resp.getWriter().println("Hello, world");
        }
    }
    

    web.xml 文件

    当 Web 服务器接收到请求时,它会使用称为“Web 应用程序部署描述符”的配置文件来确定调用哪个 servlet 类。该文件名为 web.xml,位于 WAR 中的 war/WEB-INF/ 目录中。 WEB-INF/ 和 web.xml 是 servlet 规范的一部分。

    在目录war/WEB-INF/中,有一个名为web.xml的文件,内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE web-app PUBLIC
     "-//Oracle Corporation//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd">
    
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
        <servlet>
            <servlet-name>guestbook</servlet-name>
            <servlet-class>guestbook.GuestbookServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>guestbook</servlet-name>
            <url-pattern>/guestbook</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
        </welcome-file-list>
    </web-app>
    

    这个 web.xml 文件声明了一个名为 guestbook 的 servlet,并将其映射到 URL 路径 /guestbook。

    appengine-web.xml 文件

    App Engine 需要一个额外的配置文件来确定如何部署和运行应用程序。此文件名为 appengine-web.xml,与 web.xml 一起位于 WEB-INF/ 中。

    在目录war/WEB-INF/中,有一个名为appengine-web.xml的文件,内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <application></application>
        <version>1</version>
        <threadsafe>true</threadsafe>
    </appengine-web-app>
    

    appengine-web.xml 特定于 App Engine,不是 servlet 标准的一部分。您可以在 SDK 中的 appengine-java-sdk/docs/ 目录中找到描述此文件格式的 XML 架构文件。有关此文件的更多信息,请参阅配置应用程序。

    运行项目

    App Engine SDK 包含一个网络服务器应用程序,您可以使用它来测试您的应用程序。

    选择Debug As &gt; Web Application

    测试应用程序

    启动服务器,然后在浏览器中访问服务器的 URL。如果您使用 Eclipse 和 Google Eclipse 插件,则服务器默认使用端口 8888 运行:

    http://localhost:8888/guestbook
    

    如果您使用 dev_appserver 命令启动服务器,则默认端口为 8080: 详情请看以下教程:

    Tutorial 1:

    Tutorial 2:

    Tutorial 3:

    【讨论】:

    • 您的 8888 端口正在被另一个应用程序使用,或者您的应用引擎开发服务器已经在工作。 groups.google.com/forum/#!topic/google-appengine-java/…
    • 它有效。非常感谢。我还需要你的帮助。您能否指导我如何添加远程 api 以将数据实体从一个应用程序复制到另一个应用程序。 abcdefgh.appspot.com/_ah/_remote_api.
    • 好吧,亲爱的..它不是想法的讨论论坛..我无法让你清楚..最好在stackoverflow上发布问题..如果您有一些具体问题....对于数据存储,您可以看到以下内容:developers.google.com/appengine/docs/java/storage
    • 我正在尝试将实体从一个应用程序复制到 GAE 中的另一个应用程序。我需要有远程 api 配置来复制实体。那么如何在 web.xml 中为 java 应用程序配置 Remote API。
    猜你喜欢
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    相关资源
    最近更新 更多