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不太懂,前后台的数据交互费了好大的劲才搞明白(其实很简单的,只是自己一时糊涂了),现在和大家...

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

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

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

Protobuf3 google protobuf

Protocol Buffers是一个跨语言、跨平台的具有可扩展机制的序列化数据工具。也就是说,我在ubuntu下用python语言序列化一个对象,并使用http协议传输到使用java语言的andro...

利用Redis撤销JSON Web Token产生的令牌

利用Redis撤销JSON Web Token产生的令牌作者:chszs,版权所有,未经同意,不得转载。博主主页:http://blog.csdn.net/chszs早先的博文讨论了在Angular....
  • chszs
  • chszs
  • 2015-07-27 10:20
  • 4498

服务器session和jwt之争

1. session session和cookie的目的相同,都是为了克服http协议无状态的缺陷,但完成的方法不同。session通过cookie,在客户端保存session id,而将用户的...

Android客户端与服务器端的json数据交互(很详细)

Android客户端与服务器端的json数据交互,主要是通过json形式的数据交互,就是json的写入和解析。  先看效果图,我最讨厌讲东西,一个图没有的。 算了,看来我不是写...

Spring security4.1.4 如何实现api接口和页面的双重拦截

dileber先暂缓一下,最近在作服务器认证方面的东西 首先讲一下spring Security入和对接口和页面同时拦截 beans:beans xmlns="http://www.spri...

通过web.xml解读SSH启动与运行过程(1)

Web.xml内容解析:   xml version="1.0"encoding="UTF-8"?> web-app xmlns:xsi="http://www.w3.org/2001/XM...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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