您的位置:首页 > 移动开发 > Android开发

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

2017-08-07 18:14 525 查看

——热爱开源,乐于分享

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



并直接安装,安装成功后简单测试一下是否能够运行:





3.将Tomcat7部署到Myeclipse中

打开Myeclipse,进入“Window——preference”,然后输入“Tomcat”——点击Tomcat7.x——选择你刚才Tomcat7的安装路径



4.新建一个WebProject

(1)导入相关jar包。导入JavaWeb所需要的处理json所需要的jar包,(因为在服务器端需要对json的处理操作),并Build Path即可。



(2)构建相关类。



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-gener
daaa
ated 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<User> 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<User> findAll() {
// TODO Auto-generated method stub

List<User> users=new ArrayList<User>();
//模拟数据,或者这里的数据可以来自数据库!!!!!
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<User> 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



(3)把项目部署到Tomcat中,并启动Tomcat



(4)测试运行

打开一个浏览器,不要用myeclipse的web browser!!!,输入http://localhost:8080/JsonServer/JsonServlet进行访问,可以看到json数据了,说明服务器搭建成功。接下来客户端的操作就是很简单了,和一般的Android访问网络获取json数据就是完全一样的了:



二、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包:



很简单,直接上代码:

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<String> pass;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

pass=new ArrayList<String>();

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<String> objects=new ArrayList<String>();
for(int i=0;i<response.length();i++){
try {
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<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, objects);
listView.setAdapter(adapter);

}
}
});
}

}


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

效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: