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。

  

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

java端:

 1 package cotroller;
3 import java.util.HashMap;
4 import java.util.Map;
5 import java.util.List;
7 import javax.servlet.http.HttpServletRequest;
9 import jdk.nashorn.api.scripting.JSObject;
10 import model.Student;
11 import model.Teacher;
13 import org.springframework.stereotype.Controller;
14 import org.springframework.ui.Model;
15 import org.springframework.web.bind.annotation.PathVariable;
16 import org.springframework.web.bind.annotation.RequestBody;
17 import org.springframework.web.bind.annotation.RequestMapping;
18 import org.springframework.web.bind.annotation.RequestMethod;
19 import org.springframework.web.bind.annotation.ResponseBody;
23 import dao.Get;
24 import dao.StudentDAO;
25
26 //登陆servlet
27 @Controller
28 public class LoginCotroller {
29 /**
30 * 1. value="/doLogin/{username}/{password}" 拦截 xxx/doLogin/xx/xx
31 * 2. @ResponseBody 使用此注解将返回数据类型封装json
32 * 3. @PathVariable("username") 截取请求1.value中{username}的值
33 * 4. Map<String, Object> 服务端将值放入map中再封装为json,客户端方便通过key取出value
34 */
35
36 StudentDAO studentDAO = new StudentDAO();//调用登陆判断方法
37
38 @RequestMapping(value="/doLogin/{username}/{password}",method=RequestMethod.GET)
39 @ResponseBody
40 public Map<String, Object> getTeacher(@PathVariable("username") String username, @PathVariable("password") String password){
41 System.out.println("拦截了客户端json请求");
42 Map<String, Object> map = new HashMap<String, Object>();
43
44 if(studentDAO.loginByStudent(username, password)){
45 System.out.println("密码正确");
46 map.put("result", "");
47 return map; //封装为json返回给客户端
48 }
49
50 System.out.println("密码错误");
51 map.put("result", "");
52 return map; //封装为json返回给客户端
53 }
54
55 }

web端login页面的请求和解析

 1 <%@ page language="java" contentType="text/html; charset=utf-8"
2 pageEncoding="utf-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
4 <html>
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
7 <title>客户端登录</title>
8 </head>
9 <script type="text/javascript" src="static/js/jquery-1.7.1.min.js"></script>;
10 <script type="text/javascript">
11 function checnLogin(){
$.ajax({
type:"post",
url:"<%=request.getContextPath%>/student/doLogin",
data:{userName:$("#userName").val(),password:$("#password").val()}
dataType:"json",
success:function(data){
$("#loginResult").text(data);
}
});
}
12  </script> 
13 <body>
14 <form action="#" method="post"  >
15   <table align="left">
16    <tr>
17 <td>用户登录</td>
18 </tr>
19 <tr>
20      <td>用户名:</td>
21 <td><input type="text" name="loginName" id="loginName"  value="${loginName }"/></td>
22  </tr>
23    <tr>
26 <td>密&nbsp;&nbsp;&nbsp;码:</td>
27   <td><input type="text" name="password"  id="password" value="${password }"/></td>
28 </tr>
29  <tr>
30  <td>
31 <input type="submit" value="登录" />&nbsp;&nbsp;&nbsp;
32 <input type="button" value="重置" onclick="checnLogin()"/>&nbsp;&nbsp;&nbsp;
34  </td>
35  </tr>
36  <br>
37  <tr>
38 <td colspan="">登录结果:<span id="loginResult"></span></td>
39 </tr>
40  <br>
41  </table>
42  </form>
43 </body>
44 </html>

https://www.cnblogs.com/yshang/p/10654491.html

