java 对外提供接口_Java服务器对外提供接口以及Android端向服务器请求数据
讲解下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端向服务器请求数据相关推荐
- java 集合 接口_Java集合之Collection接口
1 - Java集合介绍 /* 1. 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储. 2. 另一方面,使用Array存储对象方面具有一些弊 端,而 ...
- java 抽象接口_JAVA中的“抽象接口”
在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接口的子类并不需要实现接口中的全部方法,也就是说,接口中的方法过多,对于某些子类是多余的,我们不得不浪费的写上一个空的实现. 今 ...
- java集合框架的接口_Java集合框架——Set接口
第三阶段 JAVA常见对象的学习 集合框架--Set接口 List集合的特点是有序的,可重复的,是不是存在这一种无序,且能保证元素唯一的集合呢?(HashSet )这就涉及到我们今天所要讲的Set集合 ...
- javq接口_Java为什么要使用接口_java接口怎么使用
Java接口是什么 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 接口 ...
- Java抓包分析四(基于jnetpcap进行抓包)——分析Http请求数据包
在上篇文章中Java抓包分析三(基于jnetpcap进行抓包)--抓取Http请求数据包,我们讲解了TCP三次握手的过程和如何抓取Http数据包,但是我们并没有进行一个数据分析,接下来这篇文章我们将要 ...
- 服务器下传Android端,本地Tomcat服务器接收android端上传的数据
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 大体描述 android端提交账号和密码,Tomcat服务器端会接收到,eclipse的控制台输出得到的账号和密码. T ...
- java为什么要定义接口_java为什么要定义接口等相关解释
3.abstract关键词能让你在类里创建一个或多个没有定义的方法-你给出接口,但是留一部分没做定义,这部分由它的派生类来实现.而interface关键词则创建了一种完全抽象的,根本不提供实现的类,它 ...
- java调用微信红包接口_java调用微信现金红包接口的心得与体会
这几天看了下以前写的有关微信支付的博客,看的人仍是挺多的,看了下留言不知道是由于博客写的不够细仍是什么状况,大多都找我要源码,我以为吧程序员仍是须要有这么一个思考的过程,所以没直接给源码,俗话说&qu ...
- java康纳塔评测_Java地位无可动摇的12个原因C_服务器评测与技术-中关村在线
Java动态类型语法工具Groovy Java开发者必须要有一个带有动态类型的语法,可以使用Groovy一个带有预处理器的工具,它能够生成出Java字节码来.这种语言也完全集成到了Java中,因此可以 ...
最新文章
- 汽车之家APP车型配置--参数分析
- Spring 执行 sql 脚本(文件)
- Yarn的默认端口(转载)
- Android 第十九课 大喇叭--广播机制----动态注册监听网络变化与静态注册实现开机启动
- matlab regionprops区域属性信息
- Leetcode每日一题:48.rotate-image(旋转图像)
- Qt SQL 学习笔记二:qt建立数据库,创建和操纵表
- 【专项测试】京东“安全测试”
- Qt qmake和mingw32-make
- Hudi-表的存储类型及比较
- 学习:名词定义 大数据 Saas Paas Iaas
- C语言:求一个四位数的个位、十位、百位、千位分别为多少
- linux嵌入式开发位置,RedHat 系列 Linux 安装后,建立嵌入式开发环境
- Python 绘画excel分组柱状图(懒人学习)
- 5、英飞凌-AURIX-TC3X7: PWM实验之使用 GTM -TOM 实现
- 【Command】sudo rm -rf /* 啥效果?
- 多多自走棋改动_多多自走棋:20日更新,刺客、光羽修改,装备小幅调整
- 零基础学习CANoe Panel(6)—— 开关/显示控件(Switch/Indicator)
- Mac中QQ消息记录丢失的问题解决
- Google AIY人工智能套件,让STEM教育更加生动有趣!
热门文章
- 一键实现变老变年轻——Windows 10 下部署PaddleGAN,带你感受从年少到白头的浪漫
- Linux——POSIX有名信号量
- Windows下创建静态库
- jupyter代码字体大小_Jupyter notebook设置背景主题,字体大小及自动补全代码的操作...
- TCP/UDP的小事情
- LAMP架构介绍,MySQL、MariaDB介绍,MySQL安装
- ios应用,64位问题,Missing 64-bit support
- 虚拟主机IIS防范入侵常见问答
- Asp.net page 绑定及访问数据
- 使用 Windows PowerShell 实现 Web UI 自动化