Java Web服务器向Android客户端返回数据(服务器端)
来源:互联网 发布:神之浩劫ps4港服网络 编辑:程序博客网 时间:2024/05/21 02:51
结合我之前的文章 Android Java Web实现登录注册(一)——客户端点击打开链接
Android Java Web实现登录注册(二)——服务器端点击打开链接
Android客户端通过post方法调用web服务器的Servlet,post方法包含请求信息request和回答信息response,在服务器端Servlet的post方法中更新response,以达到向客户端返回信息的效果。
以下代码为客户端传来用户ID,服务器端返回用户信息(ID,用户名,密码)的示例,(服务器端)使用到 net.sf.json jar包中所有的.jar文件进行数据处理和传递,下载地址点击打开链接
UserInfoServlet.java(服务器端)
public class UserInfoServlet extends HttpServlet { private static final long serialVersionUID = 1L; public UserInfoServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); response.getWriter().append("Served at: ").append(request.getContextPath()); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 输出流 PrintWriter out = response.getWriter(); // 设置编码形式 request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); // 获取传入的数据 String id = request.getParameter("id"); System.out.println("UserInfoServlet: id = " + id); ArrayList<User> user_list = new ArrayList<User>(new UserService().getInfo(id)); if(user_list.size() == 0){ out.print("NO_SUCH_USER"); }else{ JSONObject json = new JSONObject(); JSONArray jarray_u = new JSONArray(); try { for(User user : user_list) { JSONObject user1 = new JSONObject(); user1.put("id", user.getId()); //解决中文乱码问题,服务器端加密,客户端解密 user1.put("username", URLEncoder.encode(user.getUsername(), "utf-8")); user1.put("password", user.getPassword());jarray_u.add(user1); } json.put("users",jarray_u); } catch (JSONException e) { e.printStackTrace(); } out.print(json.toString()); System.out.println("UserInfoServlet:" + json.toString()); } out.flush(); out.close(); }}
UserService.java(节选,服务器端)
//根据id获取用户用户名、密码 public ArrayList<User> getInfo(String id) { // 创建User对象数组 ArrayList<User> list= null; list = new ArrayList <User>(); // SQL 语句:根据id查询 String sql = "select * from user_list where id = "+ id;try {// 获得数据库连接Connection con = DBManager.getConnection();// 获得语句对象preparedStatement = con.prepareStatement(sql);// 执行语句resultSet = preparedStatement.executeQuery();// 获取下一条记录while (resultSet.next()){System.out.println("UserService getInfo found");User user = new User();user.setId(resultSet.getString("id"));user.setUsername(resultSet.getString("username"));user.setPassword(resultSet.getString("password"));list.add(user);}// 关闭结果resultSet.close();// 释放语句对象preparedStatement.close();// 关闭数据库连接con.close();} catch (SQLException e) {e.printStackTrace();} return list; }
启动Thread调用服务器端方法(节选,客户端)
// 访问数据库,通过id获取用户信息 public void getUserInfo(final String id) { // 新建一个用于网络连接的线程,获取用户详细信息Thread Log.i("tag", "getUserInfo"); new Thread() { @Override public void run() { // Sevice传回Long String responseMsg = "FAIL"; // 要发送的数据 List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("id", id)); responseMsg = UserInfoPostService.send(params); Log.i("tag", "MainAcitivity responseMsg : " + responseMsg); // 准备发送消息 Message msg = handler.obtainMessage(); // 设置消息默认值 msg.what = 100; if (responseMsg.equals("NO_SUCH_USER")) { msg.obj = "用户不存在"; } else if (responseMsg.equals("FAIL")) { msg.obj = "连接服务器失败"; } else { // 解析JSON数据,存入本地数据库 try{ JSONObject jsonobject = new JSONObject(responseMsg.toString()); JSONArray ja_g = jsonobject.getJSONArray("users"); for (int i = 0; i < ja_g.length(); i++) { JSONObject jsonobject2 = ja_g.getJSONObject(i); UserItem user = new UserItem(jsonobject2.getString("id"), jsonobject2.getString("username").toString(), jsonobject2.getString("password").toString()); Message msg1 = handler.obtainMessage(); msg1.what = 333; msg1.obj = user; handler.sendMessage(msg1); } }catch(JSONException e){ e.printStackTrace(); } } handler.sendMessage(msg); } }.start(); }
handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 333) {//得到详细用户信息 username = ((UserItem) msg.obj).getUsername(); Log.i("tag", "username: " + username); } else {// 提示信息 //Toast.makeText(getApplicationContext(),(String)msg.obj,Toast.LENGTH_SHORT).show(); } } };
MyHttpPost.java (客户端)
和之前的代码相比,加上了解密的过程,解决中文乱码问题
public class MyHttpPost { // 服务器地址 private static String SERVER = "http://123.207.3.202:8080"; // 项目地址 private static String PROJECT = "/SeeTogetherServer/"; // 请求超时 private static final int REQUEST_TIMEOUT = 0; // 读取超时 private static final int SO_TIMEOUT = 0; // 通过 POST 方式获取HTTP服务器数据 public static String executeHttpPost(String servlet, List<NameValuePair> params) { String baseURL = SERVER + PROJECT + servlet; String responseMsg = "FAILED"; try { //连接到服务器端相应的Servlet HttpPost request = new HttpPost(baseURL); //request.addHeader("Content-Type", "application/json; charset=utf-8"); request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); BasicHttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, REQUEST_TIMEOUT); HttpConnectionParams.setSoTimeout(httpParams, SO_TIMEOUT); HttpClient client = new DefaultHttpClient(httpParams); //client.getParams().setParameter("http.protocol.content-charset", "UTF-8"); HttpResponse response = client.execute(request); if(response.getStatusLine().getStatusCode()==200)//是否成功收取信息 responseMsg = EntityUtils.toString(response.getEntity(), HTTP.UTF_8); } catch (Exception e) { e.printStackTrace(); } Log.i("tag", "server" + SERVER); try {//解密 Log.i("tag", "1 HttpPost: responseMsg = " + URLDecoder.decode(responseMsg,"utf-8")); return URLDecoder.decode(responseMsg,"utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } Log.i("tag", "2 HttpPost: responseMsg = " + responseMsg); return responseMsg; }}
0 0
- Java Web服务器向Android客户端返回数据(服务器端)
- Android向Web服务器发送Post请求并返回数据
- Android向Web服务器发送Post请求并返回数据
- Go语言(服务器开发):客户端向服务器发送数据并接收返回数据
- Android中从服务器端向客户端传数据[json]
- java客户端向服务器发送数据
- Android客户端处理服务器端返回的Json格式数据
- android客户端+JAVA WEB服务器实现json数据解析
- Android客户端解析服务器端WebService返回来的JSON数据(有源码,调试成功)
- Java WEB 向客户端返回http状态302
- Servlet向客户端返回数据
- Android客户端通过GET和POST向服务器发送数据
- Android客户端向Python服务器以POST方式传输数据
- 【web】HTTP状态返回码介绍,客户端请求服务器端,服务器返回状态码的含义介绍整理。
- Android客户端连接服务器端,向服务器端发送请求HttpURLConnection
- Android客户端连接服务器端,向服务器端发送请求HttpURLConnection
- Android客户端连接服务器端,向服务器端发送请求HttpURLConnection
- java服务器向flex客户端一对一推送数据
- mybatis增删改查封装
- ★leetcode04_Median of Two Sorted Arrays
- 哈夫曼树和哈夫曼编码
- poj TEX Quotes
- Android 属性动画使用(三)
- Java Web服务器向Android客户端返回数据(服务器端)
- 我讽刺中医把每个养生的都化成了神仙
- Struts1开发简介
- git stash的简单操作
- ImageMagick被爆高危漏洞
- 【内核笔记1】搭建驱动开发环境
- 数组,List,Map学习笔记
- 【opencv练习10 - 基础绘制】
- Http协议简介