由浅入深一个Demo带你认识Restful风格的架构的更多相关文章

  1. RestKit ,一个用于更好支持RESTful风格服务器接口的iOS库

    简介 RestKit 是一个用于更好支持RESTful风格服务器接口的iOS库,可直接将联网获取的json/xml数据转换为iOS对象. 项目主页: RestKit 最新示例: 点击下载 注意: 如果 ...

  2. 一个Demo带你彻底掌握View的滑动冲突

    本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 近期在又一次学习Android自己定义View这一块的内容.遇到了平时开发中常常碰到的一个棘手问题:View的滑 ...

  3. 【接入指南】一个Demo带你玩转华为帐号服务

    在<接入指南:一文带你了解华为帐号服务>中已经给大家介绍了华为帐号服务有哪些优势,如一键授权登录华为全场景共享.共享华为帐号所有用户资源.帐号安全可靠.接入方便快捷等,以及为什么能帮助开发 ...

  4. 【DDD】领域驱动设计实践 —— 架构风格及架构实例

    概述 DDD为复杂软件的设计提供了指导思想,其将易发生变化的业务核心域放置在限定上下文中,在确保核心域一致性和内聚性的基础上,DDD可以被多种语言和多种技术框架实现,具体的框架实现需要根据实际的业务场 ...

  5. 通过beego快速创建一个Restful风格API项目及API文档自动化

    通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...

  6. 使用webpy创建一个简单的restful风格的webservice应用

    下载:wget http://webpy.org/static/web.py-0.38.tar.gz解压并进入web.py-0.38文件夹安装:easy_install web.py 这是一个如何使用 ...

  7. SpringMVC RESTful风格URL处理带点的参数

    使用了RESTful风格的URL.但是在处理带点的搜索参数,比如baidu.com的时候,后台就取不到正确的参数了. 搜索了下原因,原来是SpringMVC将点号看作扩展分隔符号了,因此后台没法拿到正 ...

  8. 通过beego快速创建一个Restful风格API项目及API文档自动化(转)

    通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...

  9. 在 Docker 上运行一个 RESTful 风格的微服务

    tags: Microservice Restful Docker Author: Andy Ai Weibo:NinetyH GitHub: https://github.com/aiyanbo/d ...

随机推荐

  1. 计算一个大数n的阶乘的位数宽度(十进制)(log i累加法 )

    输入: 每行输入1个正整数n, (0<n<1000 000) 输出: 对于每个n,输出n!的(十进制)位数. 分析: 这道题采用蛮力法.根据定义,直接求解! 所谓n!的十进制位数,就是 l ...

  2. linux初级学习笔记十:linux grep及正则表达式!(视频序号:04_4)

    本节学习的命令:grep 本节学习的技能: grep对文本的匹配 正则表达式的使用 知识点十:grep及正则表达式(4_4) grep,egrep,fgrep: grep: 根据模式搜索文本,并将符合 ...

  3. jdk8新特性Stream

    Stream的方法描述与实例 1,filter  过滤 Person p1 = new Person(); p1.setName("P1"); p1.setAge(10); Per ...

  4. C++中volatile及编译器优化

    首先看一下单词"volatile"的释义: volatile [ˈvɑlətl] adj.  易变的,不稳定的; (液体或油)易挥发的; 爆炸性的; 快活的,轻快的; 下边是&qu ...

  5. 「SHOI2007」「Codevs2341」 善意的投票(最小割

    2341 善意的投票 2007年省队选拔赛上海市队选拔赛 时间限制: 5 s 空间限制: 128000 KB 题目等级 : 大师 Master   题目描述 Description 幼儿园里有n个小朋 ...

  6. 【前端】CentOS 7 系列教程之六: 安装 mysql 5.7

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/linux_6.html 进入/usr/local/src目录 cd /usr/local/src 下载mysql的 ...

  7. Linux Shell高级技巧(目录)

    为了方便我们每个人的学习,这里将给出Linux Shell高级技巧五篇系列博客的目录以供大家在需要时参阅和查找. Linux Shell高级技巧(一) http://www.cnblogs.com/s ...

  8. Win7系统打开服务管理界面的几种方法汇总

    转自:https://www.jb51.net/os/windows/318465.html Win7服务管理包含了计算机操作系统和应用程序提供的所有服务,但是这么多服务并非总是用户所需的.比如打印机 ...

  9. word-break: break-all word-break:keep-all word-wrap: break-word三者的区别

    word-break属性:指定非CJK脚本的断行规则. 值 描述 normal 使用浏览器默认的换行规则. break-all 允许在单词内换行. keep-all 只能在半角空格或连字符处换行. w ...

  10. HDOJ1584蜘蛛牌【DFS】

    10张牌,大的只能跟小的跑,可以针对每一个状态进行搜索,求一个最小的移动距离. 但是不会怎么遍历整个状态是硬伤? 因为只能大的跟着小的. 先把小的标记,去寻找大的点,最终一定是满足的吧. 比如先标记1 ...