关闭

SSH框架如何与APP通信

标签: sshapp服务器
986人阅读 评论(1) 收藏 举报
分类:

最近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代码中的变量要一样,否则找不到。

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

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

2
0
查看评论

APP客户端访问SSH框架服务器返回json数据实例(服务端和客户端源码)

  • 2017-06-13 14:48
  • 1.78MB
  • 下载

服务器跟客户端通信的几种方式:ssh sftp...

1、 使用SSH模式连接服务器(主要用于操作服务器) 2、 使用sftp 连接服务器(主要用于上传跟下载) 3、 使用软件:SecureCRT进行连接
  • gfd54gd5f46
  • gfd54gd5f46
  • 2016-12-29 20:04
  • 525

后台开发与APP配合开发中的一些拙见

一. APP需要有token,对应后台的sessionId,这个架构实现可以采用shiro的sessionManage组件完成 二.APP与后台的规范协议,也就是我们通常说的URL,最好采用restful风格来规范URL 三.需要定义一套业务异常的错误码,具体的内容可以参考已经做...
  • showgood119
  • showgood119
  • 2016-09-16 00:04
  • 710

基于appcan平台开发一个简单的手机app--登录注册例子

打开appcan进入开发者中心注册并登陆AppCan应用管理系统 1.点击创建应用:(选择的是hybrid) 2.下载开发工具点击打开链接 具体可以看这里点击打开链接 3.应用开发 1)右击phone这个文件新建->appcan页面,这里有一些模块供选择,我们先创建一个主页面起名main:...
  • u011320740
  • u011320740
  • 2017-03-02 16:53
  • 1069

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

源码下载地址: 使用方法, 1.SHH是SSH框架的java wab工程,里面定义了一个action,启动apach-tomcat服务器后可在浏览器输入“localhost:8080/SSH/userjson”访问该action并得到返回的json数据{"description&quo...
  • dodouaj
  • dodouaj
  • 2015-01-22 11:19
  • 2785

SSH框架如何与APP通信

最近SSH肤浅的学了一遍后,也算自己向全栈迈出了重要的一步。现在学SSH框架大多以网站开发为例。像我这种做APP出身的,就特想实现跟服务器的通信。 要解决的问题就是如何接受APP传来的数据(一般为json格式)和返回数据(一般为json格式)。下面就进行一下说明。 如何接受APP传来的数据: ...
  • u013592964
  • u013592964
  • 2016-11-05 14:46
  • 986

App后台开发运维和架构实践(完整版).pdf

  • 2017-12-15 16:04
  • 49B
  • 下载

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

1、Android获取SSH框架服务器JSP文件内容 可以通过HttpClient,然后用HtmlParser去解析想要的内容。其中getCommentData(String url),url为想要抓取的页面地址。 注意:往往获取网页内容时,格式为UTF-8,直接拿数据时,往往会是“ ...
  • boylinux
  • boylinux
  • 2013-04-27 19:12
  • 13176

SSH框架-HIbernate之数据持久化

Hibernate介绍之数据持久化
  • UP19910522
  • UP19910522
  • 2014-03-24 17:45
  • 1417

SSH通信协议浅析

第一部分:协议概览   整个通讯过程中,经过下面几个阶段协商实现认证连接。   第一阶段:   由客户端向服务器发出 TCP 连接请求。TCP 连接建立后,客户端进入等待,服务器向客户端发送第一个报文,宣告自己的版本号,包括协议版本号和软件版本号。协议版本号由主版本号和次版本号两部分组成。它和...
  • yuxin8000
  • yuxin8000
  • 2014-05-15 11:09
  • 874
    个人资料
    • 访问:75181次
    • 积分:1327
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:1篇
    • 译文:0篇
    • 评论:31条