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. Java 深拷贝浅拷贝 与 序列化

    一.浅拷贝.深拷贝 浅拷贝会对对象中的成员变量进行拷贝:如果是基本类型,拷贝的就是基本类型的值:如果属性是内存地址(引用类型),拷贝的就是内存地址 : 深拷贝,除了基本类型外,引用类型所引用的对象也会 ...

  2. vue中引入字体文件

    在用vue来写一官网的时候,想引入外部字体文件,毕竟总感觉他自己的字体有点难看,在这里记录下 1.先下载字体文件所需的.ttf文件 我这里想引入的是华文行楷字体 百度后下载了一个3M多的ttf文件 2 ...

  3. Centos6.8更好yum源

    第一步:备份你的原镜像文件,以免出错后可以恢复. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back ...

  4. 贪吃蛇小游戏—C++、Opencv编写实现

    贪吃蛇游戏,C++.Opencv实现 设计思路: 1.显示初始画面,蛇头box初始位置为中心,食物box位置随机 2.按随机方向移动蛇头,按a.s.d.w键控制移动方向,分别为向左,向下,向右,向上 ...

  5. 《Eye In-Painting with Exemplar Generative Adversarial Networks》论文阅读笔记

    Abstract 基于conditional GAN使用隐藏在reference image中的exemplar information生成high-quality,personalized in-p ...

  6. JS获取子节点、父节点和兄弟节点的方法实例总结

    转自:https://www.jb51.net/article/143286.htm 本文实例讲述了JS获取子节点.父节点和兄弟节点的方法.分享给大家供大家参考,具体如下: 一.js获取子节点的方式 ...

  7. curl测试dns解析时间及tcp连接时间

    1.用Linux下的curl命令测量网络请求(分号是分隔符,可以是其他符号): curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer ...

  8. linux以字符为单位进行读写操作

    1 所用函数 fgetc(FILE *fp):成功返回所读入的字符 失败为-1 fputc(int c,FILE *fp):第一个参数表示需要输出的字符 第二个参数表示输出的文件.成功返回输出的字符 ...

  9. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时6

    课时6 线性分类器损失函数与最优化(上) 多类SVM损失:这是一个两分类支持向量机的泛化 SVM损失计算了所有不正确的例子,将所有不正确的类别的评分,与正确类别的评分之差加1,将得到的数值与0作比较, ...

  10. P5161 WD与数列(后缀自动机+线段树合并)

    传送门 没想出来→_→ 首先不难看出要差分之后计算不相交也不相邻的相等子串对数,于是差分之后建SAM,在parent树上用线段树合并维护endpos集合,然后用启发式合并维护一个节点对另一个节点的贡献 ...