文档章节

项目ITP(四) javaweb http json 交互 in action

泥瓦匠BYSocket
 泥瓦匠BYSocket
发布于 2014/05/07 20:50
字数 1257
阅读 271
收藏 0

前言

  系列文章:[传送门]

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

           

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

正文 

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

  这次

    我们实现 javaweb http json 交互 in action

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

 

开始吧 

实战 

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

服务端

  资料: 

  《spring》 

 @ResponseBody 

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

  • GET模式下,这里使用了@PathVariable绑定输入参数,非常适合Restful风格。因为隐藏了参数与路径的关系,可以提升网站的安全性,静态化页面,降低恶意攻击风险。

  • POST模式下,使用@RequestBody绑定请求对象,Spring会帮你进行协议转换,将Json、Xml协议转换成你需要的对象。

  • @ResponseBody可以标注任何对象,由Srping完成对象——协议的转换。

 

代码例子:  

复制代码

@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;
    }

复制代码

 

Results 类很简单

 View Code

 

手机端

  资料 :

    1.android + java

    2.http

    3.json

  结构:

   

 

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

 View Code

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

 

你会看到:

    

 

②webservice 工具类 (★★★)

 

HttpClient.java

复制代码

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;
    }    
}

复制代码

 

WebServiceHelper.java

 View Code

 

 WebService.java(用于处理方法)

复制代码

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;
        }
    }
    
}

复制代码

 

③辅助类包

StringUtil.java

 View Code

 


SystemUtil.java

 View Code

 


UIHelper.java

 View Code

 

 

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

实战说事

  1.启动服务端

  2.启动手机端

  3.尝试登陆

你会看到

服务端:

手机端:

 

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

总结

  实战真心学到很多!!

  http

  json

  spring @ResponseBody

感谢及资源共享

    

    

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

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

    知识来源: 《spring in action》

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


© 著作权归作者所有

泥瓦匠BYSocket

泥瓦匠BYSocket

粉丝 946
博文 169
码字总数 219665
作品 4
杭州
程序员
私信 提问
我们的CTO给我提出一个这样的难题不知道怎么解决?

我是个java程序员。在做一个项目的服务端开发,客户端为手机app,使用的http协议传输json数据来实现数据交互业务处理,现在又加入了一个C++的视屏监控客户端,需要我提供手机端的用户信息及位...

颖辉小居
2015/12/05
824
9
mina怎么整合到javaWeb中

我请教一个问题。我在开发一个javaWeb服务器使用了SSH框架客户端是手机APP(基于HTTP协议传递json通信)。是一个用户通过手机报警的系统。有一个视频监控系统是C++开发的可以调用全市的监控。...

颖辉小居
2016/01/10
1K
6
JSON《===》JavaBean的相互转换

 1、JSON的作用和好处     在JavaWeb项目中前后端直接的交互,接口之间的对接等等,基本离不开JSON。     JSON: 全称JavaScript Object Notation(JavaScript 对象表示法)     J...

弹琴不谈情
2018/08/14
0
0
项目ITP(七) javaWeb 整合 Quartz 实现动态调度 并且 持久化

项目ITP(七) javaWeb 整合 Quartz 实现动态调度 并且 持久化 原创地址:http://www.cnblogs.com/Alandre/(泥沙砖瓦浆木匠),需要转载的,保留下! 弟子规 圣人训 首孝弟 次谨信 泛爱众 而亲仁 有...

泥沙砖瓦浆木匠
2014/07/02
894
3
Javaweb和spring和springmvc和maven使用记录

一、java项目使用spring框架 新建一个java项目,名为spring01 在项目新建一个libs文件夹来存放所有的第三方jar 把spring相关的jar拷贝到该目录 然后设置buildpath --> config build path -->...

独钓渔
2016/01/16
197
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
今天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
今天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
今天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.5K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部