关闭

客户端与服务器接口的交互。

标签: java
263人阅读 评论(0) 收藏 举报
分类:
DefaultHttpClient httpClient = new DefaultHttpClient();//http://tulogin.erzao.org/tu-login/_____localhost:8080
		HttpPost method = new HttpPost("http://localhost:8080/tu-login/tuloginMethod");

		JSONObject jsonParam = new JSONObject();
		jsonParam.put("phone", phone);
		jsonParam.put("password", password);
		jsonParam.put("requrl", requrl);

		StringEntity entity = new StringEntity(jsonParam.toString(), "utf-8");
		entity.setContentEncoding("UTF-8");
		entity.setContentType("application/json");
		method.setEntity(entity);
		HttpResponse resGet;

上面的代码是设置与服务器连接的,包括连接服务器的方法,以及传输数据的格式,可编码方式等。

下面的代码是处理服务器的返回值的。

try {
			//通过DefaultHttpClient 来获得返回的参数(值)
			resGet = httpClient.execute(method);
			//将返回值设置编码格式,(避免乱码)
			String resData = EntityUtils.toString(resGet.getEntity(),"utf-8");
			//通过net.sf.json.JSONObject 来解析字符串
			JSONObject resJSON = JSONObject.fromObject(resData);
			//把json中的user对象获取,并强转。
			Object userjson = resJSON.get("user");
			String userString = userjson.toString();
			
			//通过com.google.gson.Gson 来处理json 类型的user对象。
			Gson gson = new Gson();
			
			//user就是转换后的对象。

			//在这里,我对com.google.gson.JsonObject有点疑问,为啥这个不能解析返回的字符串呢?
			//这个类有什么作用?
			JsonObject jsonObj = new JsonObject();
			jsonObj.getAsJsonObject(resData);
		
			if("A00000".equals(resJSON.get("code"))){
				User user = gson.fromJson((String) userString, User.class);
				String token = (String)resJSON.get("token");
				securityUtil.addCookieToken(request,response,token,user.getId());
				request.getSession().setAttribute("user", user);
			}
			
			
			if ( !"A00000".equals(resJSON.get("code"))) {
				result = resJSON.get("data");
			}/*else{
			result = securityUtil.getReqURL(request,response);
			}*/
			
			
			resultCode = resJSON.get("code");
		} catch (ClassCastException e) {
			logger.error(e.getMessage());
			resultCode = ResultCode.INTERNAL_ERROR;
			result = e.getMessage();
		}catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

再下面是服务器处理请求的。

@RequestMapping(value = "/tuloginMethod")
	public void login(@RequestBody Map<String, Object> map,
			HttpServletRequest request, HttpServletResponse response) throws UnAuthedException {
		response.setCharacterEncoding("UTF-8");
		String phone = (String) map.get("phone");
		String password = Md5Util.md5((String) map.get("password"));
		ResultCode resultCode = ResultCode.SUCCEED;
		Object result = null;
		User user = null;
		String token = null;
		
		try {
			ParamChecker.notEmpty("phone", phone);
			ParamChecker.notEmpty("password", password);
			
			
			user = UserService.login(request, response, phone, password);
			token = (String) request.getAttribute("token");
		} catch (UnAuthedException e) {
			logger.error(e.getMessage());
			resultCode = e.getResultCode();
			result = e.getMessage();

		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			resultCode = ResultCode.INTERNAL_ERROR;
			result = e.getMessage();
		}
		setResponseMethod(response, resultCode, result, user , token);
	}
对传入的JSON进行解析,并对其进行应有的操作。

并返回值。

