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

来源:互联网 发布:品牌 用户画像 大数据 编辑:程序博客网 时间:2024/06/02 01:01

前言

  系列文章:[传送门]

  洗了个澡,准备写篇博客。然后看书了。时间 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/ 他指点

0 0