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<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

时间: 2024-12-24 23:47:38

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

使用WCF对外提供接口

本篇将通过WCF以webservices的方式对外提供接口.同时使用NUnit对webservices中的方法进行单元测试. 开发契约 contract Contract项目为类库项目,该项目下会包含WCF中的ServiceContract,这是一些被加上Attribute [ServiceContract]的接口.同时接口中的方法也需要加上Attribute [OperationContract].另,考虑到下一篇要对接口进行压力测试,所以接口中的方法也加上Attribute [WebGet]

整理一些网站 方便查看和搜索的想法 有合作伙伴么 (需要产品 前端人员 后端人员 只要做网站web, 目前不考虑app, 后期考虑做公众号或者小程序, 也或者对外提供接口)

有合作伙伴么  (需要产品 前端人员 后端人员 只要做网站web, 目前不考虑app, 后期考虑做公众号或者小程序, 也或者对外提供接口) 主要期望功能: 网站形式展示 建立全文索引 加一页查看方式 加一键全文搜索 条件分类搜索   不如中专 大专  以及拥有的专业 首先的目标网站: http://www.cdwx1.com/cqzx/list_2.html 优化点: 列表添加条件快速有效的筛选 根据详情页的相关类别信息进行筛选 把详情页几个分页直接一页展示  方便快速预览 做出选择 按照每学习

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

一.图片查看器和网页源码查看器 在输入地址的是不能输入127.0.0.1 或者是 localhost.ScrollView :可以看成一个滚轴 可以去包裹很多的控件在里面 练习1(图片查看器): package com.shellway.imagelooker; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedUR

unity3d在Android端读取修改Json数据

首先我们需要下载一个文件 LitJson.dll(下载链接 ps: 是用自己的百度云盘下载的如果链接过时,请留言或自行下载, 密码: 5foa) 另外,由于我们要发布到安卓手机上,所以需要配置Jar和SDK,由于这里主要讲Json在安卓端的修改和读取,在这里就不细说了,当然如果不发布手机端的话,电脑端也是可以正常使用的 (1)首先我们来简单搭建一个测试环境(如图) 从上到下依次为text文本框, 按钮, 输入框, 按钮, 功能如图显示(如果需要的话可以把UI放大,以免在手机上面太小,或者在Gam

微信app支付(android端+java后台)

本文讲解使用微信支付接口完成在android开发的原生态app中完成微信支付功能, 文章具体讲解了前端android如何集成微信支付功能以及后台如何组装前端需要支付信息, 话不多话, 具体看文章内容吧00:00 / 07:03正常 本实例项目运行条件: 开发环境: [Android Studio] 到微信开放平台注册帐号并且创建移动应用 https://open.weixin.qq.com/cgi-bin/frame?t=home/app_tmpl&lang=zh_CN Column 1 Col

Android直播实现 Android端推流、播放

最近想实现一个Android直播,但是对于这方面的资料都比较零碎,一开始是打算用ffmpeg来实现编码推流,在搜集资料期间,找到了几个强大的开源库,直接避免了jni的代码,集成后只用少量的java代码就可实现编码.推流和取流播放,整理了一下做了一个demo,在这里记录一下 效果图:  编码和推流,有两个方案选择: 一: 使用javacv来实现,最终也是用过ffmpeg来进行编码和推流,javacv实现到可以直接接收摄像头的帧数据 需要自己实现的代码只是打开摄像头,写一个SurfaceView进行

如何做好 Android 端音视频测试?

在用户眼中,优秀的音视频产品应该具有清晰.低延时.流畅.秒开.抗丢包.高音效等特征.为了满足用户以上要求,网易云信的工程师通过自建源站,在SDK端为了适应网络优化进行QoS优化,对视频编码器进行优化,同时对音频算法进行优化. 推荐阅读 <短视频技术详解:Android端的短视频开发技术> <如何快速实现移动端短视频功能?> 弱网环境测试 网易云信直播项目上线后,出现了音视频卡顿的问题,音视频卡顿现象通常出现在网络条件不是特别理想的情况,一般直播画面频繁出现缓冲标志或者直播画面一卡一

使用SAE的服务来实现android端的用户反馈功能。

这篇是上个月在SAE论坛上写的,现在也转过来吧. 因为应用的需要在SAE开了个jvm来帮android端合并一些请求,提供一些查询和抓取服务.但是SAE的jvm比较贵,每个小时都要5云豆,所以就打算搞点其他的功能,搭建一个简单的服务端,根据需要添加其他功能. 首先想到写个用户反馈的功能,这里需要先在SAE应用里建立一个MySQL数据库,具体创建可以参考SAE的文档. 先是Android端提交数据的代码: 1 public class UserMessage extends Activity im

服务器安全运维:安全狗服云手机android端V2·2版正式上线

安全狗服云旗下基于云计算技术,于2014年初打造的云时代下最好的服务器安全运维云平台,其用"云安全,新运维"的思路为用户提供服务器安全所需的一切服务. 安全狗服云继7月9号服云web端V3.4(企业服务)版上线后,7月10号,服云android端V2·2版也正式上线.同web端V3.4一样,android端V2·2主要也是对企业服务功能模块进行全面的完善和升级,意在为企业用户带来更高效更便捷的安全服务.建议升级使用,地址:http://fuyun.safedog.cn/client.h