java作为一门后端语言,其厉害之处在于web,大家比较熟知的各种网络应用,java都能做,那么在这个移动优先的时代,如何继续发挥java的强大呢。通常是让java作为一个app的服务端,为app客户端提供数据,做业务逻辑,所以我们用java来写接口,app客户端访问接口返回json文件进行解析,最后实现业务逻辑。这种方式就是我们通常所说的restful架构风格的api。

  restful是一种架构思想,最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出。HTTP就是该架构风格的一个典型应用,其核心思想就是前后端分离,前端通过http请求,如www.xxxx.com/demo/username/password  来访问后端的接口,然后后端将处理好的数据封装为json返回,这样,后端只需关注具体逻辑 提供接口,而前端只关心界面,提高了程序解耦性。 在移动优先的时代,restful极为重要。通常一套后台可以让多种终端访问,包括移动端,pc端。通过restful改进的mvc    在java中比较容易实现restful的是SpringMVC框架,他提供了一套处理json的注解。通过@ResponseBody返回json数据,通过@ResquestBody解析json。

  

下面是一个ios访问我的java后台demo,java后台采用了springMVC和Hibernate。

//java端:

 package cotroller;

 import java.util.HashMap;
import java.util.Map;
import java.util.List; import javax.servlet.http.HttpServletRequest; import jdk.nashorn.api.scripting.JSObject;
import model.Student;
import model.Teacher; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import dao.Get;
import dao.StudentDAO; //登陆servlet
@Controller
public class LoginCotroller {
/**
* 1. value="/doLogin/{username}/{password}" 拦截 xxx/doLogin/xx/xx
* 2. @ResponseBody 使用此注解将返回数据类型封装json
* 3. @PathVariable("username") 截取请求1.value中{username}的值
* 4. Map<String, Object> 服务端将值放入map中再封装为json,客户端方便通过key取出value
*/ StudentDAO studentDAO = new StudentDAO();//调用登陆判断方法 @RequestMapping(value="/doLogin/{username}/{password}",method=RequestMethod.GET)
@ResponseBody
public Map<String, Object> getTeacher(@PathVariable("username") Integer username, @PathVariable("password") String password){
System.out.println("拦截了客户端json请求");
Map<String, Object> map = new HashMap<String, Object>(); if(studentDAO.loginByStudent(username, password)){
System.out.println("密码正确");
map.put("result", "1");
return map; //封装为json返回给客户端
} System.out.println("密码错误");
map.put("result", "0");
return map; //封装为json返回给客户端
} }

//ios端:

 #import <Foundation/Foundation.h>
#import <stdio.h> int main(int argc, const char * argv[]) {
@autoreleasepool { char oldUsername[128];
char oldPassword[128]; NSLog(@"请输入用户名 :");
scanf("%s", oldUsername);
NSString *username = [NSString stringWithUTF8String:oldUsername]; //转换为NSString *
NSLog(@"请输入密码 :");
scanf("%s", oldPassword);
NSString *password = [NSString stringWithUTF8String:oldPassword]; //转换为NSString * //访问springMVC后台并解析返回的json数据
//定义一个异常
NSError *error; //定义请求action 使用stringWithFormat拼接字符串
NSString *url = [NSString stringWithFormat:@"http://154212l6t7.imwork.net:27063/partyOS_APP/doLogin/%@/%@", username, password]; //加载一个NSURL对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; //发送请求 将请求的url数据放到NSData对象中
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; //NSJSONSerialization从response请求中解析出数据放到字典中
NSDictionary *jsonResult = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error]; NSString *resultValue = [jsonResult objectForKey:@"result"]; NSLog(@"你的url是%@", url);
NSLog(@"服务端返回值%@", resultValue); // oc字符串比较方法 resultValue isEqualToString:@"1"] 和java 的equlse类似
if([resultValue isEqualToString:@"1"]){
NSLog(@"登录成功!");
}else{
NSLog(@"登录失败,用户名或密码错误!");
} }
return 0;
}

fight!!!!!!!!

