http-使用get和post方式提交数据
来源:互联网 发布:淘宝节点处罚 编辑:程序博客网 时间:2024/05/19 18:42
注意点:
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 {@Overrideprotected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// 服务器接受统一编码iso-8859-1,然后获取字符串时转化为utf-8String 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}}@Overrideprotected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// doGet(request, response);// 服务器接受统一编码iso-8859-1,然后获取字符串时转化为utf-8String 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() {@Overridepublic void handleMessage(Message msg) {if (msg.what == SUCCESS) {String result = (String) msg.obj;if (result != null) {Toast.makeText(MainActivity.this, result, 1).show();} else {Toast.makeText(MainActivity.this, "登陆失败", 1).show();}}}};@Overrideprotected 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() {@Overridepublic void run() {String result = null;try {result = LoginService.loginByGet(loginName, loginPasswor);} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.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() {@Overridepublic void run() {final String result = LoginService.loginByPost(loginName,loginPasswor);if (result != null) {// 在主线程上运行runOnUiThread(new Runnable() {@Overridepublic 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-8String 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 blocke.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-8conn.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 blocke.printStackTrace();result = "";}return result;}}
- http-使用get和post方式提交数据
- http使用post和get方式提交数据
- 使用get和post方式提交数据
- GET和POST提交数据方式的区别和使用
- GET和POST提交数据方式的区别和使用
- HTTP POST和GET的提交方式
- 使用GET和POST方式将数据提交给服务器
- 数据提交方式:post和get
- Post和Get方式提交数据
- 数据提交方式:post和get
- <Basic>数据提交方式:post和get
- http使用Post方式进行提交数据
- http使用post方式进行提交数据
- 程序使用 HTTP 协议和服务器交互主要是进行数据的提交,通常数据的提交是通过 GET 和 POST 两种方式来完成
- 使用GET和POST提交数据
- Android之使用HTTP协议的Get/Post方式向服务器提交数据
- Android之使用HTTP协议的Get/Post方式向服务器提交数据
- Android之使用HTTP的get,post,HttpClient三种方式向服务器端提交文本数据
- CentOS升级Python到2.7版本
- Hook
- Windows服务系列文章索引
- linux进程间通信の信号
- Linux输入子系统(Input Subsystem)
- http-使用get和post方式提交数据
- Android中Service与Thread的区别
- java 实现解析 xml
- thrift 入门介绍
- 正确理解Linux内存占用过高的问题
- hadoop相关的一篇文章
- linux下的时间问题
- Oracle 日期格式类型和日期函数 java操作数据库
- SQL GROUP BY 语句