——热爱开源,乐于分享

Android服务器搭建——Jsp+Servlet,返回Json到Android客户端

这几天心血来潮,想搭建一个简单的Android服务器端,用于客户端返回Json数据,就花了2天的时间补了一下JavaWeb方面的知识,然后网上看了几篇技术博客关于Android服务器怎么搭建的,自己就尝试搞一下,弄出来了,分享一下个人的实现方法,详细记录下来以备以后回顾。

1.服务器搭建:服务器搭建采用的是Jsp+Servlet框架,个人感觉,如果是仅仅的搭建简单的用于返回Json数据的服务器,Servlet超级方便;

2.Android客户端:客户端获取刚才搭建的服务器上的Json数据,采用了Android-Async-Http网络请求框架;

3.真机测试:主要是要注意Android真机测试访问localhost需要注意的地方。

下面正式开始:

一、搭建服务器

为了方便,服务器搭建采用Myeclipse,Tomcat7
1.Myeclipse:到网上直接下载一个exe安装文件进行安装即可;
2.Tomcat7:到Apache官网下载http://tomcat.apache.org/download-70.cgi,
Android服务器搭建——Jsp+Servlet,返回Json到Android客户端_第1张图片

并直接安装,安装成功后简单测试一下是否能够运行:
Android服务器搭建——Jsp+Servlet,返回Json到Android客户端_第2张图片
Android服务器搭建——Jsp+Servlet,返回Json到Android客户端_第3张图片
3.将Tomcat7部署到Myeclipse中
打开Myeclipse,进入“Window——preference”,然后输入“Tomcat”——点击Tomcat7.x——选择你刚才Tomcat7的安装路径
Android服务器搭建——Jsp+Servlet,返回Json到Android客户端_第4张图片

4.新建一个WebProject

(1)导入相关jar包。导入JavaWeb所需要的处理json所需要的jar包,(因为在服务器端需要对json的处理操作),并Build Path即可。
Android服务器搭建——Jsp+Servlet,返回Json到Android客户端_第5张图片
(2)构建相关类。
Android服务器搭建——Jsp+Servlet,返回Json到Android客户端_第6张图片

User.Java就是一个数据模型:

