转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5056780.html

讲解下java服务器是如何对移动终端提供接口的,以什么数据格式提供出去,移动端又是怎么请求服务器,接收以及解析返回数据的。

服务端:还是在原先S2SH框架的项目上(搭建SSH详细步骤及其相关说明),加入Servlet来做对终端提供接口的事情。

Android端:用了一个网络访问框架okHttp,向服务器请求数据。

服务端:

servlet接收移动端的get、post请求,进行相应逻辑处理后将要返回的数据封装成json格式写出去。

对数据库的操作传统的Servlet是用jdbc,但是操作过于繁琐,这里重用项目中的Hibernate。那么如何在Servlet中使用Hibernate呢?

Servlet是定义在web.xml中,在Servlet类中用new ClassPathXmlApplicationContext("applicationContext.xml");就可以得到Spring容器,从而可以取到Hibernate来操作数据库了。

ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
UserDAO userDAO=(UserDAO) ac.getBean("UserDAO");
List<User> userList=userDAO.findAll();

在使用Json时,必须要导入的jar:

commons-beanutils-1.7.0.jar

commons-collections-3.2.1.jar

commons-httpclient-3.1.jar

commons-lang-2.3.jar

commons-logging-1.1.1.jar

ezmorph-1.0.3.jar

json-lib-2.2.3-jdk15.jar

UserServlet.java

package joanna.yan.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import joanna.yan.dao.UserDAO;
import joanna.yan.entity.User;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class UserServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("被访问了!");
PrintWriter out=resp.getWriter();
JSONObject json=new JSONObject();
JSONObject json1=new JSONObject();
String msg="success";
int errorcode=0;
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
try {
UserDAO userDAO=(UserDAO) ac.getBean("UserDAO");
List<User> userList=userDAO.findAll();
if(userList.size()>0){
JSONArray jsonArray=new JSONArray();
for (User user : userList) {
json1.put("id", user.getId());
json1.put("username", user.getUsername());
json1.put("age", user.getUsername());
jsonArray.add(json1);
}
json.put("data", jsonArray);
}else{
msg="没有符合要求的数据";
errorcode=1;
json.put("data", "");
}
} catch (Exception e) {
e.printStackTrace();
msg = "系统错误";
errorcode = 10000;
}finally{
json.put("message", msg);
json.put("errorcode", errorcode);
out.print(json);
out.flush();
out.close();
}
}
}

在web.xml中配置UserServlet

 <servlet>
<servlet-name>userServlet</servlet-name>
<servlet-class>joanna.yan.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>userServlet</servlet-name>
<url-pattern>/user</url-pattern>
</servlet-mapping>

Android端:

使用okhttp,在官网下载okhttp-2.7.0.jar和okio-1.6.0.jar放入libs下,并Add Build Path。同时添加解析json数据的gson-2.2.4.jar

MainActivity.java

package com.example.commussh;

import java.io.IOException;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.google.gson.Gson;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response; public class MainActivity extends Activity {
TextView tv_show;
Button btn_search;
OkHttpClient client;
Gson gson;
static class Gist {
Map<String, GistFile> files;
}
static class GistFile {
String content;
} @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); client= new OkHttpClient();
gson=new Gson();
tv_show=(TextView) findViewById(R.id.tv_show);
btn_search=(Button) findViewById(R.id.btn_search);
btn_search.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
new Thread(new Runnable() { @Override
public void run() {
Request request = new Request.Builder()
.url("http://localhost:8080/SSH/user")
.build();
Response response;
try {
response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code: " + response);
Gist gist = gson.fromJson(response.body().charStream(), Gist.class);
for (Map.Entry<String, GistFile> entry : gist.files.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue().content);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
});
}
}

测试结果:

源码:http://pan.baidu.com/s/1mgU7xKs   提取码:pe9i

如果此文对您有帮助,微信打赏我一下吧~

