Fel*_*lix 5 google-app-engine android http
我正在尝试从我的机器人到GAE上的服务器发出http post请求.
在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;
}
Run Code Online (Sandbox Code Playgroud)
这是我的相关服务器代码:
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"));
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
编辑
这是我的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>
Run Code Online (Sandbox Code Playgroud)
仔细检查您的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>
Run Code Online (Sandbox Code Playgroud)
查看开发指南,了解更多详情:
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");
归档时间: |
|
查看次数: |
1833 次 |
最近记录: |