package com.csdn.bean;import java.util.Date;public class User {    private Integer id;    private String name;    private String pass;    private Date regDate;    private int age;    public User() {        super();        // TODO Auto-generated constructor stub    }    public User(Integer id, String name, String pass, Date regDate, int age) {        super();        this.id = id;        this.name = name;        this.pass = pass;        this.regDate = regDate;        this.age = age;    }    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPass() {        return pass;    }    public void setPass(String pass) {        this.pass = pass;    }    public Date getRegDate() {        return regDate;    }    public void setRegDate(Date regDate) {        this.regDate = regDate;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}

UserDao.java,提供一个接口:

package com.csdn.dao;import java.util.List;import com.csdn.bean.User;public interface UserDao {    List findAll();}

UserDaoImpl.java,实现刚才的接口:

package com.csdn.dao.impl;import java.util.ArrayList;import java.util.Date;import java.util.List;import com.csdn.bean.User;import com.csdn.dao.UserDao;public class UserDaoImpl implements UserDao{    @Override    public List findAll() {        // TODO Auto-generated method stub        List users=new ArrayList();        //模拟数据,或者这里的数据可以来自数据库!!!!!        for(int i=0;i<10;i++){            User user=new User(i, "admin"+i, "123"+i, new Date(System.currentTimeMillis()), i+20);            users.add(user);        }        return users;    }}

JsonServlet.java,编写json数据(核心):

package com.csdn.servlet;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONArray;import com.csdn.bean.User;import com.csdn.dao.UserDao;import com.csdn.dao.impl.UserDaoImpl;public class JsonServlet extends HttpServlet{    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {    UserDao daoImpl=new UserDaoImpl();    List entities=daoImpl.findAll();        JSONArray jsonArray=JSONArray.fromObject(entities);        resp.setContentType("application/json");        //resp.getWriter().write(jsonArray.toString());        resp.getWriter().println(jsonArray.toString());        resp.getWriter().close();    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        doGet(req, resp);    }}

(3)配置Servlet
都知道,要使用Servlet还需要配置web.xml
Android服务器搭建——Jsp+Servlet,返回Json到Android客户端_第7张图片
(3)把项目部署到Tomcat中,并启动Tomcat
Android服务器搭建——Jsp+Servlet,返回Json到Android客户端_第8张图片
(4)测试运行
打开一个浏览器,不要用myeclipse的web browser!!!,输入http://localhost:8080/JsonServer/JsonServlet进行访问,可以看到json数据了,说明服务器搭建成功。接下来客户端的操作就是很简单了,和一般的Android访问网络获取json数据就是完全一样的了:
Android服务器搭建——Jsp+Servlet,返回Json到Android客户端_第9张图片

二、Android客户端获取刚才搭建的服务器的json数据并用真机测试

注意事项:
1.因为用到了Android-Async-Http网络请求框架,所以最好使用eclipse,而不要使用AndroidStudio,因为AndroidStudio取消了Apache的http,会报错的。
2.在用真机测试的时候,需要将URL地址改为你的电脑的IP地址,而不再使用localhost,我的使用”http://192.168.0.104:8080/JsonServer/JsonServlet“这个地址;
3.关闭电脑的防火墙,否则访问不到;
4.手机和电脑最好连接在同一个网络内,WIFI和局域网都行;
5.记得添加网络权限。

 <uses-permission android:name="android.permission.INTERNET"/>

6.导入Android-Async-Http的jar包:
Android服务器搭建——Jsp+Servlet,返回Json到Android客户端_第10张图片

很简单,直接上代码:

package com.example.jsonserverclient;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import org.apache.http.Header;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import com.loopj.android.http.AsyncHttpClient;import com.loopj.android.http.JsonHttpResponseHandler;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends Activity {    private ListView listView;    private List pass;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        pass=new ArrayList();        listView =  (ListView) findViewById(R.id.listView);        initData();        listView.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {                // TODO Auto-generated method stub                // Toast.makeText(getApplicationContext(), "你点击了第"+(position+1)+"个条目", Toast.LENGTH_LONG).show();                ListView lv=(ListView) parent;                String str=lv.getItemAtPosition(position)+"";//返回的直接就是item的内容!!!!!!!!!!                 String password=pass.get(position);                Toast.makeText(getApplicationContext(), "你点击了"+str+"&&密码为:"+password, Toast.LENGTH_LONG).show();            }        });    }    private void initData() {        // TODO Auto-generated method stub         AsyncHttpClient client = new AsyncHttpClient();           String url = "http://192.168.0.104:8080/JsonServer/JsonServlet";           Toast.makeText(this, "发送请求到服务器", Toast.LENGTH_LONG).show();           client.get(url, new JsonHttpResponseHandler(){             @Override            public void onSuccess(int statusCode, Header[] headers,                    JSONArray response) {                // TODO Auto-generated method stub                super.onSuccess(statusCode, headers, response);                if(statusCode==200){                    List objects=new ArrayList();                    for(int i=0;itry {                            JSONObject obj=response.getJSONObject(i);                            objects.add(obj.getString("name"));                            pass.add(obj.getString("pass"));                        } catch (JSONException e) {                            // TODO Auto-generated catch block                            e.printStackTrace();                        }                    }                     ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, objects);                     listView.setAdapter(adapter);                }            }         });    }}

有问题欢迎交流,随时回复:

效果:

Android服务器搭建——Jsp+Servlet,返回Json到Android客户端_第11张图片

更多相关文章

  1. Android客户端与Tomcat服务器通信实现登录验证
  2. SQLite语法与Android数据库操作
  3. [置顶] Android 5.1 open data flow 数据开启流程
  4. 系出名门Android(9) - 数据库支持(SQLite), 内容提供器(ContentP
  5. android中的bundle传送数据
  6. json解析android客户端源码
  7. android:服务器和客户端通信2
  8. Android Room联合AsyncListUtil实现RecyclerView分页加载ORM数据

随机推荐

  1. android studio 设置模板
  2. android 控制震动强度
  3. (四十一) Android(安卓)O SystemServer初探
  4. 将tensorflow训练好的模型移植到Android(
  5. Android版手风琴(ExpandableListView)
  6. Android开发8:UI组件TextView,EditText,Bu
  7. 创建android phonegap项目
  8. Android(安卓)自定义RecyclerView 实现真
  9. Android(安卓)Inflate方法
  10. API Demos 2.2 研读笔记(10)——Redirectio