Restful架构思想的更多相关文章

  1. 理解RESTful架构(转)

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  2. RESTful架构3--开发实战

    转自:REST服务开发实战 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(http://zh.wikipedia.org/zh-cn/Web ...

  3. 前端笔记之NodeJS(四)MongoDB数据库&Mongoose&自制接口&MVC架构思想|实战

    一.MongoDB数据库 1.1 NoSQL简介 随着互联网web2.0网站的兴起,传统的SQL数据库(关系数据库)在应付web2.0网站,特别是超大规模和高并发的SNS(social network ...

  4. RESTful 架构基础

    源自:https://mp.weixin.qq.com/s/wEr2jAVphzB1G_MISlLU0w REST(Representational State Transfer)架构风格是一种世界观 ...

  5. 理解restful 架构 && RESTful API设计指南

    restful是前端和后端接口中都会使用的设计思想. 网站即软件,我们也常说的webapp,这种互联网软件采用的是“客户端/服务器”模式,建立在分布式体系上. 网站开发,也可以完全采用软件开发的模式, ...

  6. angular中使用ngResource模块构建RESTful架构

    ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入 ...

  7. 理解RESTful架构

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  8. angular学习笔记(二十八)-$http(6)-使用ngResource模块构建RESTful架构

    ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入 ...

  9. Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试 (转)

    环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...

随机推荐

  1. 【OCP题库-12c】最新CUUG OCP 071考试题库(69题)

    69.(31-1)choose the best answer: Evaluate the following query: SELECT INTERVAL '300' MONTH, INTERVAL ...

  2. Linux Kill 无法关闭进程

    Kill -signal Process# signal 表示kill命令给进程发送的信号 Kill命令实际上执行的动作,是给进程发送信号,常用: INT 2 这个就是你在bash下面用Ctrl+C ...

  3. NOIP2018滚粗祭(周记更新至11.25)

      还好吧, 好像回归之后 还是有时间去机房转一转的 一个特别生动的例子就是 体育会考就去机房呆了一上午. 这里又要吐槽一下信息技术会考 stm我拿到的第一道题就是 https://www.luogu ...

  4. setInterval(),setTimeout(),location.reload(true)

    1,setInterval() setInterval()方法可以按照指定的周期来调用函数或表达式,他会不停地调用函数,直到调用clearInterval()方法或窗口关闭.由setInterval( ...

  5. Linux磁盘及文件系统(三)Linux文件系统

    一.文件系统的组成 Linux常见的文件系统类型有ReiserFS,ext2,ext3,ext4,vfat,XFS等,文件系统是对一个存储设备上数据和元数据进行组织的机制.他的最终目的是把大量数据有组 ...

  6. mxonline实战6 , 忘记用户密码时进行重置

        对应github地址:密码重置   原理:  1. 一个需要输入用户邮箱和注册码的密码忘记页面 2. 点击提交后,用户邮箱收到一个邮件,包含重置密码的链接 3. 点击链接进入密码重置页面   ...

  7. appium安装与部署

    前提: ①:appium属于C/S架构,代码写在Client端 ②:本章所说的部署讲的是Android设备下的Appium安装与部署 ③:Appium Client的环境是针对python3的 App ...

  8. 【杂题】[LibreOJ 2541] 【PKUWC2018】猎人杀【生成函数】【概率与期望】

    Description 猎人杀是一款风靡一时的游戏"狼人杀"的民间版本,他的规则是这样的: 一开始有 n个猎人,第 i 个猎人有仇恨度 wi.每个猎人只有一个固定的技能:死亡后必须 ...

  9. 装B 自卫神器 -

    IE内核下,使用XX插件 修改网页源代码直接无缝显示数据. 包括https FF同样. 截图: 可以修改所有客户端数据,用以迷惑他们.纯属娱乐 ``````` 再次,顺便提醒下. 做网赚的很多朋友,切 ...

  10. Vue 中 export default 和 module.exports

    export default 服从 ES6 的规范,补充:default 其实是别名 module.exports 服从CommonJS 规范 一般导出一个属性或者对象用 export default ...