zoukankan      html  css  js  c++  java
  • http-使用get和post方式提交数据

    注意点:

      1.Getpost这两种提交方式有何不同?



    很明显post方式提交多了content-lengthcontent-type这两项,所以post提交是要为这两项设置setRequestProperty属性


    处理乱码问题

    ①客户端发送请求时没有对URL进行编码,我们只要使用URLEncoder.encodekeyValue,"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){

    Toast.makeText(MainActivity.this, result, 1).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;

    }

     

    }





  • 相关阅读:
    Auto Mapper01
    一个ActionResult中定位到两个视图—<团委项目>
    网站根目录的问题
    数据库基础和断点调试
    linux 环境下jmeter+ant+jenkins
    Postman 下载和使用
    用ExtentReports美化你的测试报告
    extentreports报告插件与testng集成
    SourceTree使用图解
    charles4.2下载与破解方法以及配置https
  • 原文地址:https://www.cnblogs.com/james1207/p/3400452.html
Copyright © 2011-2022 走看看