繁体   English   中英

如何使android的http发布到Google App Engine服务器?

[英]How to make http post from android to google app engine server?

我正在尝试从我的Android向GAE上的服务器发出http发布请求。

在android方面,似乎发布正常,但是在服务器端,doPost(...)从未被调用。 谁能告诉我为什么?

这是我相关的android代码:

protected Integer doInBackground(View... arg0)
{
    try
    {
        HttpClient httpClient = new DefaultHttpClient();
//      HttpPost httpPost = new HttpPost("http://elf-security.appspot.com");
        HttpPost httpPost = new HttpPost("http://elf-security.appspot.com/gae_hellowordl");
//      HttpPost httpPost = new HttpPost("http://localhost:8888/gae_hellowordl");
        httpPost.addHeader("test", "Success!");

        Log.i(TAG, "Just about to send http request to " + httpPost.getURI());
        HttpResponse httpResponse = httpClient.execute(httpPost);
        Log.i(TAG, "Received http response..");

        Log.i(TAG, httpResponse.toString());
    } catch (ClientProtocolException e) 
    {
        e.printStackTrace();
    } catch (IOException e) 
    {
        e.printStackTrace();
    }

    return null;
}

这是我相关的服务器代码:

public class GAE_HelloWordlServlet extends HttpServlet
{
    private Logger LOG;

    public GAE_HelloWordlServlet()
    {
        LOG = Logger.getLogger("GAE_HelloWordlServlet");
        LOG.info("GAE_HelloWordlServlet()");
    }

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        LOG.info("doGet():  request test header:  " + req.getHeader("test"));
    }

    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        LOG.info("doPost():  request test header:  " + req.getHeader("test"));
    }
}

提前致谢!


编辑

这是我的web.xml文件:

<?xml version="1.0" encoding="utf-8" standalone="no"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>GAE_HelloWordl</servlet-name>
        <servlet-class>gae.helloworld.GAE_HelloWordlServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>GAE_HelloWordl</servlet-name>
        <url-pattern>/*</url-pattern>
<!--        <url-pattern>/gae_hellowordl</url-pattern> -->
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>SystemServiceServlet</servlet-name>
        <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
        <init-param>
            <param-name>services</param-name>
            <param-value/>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>SystemServiceServlet</servlet-name>
        <url-pattern>/_ah/spi/*</url-pattern>
    </servlet-mapping>
</web-app>

仔细检查您的web.xml并确保URL路径正确映射到处理它的servlet:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
    <servlet>
        <servlet-name>helloworld</servlet-name>
        <servlet-class>com.mysite.GAE_HelloWordlServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>helloworld</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

在此处查看开发指南以了解更多详细信息:

Servlet和URL路径

web.xml定义URL路径与处理带有这些路径的请求的servlet之间的映射。 Web服务器使用此配置来标识要处理给定请求的servlet,并调用与该请求方法相对应的类方法(例如,用于HTTP GET请求的doGet()方法)。

……

更新:

  • 情况1:Android模拟器-> Appengine dev_server(都在同一台计算机上运行):

    请参阅以下问答: Android应用程序doPost

  • 情况2:Android真实设备-> Appengine dev_server(都在同一网络上):

    首先,请确保Appengine dev_appserver在网络上可访问(通过使用参数--address = 0.0.0.0启动dev_appserver,有关更多详细信息,请参见此处 )。 其次,在您的Android应用中,更改代码以指向正确的IP地址,例如,如果您的桌面IP为192.168.1.6,请使用HttpPost httpPost = new HttpPost("http://192.168.1.6:8888/gae_hellowordl");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM