项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

前言

  系列文章:[传送门]

  洗了个澡,准备写篇博客。然后看书了。时间 3 7 分。我慢慢规律生活,向目标靠近。

           项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

           很喜欢珍惜时间像叮当猫一样

正文 

  慢慢地,二维码实现签到将要落幕了。下篇文章出二维码实现签到

  这次

    我们实现 javaweb http json 交互 in action

  题目很长,但我想让你们看下,给我点意见。

 

开始吧 

实战 

  本次以经典的登录作为案例。登录做的好也是经典。 服务端 和 app端,服务端简略,app端详细介绍...

服务端

  资料: 

  《spring》 

 @ResponseBody 

    将内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流

  • GET模式下,这里使用了@PathVariable绑定输入参数,非常适合Restful风格。因为隐藏了参数与路径的关系,可以提升网站的安全性,静态化页面,降低恶意攻击风险。
  • POST模式下,使用@RequestBody绑定请求对象,Spring会帮你进行协议转换,将Json、Xml协议转换成你需要的对象。
  • @ResponseBody可以标注任何对象,由Srping完成对象——协议的转换。

 

代码例子:  

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!
@RequestMapping(value = "/login")
    public @ResponseBody Results login(@PathVariable String username, @PathVariable String  password) throws IOException 
    {
        System.out.println("userName:"+username);
        System.out.println("password:"+password);
        
        Results result = new Results();

        int resultState = userLoginService.checkUserLoginByPhone(username,password);
        if(resultState == 1)
        {
            result.setResults(1);
            System.out.println("... phone success!!");
        }
        else if(resultState == 0)
        {
            result.setResults(0);
            System.out.println("... phone fail!!");
        }
        return result;
    }
项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

 

Results 类很简单
项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷! View Code

 

手机端

  资料 :

    1.android + java

    2.http

    3.json

  结构:

   项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

 

①itp包下,是程序的主入口,界面很简单。

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷! View Code

#LoginAsyncTask 里面是程序的重要部分

 

你会看到:

    项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

 

②webservice 工具类 (★★★)

 

HttpClient.java

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!
package sedion.wq.itp.webservice;

import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
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.conn.ConnectTimeoutException;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;

public class HttpClient 
{
    
    /**连接超时**/
    private static final String TIME_OUT = "{\"results\":-2}";
    
    /** User-Agent 用户识别 **/
    private static final String User_Agent = "...";

    /**
     * 使用post请求获取数据
     * @param uriAPI 网址
     * @param params 请求参数
     * @return
     * @throws JSONException 
     */
    private static JSONObject post(String uriAPI, List<NameValuePair> params)
    {
        org.apache.http.client.HttpClient httpClient = new DefaultHttpClient();
        JSONObject result = null;
        
        try 
        {
            // 使用post方式
            HttpPost httpRequest = new HttpPost(uriAPI);
            
            if (params !=null && params.size()>0) 
            {
                //设置请求参数和编码格式
                httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            }
            
            //设置请求用户识别
            //httpRequest.addHeader("User-Agent", User_Agent);
            //设置请求超时时间为5s
            httpRequest.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,5000);
            //读取超时时间
            httpRequest.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
            
            //发送请求并获取响应
            HttpResponse httpResponse = httpClient.execute(httpRequest);
            
            
            //根据不同的请求结果代码进行处理数据
            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) 
            {
                //判断请求成功并返回数据
                //解析返回的结果,将返回的信息整成字符串
                String strResult = EntityUtils.toString(httpResponse.getEntity());
                //转化成json对象,便于操作,json对象是类似于hashmap
                result = new JSONObject(strResult);
                
                System.out.println("JSONObject -> result:"+result);
                
                //如果返回的数据时空
                if (result.optString("results").equals("null")) 
                {
                    result = null;                            
                }
                
            }
            else
            {
                //请求失败
                Log.e("请求失败", String.valueOf(httpResponse.getStatusLine().getStatusCode()));
                result = null;
            }
        }
        catch(ConnectTimeoutException cException)
        {
            try 
            {
                result = new JSONObject(TIME_OUT);
            } 
            catch (Exception e) 
            {
                Log.e("webservice json 转化错误", e.toString());
            }
        }
        catch (Exception e)
        {
            Log.e("post Error", e.toString());
            e.printStackTrace();
            result = null;
        }
        finally
        {
            try 
            {
                httpClient.getConnectionManager().shutdown();
            } 
            catch (Exception e2)
            {
                Log.e("关闭连接失败", e2.toString());
            }
        }
        return result;
    }
    
    /**
     * 使用post请求获取数据
     * @param uriAPI 网址
     * @param params 请求参数
     * @return
     */
    public static JSONObject post(String uri, String method, List<NameValuePair> params) 
    {
        return post(uri + method, params);
    }
    
    /**
     * 使用get请求获取数据
     * @param uriAPI  网址
     * @return
     */
    public static JSONObject get(String uriAPI,HttpParams params)
    {
        try 
        {
            //实例化get请求
            HttpGet httpRequest  = new HttpGet(uriAPI);
            if (params !=null)
            {
                //设置参数
                httpRequest.setParams(params);
            }
            //执行
            HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
            if (httpResponse.getStatusLine().getStatusCode() == 200)
            {
                String strResult = EntityUtils.toString(httpResponse.getEntity());
                JSONObject result = new JSONObject(strResult);
                System.out.println("result:"+result);
                
                return result;
            } 
            else
            {
                return null;
            }
        } 
        catch (Exception e) 
        {
            Log.e("get Error", e.toString());
            return null;
        }
    }
    
    
    /** post 访问
     * @param url
     * @param reqEntity
     * @return
     */
    public static JSONObject post(String url ,MultipartEntity reqEntity )
    {
        JSONObject result  = null;
        HttpParams parms = new BasicHttpParams();
        parms.setParameter("charset", HTTP.UTF_8);
        org.apache.http.client.HttpClient client = new DefaultHttpClient(parms);
        try 
        {
            HttpPost httpPost = new HttpPost(url);
            httpPost.addHeader("Charsert", HTTP.UTF_8);
            if (reqEntity != null) 
            {
                //添加参数
                httpPost.setEntity(reqEntity);
            }
            HttpResponse response = client.execute(httpPost);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
            {
                HttpEntity entity = response.getEntity();
                String respnseString = EntityUtils.toString(entity);
                result = new JSONObject(respnseString);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }    
        finally
        {
            try 
            {
                //关闭连接
                client.getConnectionManager().shutdown();
            } 
            catch (Exception e2)
            {
                e2.printStackTrace();
            }
        }
        return result;
    }    
}
项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

 

WebServiceHelper.java

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷! View Code

 

 WebService.java(用于处理方法)

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!
package sedion.wq.itp.webservice;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;

import android.util.Log;

public class WebService extends WebServiceHelper
{    
    /**
     * 用户登陆,登陆成功,返回用户的编号,用户名或密码错误,返回0,系统错误,返回-1,用户注册未审核,返回-3
     * @param userName
     * @param password
     * @return
     */
    public static int login(String userName,String password)
    {
        try 
        {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            
            params.add(new BasicNameValuePair("username", userName));
            params.add(new BasicNameValuePair("password", password));
            
            JSONObject result =  post(URL, LOGIN, params);
            
            System.out.println("result:"+result);
            
            if (result!=null) 
            {
                return result.optInt(RESULTS);
            }
            else 
            {
                return ERROR;
            }
        } 
        catch (Exception e) 
        {
            Log.e("login failure", e.toString());
            return ERROR;
        }
    }
    
}
项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

 

③辅助类包

StringUtil.java

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷! View Code

 


SystemUtil.java

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷! View Code

 


UIHelper.java

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷! View Code

 

 

终于写完代码了,下面我们试试咯!

实战说事

  1.启动服务端

  2.启动手机端

  3.尝试登陆

你会看到

服务端:

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

手机端:

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

 

就ok了,如果你看到这里,谢谢你。点个赞哦!!

总结

  实战真心学到很多!!

  http

  json

  spring @ResponseBody

感谢及资源共享

    项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

    项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

    路上走来一步一个脚印,希望大家和我一起。

    感谢读者!很喜欢你们给我的支持。如果支持,点个赞。

    知识来源: 《spring in action》

          http://www.cnblogs.com/Codenewbie/ 他指点

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!,布布扣,bubuko.com

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

上一篇:iOS Foundation 框架基类


下一篇:android Toasts