- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在将 Post 请求发送到我快速搜索过的 Tomcat Servlet。当我在 Android 上发出 HttpPost 请求时,我发现我在 servlet 中看到了请求,但那是因为调用了 doGet 方法。任何人都可以向我解释为什么会发生这种情况以及如何修复它以调用 doPost 方法吗?
这里是发出post请求的服务方法:
@Override
protected void onHandleIntent(Intent intent) {
Log.i(TAG, "handling intent");
// get Longitude and Latitude
Bundle bundle = intent.getExtras();
double longitude = bundle.getDouble("longitude");
double latitude = bundle.getDouble("latitude");
// int id = bundle.getInt("id");
long time = System.currentTimeMillis();
// log location in local db
// send location up to db repository (repositories)
JSONObject jObj = new JSONObject();
try {
jObj.put("long", longitude);
jObj.put("lat", latitude);
jObj.put("userId", 1);
jObj.put("time", time);
Log.i(TAG, "JSON object: " + jObj.toString());
} catch (JSONException e) {
e.printStackTrace();
}
try {
StringEntity se = new StringEntity("JSON" + jObj.toString());
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
String url = [http://url/to/servlet/here];
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
post.setEntity(se);
HttpResponse response;
response = httpClient.execute(post);
// check response
if (response != null) {
Log.i(TAG, "Message received");
}
} catch (Exception e) {
e.printStackTrace();
}
}
以及接收请求的 servlet:
public class ReceiveLocation extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Post request received");
response.setContentType("application/json");
PrintWriter out = response.getWriter();
try {
StringBuilder sb = new StringBuilder();
String s;
while ((s = request.getReader().readLine()) != null) {
sb.append(s);
}
System.out.println("sb: " + sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Get request received!!!");
}
}
输出是“收到请求!!!”
编辑
我暂时更改了 doGet 方法,以便跟踪一些我认为可能很重要的事情(我是新手,如果我发布的内容对这种情况没有帮助,请告诉我) .
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Get request received!!!");
Enumeration<String> enumerator = request.getHeaderNames();
while (enumerator.hasMoreElements()) {
System.out.println("header: " + enumerator.nextElement());
}
System.out.println("Method request: " + request.getMethod().toString());
Enumeration<String> attrEnumerator = request.getAttributeNames();
while (attrEnumerator.hasMoreElements()) {
System.out.println("attr:" + attrEnumerator.nextElement());
}
Enumeration<String> paramEnumerator = request.getParameterNames();
while (paramEnumerator.hasMoreElements()) {
System.out.println("param:" + paramEnumerator.nextElement());
}
}
输出:
Get request received!!!
header: host
header: connection
header: user-agent
Method request: GET
Output from Android:
I TreasureHuntActivity: Provider network has been selected.
I TreasureHuntActivity: Init Lat: 30280
I TreasureHuntActivity: Init Long: -97744
I SendLocationIntentService: handling intent
I SendLocationIntentService: JSON object: {"long":0,"time":1329792722150,"lat":0}
I SendLocationIntentService: Method POST
I SendLocationIntentService: Entity java.io.ByteArrayInputStream@4058d760
I SendLocationIntentService: handling intent
I SendLocationIntentService: JSON object: {"long":0,"time":1329792743161,"lat":0}
I SendLocationIntentService: Method POST
I SendLocationIntentService: Entity java.io.ByteArrayInputStream@40594050
最佳答案
您没有使用您的代码执行 http POST,因为您的实体是空的。
Here's在 Android 中执行 http POST 的方法之一的示例
关于java - POST 请求正在调用 doGet 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9355284/
我显然是 Google Apps 脚本的新手,但我在使用 C、PHP 和 Java 进行编码方面有一些经验。由于我们想在我们公司使用 Google Apps Script 创建一个小型 CRM,因此我
我读到 Web 服务器实例化 servlet 一次,然后调用它的 doGet() 和 doPost() 方法为每个对此 servlet 的请求。现在如果有 100对这个 servlet 的同时请求,并
阅读下面的链接,我可以注意到“doGet() 允许添加书签”。 http://www.developersbook.com/servlets/interview-questions/servlets-
Java doGet, doPost方法和文件上传 index.html ?
我正在尝试将 Google 脚本转换为 Web App ,使用 CLASP。doGet(e) 中是否存在“e”对象的类型定义?/doPost(e)我可以在 typescript/clasp 方面使用吗
我正在尝试处理 Google Apps 脚本 doGet(e) 方法中的查询参数。我定义了以下简单的 doGet() 函数,该函数根据参数(或缺少参数)提供不同的 html。 function doG
我有简单的 Srvlet 类,具有以下 Get 方法: protected void doGet(HttpServletRequest request, HttpServletResponse res
这个问题已经有答案了: Servlet returns "HTTP Status 404 The requested resource (/servlet) is not available" (19
我的 HttpServlet 片段: protected void doGet(HttpServletRequest httpServletRequest,
我有一个简单的 servlet,可以将视频文件返回给客户端。我想要做的是将文件从 URL 下载到我的服务器上,然后将新下载的文件发送到客户端。我的问题是 servlet 的入口点位于客户端请求文件的
我需要在方法内部使用response.flushbuffer和selenium。 我的代码 static PrintWriter writer; static int timer = 0; prote
在jsp上提交表单时,我们定义方法类型:- 1.) Get时--->调用servlet的doGet。 2.) 当是Post时--->调用servlet的doPost。 有没有一种彻底的方法可以实现以下
我在尝试通过 Servlet 从 Android 访问 MySQL 时遇到了一些问题。我想做的是通过将一些值传递给 servlet 类来检查事件是否存在于数据库中。如果没有现有记录,则执行数据库插入。
这个问题在这里已经有了答案: doGet and doPost in Servlets (5 个答案) 关闭 6 年前。 我有 2 个参数,User 和 Pass。我想将它们发送到一个 servle
我目前正在使用谷歌脚本创建休假申请表。用户提交表单后,它会向主管发送电子邮件。主管能够批准或拒绝,并能够从电子邮件本身说明拒绝的原因。但是用户会同时收到请求待处理电子邮件和需要信息电子邮件。 func
美好的一天! 我正在阅读 Head First Servlets and JSP,它说 99% 的 servlets 使用 HttpServlet。另外1%是什么?它说在现实世界中,99.9% 的所有
我的主页中有一个 iframe 和一个文本框(用于输入所需的 url),因此当用户输入所需的 URL 时,我将请求的页面加载到 iframe。我正在使用 HttpServlet 通过 doGet 处理
我正在按设定的时间间隔对 Java servlet 进行 AJAX 调用。在 doGet 内部,它查询数据库,将结果放入 JSON 格式,然后返回它们。这在第一次尝试时效果很好(当页面第一次加载或刷新
我在 doGet 方法中创建了单选按钮: ${question.value} Yes
我正在尝试在表单上实现一个 type="button",而不是通过 doPost 方法处理信息,而是使用 doGet 方法处理表单(主要是为了能够正确更新 URL) .此规范使得无法使用 type="
我是一名优秀的程序员,十分优秀!