Android HTTP实例 使用GET方法和POST方法发送请求

Web程序:使用GET和POST方法发送请求

  首先利用MyEclispe+Tomcat写好一个Web程序,实现的功能就是提交用户信息:用户名和年龄,使用GET和POST两种提交方式。

  用浏览器打开:

  不管以哪一种方式,提交以后显示如下页面,将提交的信息再显示出来。

  关键代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
This is 圣骑士Wind's page. <br>
<p>
以GET方法发送:<br>
<form action="servlet/WelcomeUserServlet" method="get">
Username: <input type="text" name="username" value="">
Age: <input type="text" name="age" value="">
<input type="submit" value="Submit">
</form>
</p>
<p>
以POST方法发送:<br>
<form action="servlet/WelcomeUserServlet" method="post">
Username: <input type="text" name="username" value="">
Age: <input type="text" name="age" value="">
<input type="submit" value="Submit">
</form>
</p>
</body>
</html>

index.jsp

  第二个页面显示结果:

package com.shengqishiwind;

import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class WelcomeUserServlet extends HttpServlet
{
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
process(request, response);
} /**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
process(request, response);
} private void process(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String username = request.getParameter("username");
String age = request.getParameter("age"); response.setContentType("text/html");
PrintWriter out = response.getWriter(); out.println("<html><head><title>Welcome!</title></head>");
out.println("<body> Welcome my dear friend!<br>");
out.println("Your name is: " + username + "<br>");
out.println("And your age is: " + age + "</body></html>"); out.flush();
out.close(); } }

WelcomeUserServlet

Android程序:使用GET方法和POST方法发送请求

  上面是用浏览器访问页面并提交数据,如果想在Android客户端提交,服务器端的代码是不用变的,只要写好客户端代码即可:

  首先要在manifest中加上访问网络的权限:

<manifest ... >
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>

  布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Username:" /> <EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" /> <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="User Age:" /> <EditText
android:id="@+id/age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number" /> <Button
android:id="@+id/submit_get"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Submit using GET" /> <Button
android:id="@+id/submit_post"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Submit using POST" /> <TextView
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#0000FF"
android:textSize="14sp">
</TextView> </LinearLayout>

activity_http_demo2.xml

主要Activity代码如下:

package com.example.httpdemo2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair; import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView; public class HttpDemo2Activity extends Activity
{
private String TAG = "http";
private EditText mNameText = null;
private EditText mAgeText = null; private Button getButton = null;
private Button postButton = null; private TextView mResult = null; // 基本地址:服务器ip地址:端口号/Web项目逻辑地址+目标页面(Servlet)的url-pattern
private String baseURL = "http://192.168.11.6:8080/HelloWeb/servlet/WelcomeUserServlet"; @Override
protected void onCreate(Bundle savedInstanceState)
{
Log.i(TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_http_demo2); mNameText = (EditText) findViewById(R.id.name);
mAgeText = (EditText) findViewById(R.id.age);
mResult = (TextView) findViewById(R.id.result); getButton = (Button) findViewById(R.id.submit_get);
getButton.setOnClickListener(mGetClickListener);
postButton = (Button) findViewById(R.id.submit_post);
postButton.setOnClickListener(mPostClickListener);
} private OnClickListener mGetClickListener = new View.OnClickListener()
{ @Override
public void onClick(View v)
{
Log.i(TAG, "GET request");
// 先获取用户名和年龄
String name = mNameText.getText().toString();
String age = mAgeText.getText().toString(); // 使用GET方法发送请求,需要把参数加在URL后面,用?连接,参数之间用&分隔
String url = baseURL + "?username=" + name + "&age=" + age; // 生成请求对象
HttpGet httpGet = new HttpGet(url);
HttpClient httpClient = new DefaultHttpClient(); // 发送请求
try
{ HttpResponse response = httpClient.execute(httpGet); // 显示响应
showResponseResult(response);// 一个私有方法,将响应结果显示出来 }
catch (Exception e)
{
e.printStackTrace();
} }
}; private OnClickListener mPostClickListener = new View.OnClickListener()
{ @Override
public void onClick(View v)
{
Log.i(TAG, "POST request");
// 先获取用户名和年龄
String name = mNameText.getText().toString();
String age = mAgeText.getText().toString(); NameValuePair pair1 = new BasicNameValuePair("username", name);
NameValuePair pair2 = new BasicNameValuePair("age", age); List<NameValuePair> pairList = new ArrayList<NameValuePair>();
pairList.add(pair1);
pairList.add(pair2); try
{
HttpEntity requestHttpEntity = new UrlEncodedFormEntity(
pairList);
// URL使用基本URL即可,其中不需要加参数
HttpPost httpPost = new HttpPost(baseURL);
// 将请求体内容加入请求中
httpPost.setEntity(requestHttpEntity);
// 需要客户端对象来发送请求
HttpClient httpClient = new DefaultHttpClient();
// 发送请求
HttpResponse response = httpClient.execute(httpPost);
// 显示响应
showResponseResult(response);
}
catch (Exception e)
{
e.printStackTrace();
} }
}; /**
* 显示响应结果到命令行和TextView
* @param response
*/
private void showResponseResult(HttpResponse response)
{
if (null == response)
{
return;
} HttpEntity httpEntity = response.getEntity();
try
{
InputStream inputStream = httpEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(
inputStream));
String result = "";
String line = "";
while (null != (line = reader.readLine()))
{
result += line; } System.out.println(result);
mResult.setText("Response Content from server: " + result);
}
catch (Exception e)
{
e.printStackTrace();
} } }

  可以从中对比GET方法和POST方法的区别:

  GET方法需要用?将参数连接在URL后面,各个参数之间用&连接。

  POST方法发送请求时,仍然使用基本的URL,将参数信息放在请求实体中发送。

  关于这点的讨论也可以查看本博客其他文章:

  http://www.cnblogs.com/mengdd/archive/2013/05/26/3099776.html

  http://www.cnblogs.com/mengdd/archive/2013/06/12/3132702.html

  

  程序运行结果如下:

参考资料

  Android开发视频教程HTTP操作。——http://www.marsdroid.org

  Android Reference: package org.apache.http:

  http://developer.android.com/reference/org/apache/http/package-summary.html

  之前文章中,关于GET和POST的更多讨论:

  http://www.cnblogs.com/mengdd/archive/2013/05/26/3099776.html

  http://www.cnblogs.com/mengdd/archive/2013/06/12/3132702.html

Android HTTP实例 使用GET方法和POST方法发送请求的更多相关文章

  1. Android中Looper的quit方法和quitSafely方法

    Looper是通过调用loop方法驱动着消息循环的进行: 从MessageQueue中堵塞式地取出一个消息.然后让Handler处理该消息,周而复始.loop方法是个死循环方法. 那怎样终止消息循环呢 ...

  2. Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机

    1.今天在做数据库升级的时候,遇到一个问题,就是onCreate方法和onUpgrade方法的执行时机的问题,这个当时在操作的时候,没有弄清楚,很是迷糊,后来看了相关的博客由于转发受限所以copy了一 ...

  3. Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机--(转)

    原文:http://blog.csdn.net/jiangwei0910410003/article/details/46536329 今天在做数据库升级的时候,遇到一个问题,就是onCreate方法 ...

  4. virtual方法和abstract方法

    在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别.二者都牵涉到在派生类中与override的配合使用. 一.Virtual方法(虚方法) virtual ...

  5. JavaScript indexOf() 方法和 lastIndexOf() 方法

    一,定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索 ...

  6. wait方法和sleep方法的区别

    一.概念.原理.区别 Java中的多线程是一种抢占式的机制而不是分时机制.线程主要有以下几种状态:可运行,运行,阻塞,死亡.抢占式机制指的是有多个线程处于可运行状态,但是只有一个线程在运行.      ...

  7. M方法和D方法的区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  8. 详解equals()方法和hashCode()方法

    前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.equals()和hashCode()都不是final方 ...

  9. JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别

    JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别   关于获取类的字段有两种方式:getFields()和getDeclaredFields().我们先来 ...

随机推荐

  1. ajax检查用户名是否存在

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.c ...

  2. 如何使用Jedis操作Redis消息队列

    资源链接 Jedis的jar包 Commons-io的jar包 使用方法 代码样例如下,使用前,注意打开redis的server程序. 代码样例 package RedisExample; impor ...

  3. 基于HT for Web 3D呈现Box2DJS物理引擎

    上篇我们基于HT for Web呈现了A* Search Algorithm的3D寻路效果,这篇我们将采用HT for Web 3D来呈现Box2DJS物理引擎的碰撞效果,同上篇其实Box2DJS只是 ...

  4. C#简单问题,不简单的原理:不能局部定义自定义类型(不含匿名类型)

    今天在进行代码测试时发现,尝试在一个方法中定义一个委托,注意是定义一个委托,而不是声明一个委托变量,在编写的时候没有报错,VS也能智能提示,但在编译时却报语法不完整,缺少方括号,但实际查询并没有缺少, ...

  5. Maven提高篇系列之(五)——处理依赖冲突

    这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...

  6. C#解压缩文件

    代码: #region 解压 /// <summary> /// 解压 /// </summary> public void UnZip(string zipPath, str ...

  7. 'display' VS 'visibility'

    常用的display属性值: none此元素不会被显示并且不占用空间: block此元素显示为块级元素,此元素前后会带有换行符: inline默认,此元素会被显示为内联元素,元素前后没有换行符: in ...

  8. C#操作 word代码

    #region 读取word /// <summary> /// 读取word所有文字内容(不包含表格) /// </summary> /// <returns>w ...

  9. SQL Server XML转Table

    前言 在SQL Server中有时候我们需要传人一个Table过去,然后可以在存储过程中批量更新,批量的获取相应数据. 但存储过程的参数是固定,所以这里我们可以变通的传人xml类型的参数,然后在存储过 ...

  10. Java的堆(Heap)和栈(Stack)的区别

    Java中的堆(Heap)是一个运行时数据区,用来存放类的对象:栈(Stack)主要存放基本的数据类型(int.char.double等8种基本数据类型)和对象句柄. 例1 int a=5; int ...