SSH框架如何与APP通信

原创 2016年11月05日 14:46:48

最近SSH肤浅的学了一遍后,也算自己向全栈迈出了重要的一步。现在学SSH框架大多以网站开发为例。像我这种做APP出身的,就特想实现跟服务器的通信。
要解决的问题就是如何接受APP传来的数据(一般为json格式)和返回数据(一般为json格式)。下面就进行一下说明。
如何接受APP传来的数据:
我是让action实现了ServletRequestAware这个接口,然后重写了其方法获取request;然后从request得到输入流最后转为string,这样就能获取app传过来的数据,然后自己根据约定解析该json就好了。

下面是action代码

package com.yasin.action;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;

import com.alibaba.fastjson.JSON;
import com.opensymphony.xwork2.ActionSupport;
import com.yasin.model.User;
import com.yasin.service.IUserService;
import com.yasin.utils.Utils;

public class UserAction extends ActionSupport implements ServletRequestAware{
    private String status;//状态返回标记,用来告诉app该网络请求是否成功

    private HttpServletRequest request;//获取request

    /*
     * 上面变量相应的set,get方法
     * */
    public HttpServletRequest getRequest() {
        return request;
    }

    public void setRequest(HttpServletRequest request) {
        this.request = request;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String state) {
        this.status = state;
    }

    private IUserService userService;

    public IUserService getUserService() {
        return userService;
    }

    public void setUserService(IUserService userService) {
        this.userService = userService;
    }

    /*
     * 用户注册功能
     * */
    public String addOrUpdateUser(){
        String content;
        try {
            content = Utils.stream2String(request.getInputStream());//将inputstream转为string,不知道怎么写,可以百度,很好找
            System.out.println(content);
            User user = JSON.parseObject(content,User.class);
            System.out.println(user.getUid()+","+user.getPwd());
            if(userService.addOrUpdateUser(user)){
                status="0";//成功返回
            }else{
                status="1";
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            status="0";
        }

        return SUCCESS;
    }

    /*
     * 登录功能
     * */
    public String login() throws IOException{
        String content = Utils.stream2String(request.getInputStream());
        System.out.println(content);
        User user = JSON.parseObject(content, User.class);
        if(userService.checkUser(user)!=null){
            status="0";
        }else{
            status="1";
        }

        return SUCCESS;
    }

    /*
     * ServletRequestAware接口必须要实现的方法,也是通过该方法获取请求的request
     */
    @Override
    public void setServletRequest(HttpServletRequest arg0) {
        // TODO Auto-generated method stub
        this.request = arg0;
    }

}

返回就在struts配置文件中就搞定了

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 开启使用开发模式,详细错误提示 -->
    <!-- <constant name="struts.devMode" value="false" /> -->
    <!-- 将对象交给spring管理 -->
    <constant name="struts.objectFactory" value="spring" />
    <!-- 指定资源编码类型 -->
    <constant name="struts.i18n.encoding" value="UTF-8" /> 
    <!-- 指定每次请求到达,重新加载资源文件 -->
    <constant name="struts.i18n.reload" value="false" />
    <!-- 指定每次配置文件更改后,自动重新加载 -->
    <constant name="struts.configuration.xml.reload" value="false" />
    <!-- 默认后缀名 -->
    <!--     <constant name="struts.action.extension" value="do,action,jhtml,," /> -->
    <!-- Struts Annotation -->
    <!--     <constant name="actionPackages" value="com.test1"/> -->

    <package name="json" extends="json-default"  >
        <global-results>
            <result name="error">/Error.jsp</result>
        </global-results>
        <action name="register" class="userAction" method="addOrUpdateUser"> 
            <result name="success" type="json" >  
                     <param name="includeProperties">status.*</param> 
            </result>
        </action>
        <action name="login" class="userAction" method="login"> 
            <result name="success" type="json" >  
                     <param name="includeProperties">status.*</param> 
            </result>
        </action>

    </package>
</struts>    

不同于一般的配置文件,package我们使用json-defalut这个包,这些都是固定的,可以看到在每一个action中的result标签下的param的标签的name的值是固定的不用变,其值就是我们要返回的变量。
像login action中,我们返回的变量填写了一个status(如果有多个变量,最后一个一定要以 .* 结尾),这样就把我们的变量已json的格式返回了。
想login请求,如果成功返回的就是{“status”:”0”}。这里的变量要跟action的java代码中的变量要一样,否则找不到。

—————————————–分割线———————————————-

楼主自学后台开发刚入门,所以把自己的学习内容分享出来,写的可能不是业界常用的解决方案,但最起码是行的通的,也是给刚入门的同学降低点学习难度,不打击积极性。如有不当,求巨巨斧正。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

后台基于SSH框架开发的Android应用的前后台数据交互

最近要将一个以SSH框架开发的web应用做成Android应用,由于本人一直做的是web开发,Android不太懂,前后台的数据交互费了好大的劲才搞明白(其实很简单的,只是自己一时糊涂了),现在和大家...

ping++支付接口对接(基于SSH框架)

对于ping++支付接口对接,其实就是创建一个 charge对象向用户收款。 charge 是一个支付凭据对象,所有和支付相关的要素信息都存储在这个对象中,你的服务端可以通过发起支付请求来创建一个新的...

SSH框架实现返回json数据,并使用android app进行访问

源码下载地址: 使用方法, 1.SHH是SSH框架的java wab工程,里面定义了一个action,启动apach-tomcat服务器后可在浏览器输入“localhost:8080/SSH/us...
  • dodouaj
  • dodouaj
  • 2015年01月22日 11:19
  • 2354

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

实现智能硬件与移动app后台的服务器架构选择

1.thinkPHP ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的...

Linux ssh 下的简单 IM 通信

今天发现在 Linux 的 ssh 终端下,可以用 write 命令做简单的 IM 通信。 先通过 w 或 who 命令看有哪些用户/终端登录上了当前机器,然后用 write 命令发送消息。例如,有...

数据库建表-- 一对多/多对一/一对一/多对多 关系

数据库建表-- 一对多/多对一/一对一/多对多 关系 关联映射:一对多/多对一存在最普遍的映射关系,简单来讲就如球员与球队的关系;一对多:从球队角度来说一个球队拥有多个球员 即为一对多多对一:从球...

android客户端+JAVA WEB服务器实现json数据解析

首先,我的项目中用的是javaweb作为后台服务器,源码地址:服务器和客户端源码地址,毕竟是第一次后台和客户端一起写,如有错误,请不吝指正。        一、java web服务器         ...
  • ckq5254
  • ckq5254
  • 2016年12月09日 16:25
  • 337

Android与SSH框架服务器通信方式

  • 2013年07月11日 00:59
  • 571KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SSH框架如何与APP通信
举报原因:
原因补充:

(最多只允许输入30个字)