下面的代码是最后返回的时候。

 protected void setResponseMethod(HttpServletResponse resp, ResultCode resultCode,
            Object result,User user ,String token , String callback) {
        try {
        	resp.setCharacterEncoding("utf-8");
            PrintWriter out = resp.getWriter();
            Map<String, Object> ret = new LinkedHashMap<String, Object>();
            ret.put("code", resultCode.getCode());
            ret.put("data", result);
            ret.put("user", user);
            ret.put("token", token);
            String responseStr = GSON.toJson(ret);
            out.println(responseStr);
            out.close();
            resp.setCharacterEncoding("utf-8");
            
            
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    }

OK,这样,客户端与服务器进行交互,传入参数到服务器中进行处理,并返回值到客户端进行处理。


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

服务器和客户端的交互方式(Socket,http协议)和各自特点适用范围

1 数据传输方式 1.1  Socket传输的定义和其特点        所谓socket通常也称作"套接字",实现服务器和客户端之间的物理连接,并进行数据传输,主要有UDP和TCP两个协议。So...
  • zmx1026
  • zmx1026
  • 2015-05-21 20:36
  • 1306

服务器、客户端简单交互程序

这是一个简单的TCP服务器/客户端的程序示例。客户端发送两个long型变量到服务器端,服务器端读取这两个long型变量并返回这两个变量的和给客户端。 这是服务器端的示例代码: #include #i...
  • u012796139
  • u012796139
  • 2015-04-10 21:13
  • 895

Android客户端和服务器端数据交互的第四种方法

Android客户端和服务器端数据交互的第四种方法
  • wangshuxuncom
  • wangshuxuncom
  • 2015-01-15 15:29
  • 3996

unity游戏开发之服务器与客户端或页面流转之自定义交互事件

引言:    1,游戏页面与页面的交互 (1)装备背包 (2)装备信息页面      在游戏开发中,2D页面之间,有时候少不了关联性,比如游戏的背包系统,玩家进入背包系统(见上图装...
  • zhetianyun
  • zhetianyun
  • 2014-12-26 10:45
  • 2814

Android 客户端与服务器端进行数据交互(二、登录客户端)

概要Android客户端分为User,HttpUtil,HttpCallbackListener,MainActivity四个部分。User model与服务端的一样,一方面是用于本地用户信息的存储m...
  • u012145166
  • u012145166
  • 2016-05-06 22:54
  • 10075

Android通过get,post方式客户端与服务器端交互实例(慕课网笔记)

来自:http://www.imooc.com/learn/304 一个简单的Android客户端和服务器端传送数据的例子,客户端界面如下: 输入两个字符串name,age点击register...
  • hnyzwtf
  • hnyzwtf
  • 2015-12-29 19:48
  • 1709

走进Java Web开发 ——客户端与服务器的交互原理

在web程序中不太容易搞清楚的就是客户端和服务器。这也是B/S结构的一大特点,C/S结构的客户端和服务器非常明了,没有其他的辅助技术。在B/S中将很多技术都分离出来成为独立的技术,让其变得更加灵活。(...
  • pengzhenjie36
  • pengzhenjie36
  • 2016-09-09 11:18
  • 2257

android客户端与服务端交互的三种方式

android客户端向服务器通信一般有以下选择: 1.传统的java.net.HttpURLConnection类 2.apache的httpClient框架(已纳入android.jar中,可直接使...
  • qq_33336155
  • qq_33336155
  • 2016-09-08 15:46
  • 769

Java中使用socket实现客户端与服务端交互

Socket解释: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取...
  • min996358312
  • min996358312
  • 2017-03-15 17:10
  • 1301

Java Socket 客户端与服务器端的简单交互

一直想了解客户端与服务器之间的底层的一些交互 我刚开始看到关于解析header的一些例子,但是不清楚是客户端呢还是服务器端 后来,我发现,我的想法是有问题的,解析header只是例子的一个体现方式。 ...
  • u010045971
  • u010045971
  • 2015-11-05 10:02
  • 1711
    个人资料
    • 访问:407135次
    • 积分:5288
    • 等级:
    • 排名:第6031名
    • 原创:157篇
    • 转载:103篇
    • 译文:1篇
    • 评论:40条
    最新评论