讲解下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 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

packagejoanna.yan.servlet;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjoanna.yan.dao.UserDAO;importjoanna.yan.entity.User;importnet.sf.json.JSONArray;importnet.sf.json.JSONObject;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;public class UserServlet extendsHttpServlet{

@Overrideprotected voiddoGet(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {

doPost(req, resp);

}

@Overrideprotected voiddoPost(HttpServletRequest req, HttpServletResponse resp)throwsServletException, IOException {

System.out.println("被访问了!");

PrintWriter out=resp.getWriter();

JSONObject json=newJSONObject();

JSONObject json1=newJSONObject();

String msg="success";int errorcode=0;

ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");try{

UserDAO userDAO=(UserDAO) ac.getBean("UserDAO");

List userList=userDAO.findAll();if(userList.size()>0){

JSONArray jsonArray=newJSONArray();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

userServlet

joanna.yan.servlet.UserServlet

userServlet

/user

Android端:

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

MainActivity.java

packagecom.example.commussh;importjava.io.IOException;importjava.util.Map;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.TextView;importcom.google.gson.Gson;importcom.squareup.okhttp.OkHttpClient;importcom.squareup.okhttp.Request;importcom.squareup.okhttp.Response;public class MainActivity extendsActivity {

TextView tv_show;

Button btn_search;

OkHttpClient client;

Gson gson;static classGist {

Mapfiles;

}static classGistFile {

String content;

}

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

client= newOkHttpClient();

gson=newGson();

tv_show=(TextView) findViewById(R.id.tv_show);

btn_search=(Button) findViewById(R.id.btn_search);

btn_search.setOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View v) {new Thread(newRunnable() {

@Overridepublic voidrun() {

Request request= newRequest.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.Entryentry : gist.files.entrySet()) {

System.out.println(entry.getKey());

System.out.println(entry.getValue().content);

}

}catch(IOException e) {

e.printStackTrace();

}

}

}).start();

}

});

}

}

测试结果:

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

java 对外提供接口_Java服务器对外提供接口以及Android端向服务器请求数据相关推荐

  1. java 集合 接口_Java集合之Collection接口

    1 - Java集合介绍 /* 1. 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储. 2. 另一方面,使用Array存储对象方面具有一些弊 端,而 ...

  2. java 抽象接口_JAVA中的“抽象接口”

    在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接口的子类并不需要实现接口中的全部方法,也就是说,接口中的方法过多,对于某些子类是多余的,我们不得不浪费的写上一个空的实现. 今 ...

  3. java集合框架的接口_Java集合框架——Set接口

    第三阶段 JAVA常见对象的学习 集合框架--Set接口 List集合的特点是有序的,可重复的,是不是存在这一种无序,且能保证元素唯一的集合呢?(HashSet )这就涉及到我们今天所要讲的Set集合 ...

  4. javq接口_Java为什么要使用接口_java接口怎么使用

    Java接口是什么 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 接口 ...

  5. Java抓包分析四(基于jnetpcap进行抓包)——分析Http请求数据包

    在上篇文章中Java抓包分析三(基于jnetpcap进行抓包)--抓取Http请求数据包,我们讲解了TCP三次握手的过程和如何抓取Http数据包,但是我们并没有进行一个数据分析,接下来这篇文章我们将要 ...

  6. 服务器下传Android端,本地Tomcat服务器接收android端上传的数据

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 大体描述 android端提交账号和密码,Tomcat服务器端会接收到,eclipse的控制台输出得到的账号和密码. T ...

  7. java为什么要定义接口_java为什么要定义接口等相关解释

    3.abstract关键词能让你在类里创建一个或多个没有定义的方法-你给出接口,但是留一部分没做定义,这部分由它的派生类来实现.而interface关键词则创建了一种完全抽象的,根本不提供实现的类,它 ...

  8. java调用微信红包接口_java调用微信现金红包接口的心得与体会

    这几天看了下以前写的有关微信支付的博客,看的人仍是挺多的,看了下留言不知道是由于博客写的不够细仍是什么状况,大多都找我要源码,我以为吧程序员仍是须要有这么一个思考的过程,所以没直接给源码,俗话说&qu ...

  9. java康纳塔评测_Java地位无可动摇的12个原因C_服务器评测与技术-中关村在线

    Java动态类型语法工具Groovy Java开发者必须要有一个带有动态类型的语法,可以使用Groovy一个带有预处理器的工具,它能够生成出Java字节码来.这种语言也完全集成到了Java中,因此可以 ...

最新文章

  1. 汽车之家APP车型配置--参数分析
  2. Spring 执行 sql 脚本(文件)
  3. Yarn的默认端口(转载)
  4. Android 第十九课 大喇叭--广播机制----动态注册监听网络变化与静态注册实现开机启动
  5. matlab regionprops区域属性信息
  6. Leetcode每日一题:48.rotate-image(旋转图像)
  7. Qt SQL 学习笔记二:qt建立数据库,创建和操纵表
  8. 【专项测试】京东“安全测试”
  9. Qt qmake和mingw32-make
  10. Hudi-表的存储类型及比较
  11. 学习:名词定义 大数据 Saas Paas Iaas
  12. C语言:求一个四位数的个位、十位、百位、千位分别为多少
  13. linux嵌入式开发位置,RedHat 系列 Linux 安装后,建立嵌入式开发环境
  14. Python 绘画excel分组柱状图(懒人学习)
  15. 5、英飞凌-AURIX-TC3X7: PWM实验之使用 GTM -TOM 实现
  16. 【Command】sudo rm -rf /* 啥效果?
  17. 多多自走棋改动_多多自走棋:20日更新,刺客、光羽修改,装备小幅调整
  18. 零基础学习CANoe Panel(6)—— 开关/显示控件(Switch/Indicator)
  19. Mac中QQ消息记录丢失的问题解决
  20. Google AIY人工智能套件,让STEM教育更加生动有趣!

热门文章

  1. 一键实现变老变年轻——Windows 10 下部署PaddleGAN,带你感受从年少到白头的浪漫
  2. Linux——POSIX有名信号量
  3. Windows下创建静态库
  4. jupyter代码字体大小_Jupyter notebook设置背景主题,字体大小及自动补全代码的操作...
  5. TCP/UDP的小事情
  6. LAMP架构介绍,MySQL、MariaDB介绍,MySQL安装
  7. ios应用,64位问题,Missing 64-bit support
  8. 虚拟主机IIS防范入侵常见问答
  9. Asp.net page 绑定及访问数据
  10. 使用 Windows PowerShell 实现 Web UI 自动化