Java服务器对外提供接口以及Android端向服务器请求数据的更多相关文章

  1. 开发FTP服务接口,对外提供接口服务

    注意:本文只适合小文本文件的上传下载,因为post请求是有大小限制的.默认大小是2m,虽然具体数值可以调节,但不适合做大文件的传输 最近公司有这么个需求:以后所有的项目开发中需要使用ftp服务器的地方 ...

  2. Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问

    Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问 1.使用场景: 需求1.家中服务器 ubuntu 主机,跑接口服务,需要对外暴漏, 需求2.同时需要在外网ssh远程 ​ 关键词: frp内网 ...

  3. 使用WCF对外提供接口

    本篇将通过WCF以webservices的方式对外提供接口.同时使用NUnit对webservices中的方法进行单元测试. 开发契约 contract Contract项目为类库项目,该项目下会包含 ...

  4. springboot+CXF开发webservice对外提供接口(转)

    文章来源:http://www.leftso.com/blog/144.html 1.项目要对外提供接口,用webservcie的方式实现 2.添加的jar包 maven: <dependenc ...

  5. java攻城狮之路(Android篇)--与服务器交互

    一.图片查看器和网页源码查看器 在输入地址的是不能输入127.0.0.1 或者是 localhost.ScrollView :可以看成一个滚轴 可以去包裹很多的控件在里面 练习1(图片查看器): pa ...

  6. vue 对象提供的属性功能、通过axio请求数据(2)

    1 Vue对象提供的属性功能 1.1 过滤器 过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中. 1.1.1 使用Vue.filter()进行全局定义(全局 ...

  7. c# .NET RSA结合AES加密服务端和客户端请求数据

    这几天空闲时间就想研究一下加密,环境是web程序,通过js请求后台返回数据,我想做的事js在发送请求前将数据加密,服务端收到后解密,待服务端处理完请求后,将处理结果加密返回给客户端,客户端在解密,于是 ...

  8. WPF内嵌WCF服务对外提供接口

    要测试本帖子代码请记得管理员权限运行vs. 我写这个帖子的初衷是在我做surface小车的时候有类似的需求,感觉这个功能还挺有意思的,所以就分享给大家,网上有很多关于wcf的文章 我就不一一列举了.公 ...

  9. android端从服务器抓取的几种常见的数据的处理方式

    1.图片 public void look(View v) { String path = et_path.getText().toString(); try { URL url = new URL( ...

随机推荐

  1. 我的window10

    前言 这个一时半会写不完,也比较耗费时间,留着以后,每周更新一些新的技巧. 折腾了3天多时间的成果——>window10 的全新桌面,不比苹果差!不要说 windows 不能用 mac . 既然 ...

  2. >hibernate.cfg.xml的一些常用配置

    1.数据库的基本配置信息 hibernate.connection.driver_class是配置数据库驱动 hibernate.connection.url是配置数据库的url hibernate. ...

  3. Linux 系统的初始化配置

      1.零时配置网卡IP地址 2.配置永久生效IP地址   需要进如 cd /etc/sysconfig/network-scripts  找到网卡文件编辑 3.零时主机名的更改. 4.永久主机名的更 ...

  4. set 集合容器实现元素的插入与中序排序

    创建set 对象,方法类似于 vector set< int > s ; 初始化: set<int>s; s.insert(); s.insert(); s.insert(); ...

  5. 使用java反射机制编写Student类并保存

    定义Student类 package org; public class Student { private String _name = null; ; ; public Student() { } ...

  6. 【Hello CC.NET】CC.NET 实现自动化集成

    一.背景 公司的某一金融项目包含 12 个子系统,新需求一般按分支来开发,测完后合并到主干发布.开发团队需要同时维护开发环境.测试环境.模拟环境(主干).目前面临最大的两个问题: 1.子系统太多,每次 ...

  7. 打造程序员的高效生产力工具-mac篇

    打造程序员的高效生产力工具-mac篇 1   概述 古语有云:“工欲善其事,必先利其器” [1] ,作为一个程序员,他最重要的生产资源是脑力知识,最重要的生产工具是什么?电脑. 在进行重要的脑力成果输 ...

  8. Step by step 活动目录中添加一个子域

    原创地址:http://www.cnblogs.com/jfzhu/p/4006545.html 转载请注明出处 前面介绍过如何创建一个域,下面再介绍一下如何在该父域中添加一个子域. 活动目录中的森林 ...

  9. python网络编程——IO多路复用之epoll

    1.内核EPOLL模型讲解     此部分参考http://blog.csdn.net/mango_song/article/details/42643971博文并整理 首先我们来定义流的概念,一个流 ...

  10. CSS3盒模型display:box;box-flex:3;

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...