http-使用get和post方式提交数据
注意点:
1.Get和post这两种提交方式有何不同?
很明显post方式提交多了content-length和content-type这两项,所以post提交是要为这两项设置setRequestProperty属性
处理乱码问题
①客户端发送请求时没有对URL进行编码,我们只要使用URLEncoder.encode(keyValue,"UTF-8")处理即可。
②Tomcat服务器在获取参数时,默认编码不是"UTF-8",一般是"ISO-8859-1",此时要如何处理呢?
主要思路是这样的:先把以"ISO-8859-1"(假设是这种编码,如果不是也无所谓)编码获取的数据转为最原始的二进码数据,然后再对该二进制数据以"UTF-8"格式进行重新编码
1.在一个web项目中创建一个servlet。让android项目访问servlet的路径,返回结果
loginServlet.java
package cn.com.servlet;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//服务器接受统一编码iso-8859-1,然后获取字符串时转化为utf-8
String name = new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8");
String password = request.getParameter("password");
System.out.println("name:"+name);
System.out.println("password:"+password);
if(name.equals("张三")&&password.equals("123")){
//往浏览器写字符串
response.getOutputStream().write("get方式登录成功".getBytes("utf-8")); //写到浏览器的编码是utf-8
}
else{
response.getOutputStream().write("get方式登录失败".getBytes("utf-8")); //写到浏览器的编码是utf-8
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//doGet(request, response);
//服务器接受统一编码iso-8859-1,然后获取字符串时转化为utf-8
String name = new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8");
String password = request.getParameter("password");
System.out.println("name:"+name);
System.out.println("password:"+password);
if(name.equals("张三")&&password.equals("123")){
//往浏览器写字符串
response.getOutputStream().write("post方式登录成功".getBytes("utf-8")); //写到浏览器的编码是utf-8
}
else{
response.getOutputStream().write("post方式登录失败".getBytes("utf-8")); //写到浏览器的编码是utf-8
}
}
}
2.android项目
(1)添加网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>
(2)布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="输入用户名"
android:text="张三"
/>
<EditText
android:id="@+id/password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="输入密码" />
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="get提交"
android:onClick="onClick1"
/>
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="post提交"
android:onClick="onClick2"
/>
</LinearLayout>
MainActivity.java
package com.example.get;
import java.io.UnsupportedEncodingException;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText name,password;
private final int SUCCESS=1;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what==SUCCESS){
String result = (String) msg.obj;
if(result!=null){
).show();
}else{
Toast.makeText(MainActivity.this, "登陆失败", 1).show();
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = (EditText) findViewById(R.id.name);
password = (EditText) findViewById(R.id.password);
}
/**
* get方式提交
* @param view
*/
public void onClick1(View view){
final String loginName = name.getText().toString();
final String loginPasswor = password.getText().toString();
new Thread(){
@Override
public void run() {
String result = null;
try {
result = LoginService.loginByGet(loginName, loginPasswor);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Message msg = new Message();
msg.what=SUCCESS;
msg.obj=result;
handler.sendMessage(msg);
}
}.start();
}
/**
* post方式提交
* @param view
*/
public void onClick2(View view){
final String loginName = name.getText().toString();
final String loginPasswor = password.getText().toString();
new Thread(){
@Override
public void run() {
final String result=LoginService.loginByPost(loginName, loginPasswor);
if(result!=null){
//在主线程上运行
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, result, 1).show();
}
});
}
}
}.start();
}
}
3.业务类
LoginService .java
package com.example.get;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
public class LoginService {
public static String loginByGet(String name,String password) throws UnsupportedEncodingException{
//拼路径
String getpath = "http://10.162.0.171:8080/WebGet/LoginServlet?name="+URLEncoder.encode(name,"utf-8")+"&password="+URLEncoder.encode(password,"utf-8");//提交是得utf-8
String result = null;
int code;
try {
URL url = new URL(getpath);
//根据url发送http请求
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
//发送提交方式
conn.setRequestMethod("GET");
//设置连接时间
conn.setConnectTimeout(5000);
//获取服务器返回码
code = conn.getResponseCode();
if(code==200){
InputStream is = conn.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len=0;
if((len=is.read(buffer))!=-1){
baos.write(buffer, 0, len);
}
is.close();
baos.close();
byte[] b=baos.toByteArray();
String s = new String(b);
result=s;
}else{
System.out.println(code);
result="";
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
result="";
}
return result;
}
public static String loginByPost(String name,String password){
String postpath = "http://10.162.0.171:8080/WebGet/LoginServlet";
String result = null;
int code;
try {
URL url = new URL(postpath);
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(5000);
//name="+name+"&password="+password
//准备数据
String data ="name="+URLEncoder.encode(name, "utf-8")+"&password="+URLEncoder.encode(password, "utf-8");//提交是得utf-8
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", data.length()+"");
//post 方式实际上是浏览器把数据写个服务器
conn.setDoOutput(true);//true 可以写出数据
OutputStream os=conn.getOutputStream();
os.write(data.getBytes());
code = conn.getResponseCode();
if(code==200){
InputStream is = conn.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len=0;
if((len=is.read(buffer))!=-1){
baos.write(buffer, 0, len);
}
is.close();
baos.close();
byte[] b=baos.toByteArray();
String s = new String(b);
result=s;
}else{
System.out.println(code);
result="";
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
result="";
}
return result;
}
}
http-使用get和post方式提交数据的更多相关文章
- Android 采用post方式提交数据到服务器
接着上篇<Android 采用get方式提交数据到服务器>,本文来实现采用post方式提交数据到服务器 首先对比一下get方式和post方式: 修改布局: <LinearLayout ...
- Android(java)学习笔记213:开源框架post和get方式提交数据(qq登录案例)
1.前面提到Http的get/post方式 . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2.Android应用会经常使用http协议进行传输,网上会有很完善 ...
- Android 使用Post方式提交数据(登录)
在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持. 在HTTP通信中使用最多的就是GET和POS ...
- Android 使用Post方式提交数据
在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持. 在HTTP通信中使用最多的就是GET和POS ...
- 苹果微信浏览器不能post方式提交数据问题
form表单中采用post方式提交数据时,在苹果的微信浏览器中无法传递,安卓的可以 如图: 在controller中获取该数据为 null 将表单的提交方式修改为get就能够获取到 现在采用Ajax方 ...
- Android(java)学习笔记156:开源框架post和get方式提交数据(qq登录案例)
1. 前面提到Http的get/post方式 . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2. Android应用会经常使用http协议进行传输,网上会有很 ...
- postman 中post方式提交数据
post方式提交数据时,把参数填写在body中而不是pOST下面的哪一行
- Android 采用get方式提交数据到服务器
首先搭建模拟web 服务器,新建动态web项目,servlet代码如下: package com.wuyudong.web; import java.io.IOException; import ja ...
- JQuery以JSON方式提交数据到服务端
JQuery将Ajax数据请求进行了封装,从而使得该操作实现起来容易许多.以往我们要写很多的代码来实现该功能,现在只需要调用$.ajax()方法,并指明请求的方式.地址.数据类型,以及回调方法等.下面 ...
- easyui form 方式提交数据
http://ldzyz007.iteye.com/blog/2067540 <form id="ff" method="post"> . ...
随机推荐
- linux命令之tee
功能说明:读取标准输入的数据,并将其内容输出成文件.语 法:tee [-ai][--help][--version][文件...]补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设 ...
- C#资源释放
转自:http://www.cnblogs.com/psunny/archive/2009/07/07/1518812.html 深刻理解C#中资源释放 今天我的一个朋友看到我写的那篇<C#中用 ...
- 解决 SVN cleanup 任务中断导致无法 update
解决 SVN cleanup 任务中断导致无法 update 今天在更新 svn 时, TortoiseSVN 一直在提示要进行 cleanup ,而执行 cleanup 时又提示: Cleanup ...
- androidSDK配置环境变量
android的开发人员来说,首先要做的就是环境变量的配置.java是需要配置环境变量的.当然,安卓的环境变量需要我们配置adb的使用,将开发平台的两个工具包配置到环境变量里. 工具/原料 and ...
- oracle表空间相关SQL语句
Oracle 数据库查看表空间的使用情况 SELECT d.tablespace_name, space "SUM_SPACE(MB)", ) "USED_SPACE(M ...
- javascript实例学习之二——类新浪微博的输入框
该案例实现如下效果,具体可见新浪微博网站的微博发布框 实现 以下效果效果1:当光标移入文本框时,文本框上方的文字发生变化,显示剩余可以输入的字数,当光标移出文本框,并且文本框中没有任何输入时,恢复最初 ...
- 《30天自制操作系统》05_day_学习笔记
//bootpack.c 完整代码 #include <stdio.h> void io_hlt(void); void io_cli(void); void io_out8(int po ...
- maven 建立ssh项目
一.新建maven项目,配置ssh框架pom的最低支持 1.新建一个maven项目 依赖于org.springframework/spring-beans/4.1.5.RELEASE 的jar包 Gr ...
- php实用类
<?php class DBDA { public $host="localhost";//服务器地址 public $uid="root";//用户名 ...
- C++之路进阶——hdu2222(Keywords Search)
/*Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...