SpringMVC互联网软件架构REST使用详解

什么是REST

REST:即 Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用

☐ 资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的 URI 。要获取这个资源,访问它的URI就可以,因此 URI 即为每一个资源的独一无二的识别符。

☐ 表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层(Representation)。比如,文本可以用 txt 格式表现,也可以用 HTML 格式、XML 格式、JSON 格式表现,甚至可以采用二进制格式。

☐ 状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。HTTP协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是 “表现层状态转化”。

☐ 具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:

      ☐ GET 用来获取资源,
      ☐ POST 用来新建资源,
      ☐ PUT 用来修改资源,
      ☐ DELETE 用来删除资源。

如何使用REST

我们想实现的效果如下图,通过客户端访问特殊URL(例如该URL末尾的数字表示用户ID)来快速实现CURD操作。

但是,浏览器 form 表单只支持 GET与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与DELETE 请求.这个过滤器就是HiddenHttpMethodFilter

过滤器的实现原理大致如下:检测请求参数中是否包含 _method这个参数,如果包含则获取其值,然后判断是哪种操作后继续传递:    

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    //methodParam="_method";
     String paramValue = request.getParameter(this.methodParam);
    if("POST".equals(request.getMethod()) && StringUtils.hasLength(paramValue)) {
      String method = paramValue.toUpperCase(Locale.ENGLISH);
      HiddenHttpMethodFilter.HttpMethodRequestWrapper wrapper = new HiddenHttpMethodFilter.HttpMethodRequestWrapper(request, method);
      filterChain.doFilter(wrapper, response);
    } else {
      filterChain.doFilter(request, response);
    }

  }

演示(REST风格的访问)

1.配置过滤器HiddenHttpMethodFilter,可以把POST请求转换为DELETE或PUT请求:

2.在表单中携带隐藏域

说明:name="_method';

3.在控制器中处理请求

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JAVA Map架构和API介绍

    首先,我们看看Map架构.如上图:Map 是映射接口,Map中存储的内容是键值对(key-value).AbstractMap 是继承于Map的抽象类,它实现了Map中的大部分API.其它Map的实现类可以通过继承AbstractMap来减少重复编码.SortedMap 是继承于Map的接口.SortedMap中的内容是排序的键值对,排序的方法是通过比较器(Comparator).NavigableMap 是继承于SortedMap的接口.相比于SortedMap,NavigableMap有一系

  • Java自学书籍推荐 程序员到架构师必看的书

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们. 一.Java编程入门类 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是"囫囵吞枣不求甚解",先对Java熟悉起来再说.用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要"

  • Android中的Retrofit+OkHttp+RxJava缓存架构使用

    RxJava如何与Retrofit结合 先扔出build.gradle文件的内容 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.0' compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxand

  • Java中的异常处理用法及其架构和使用建议

    Java异常是Java提供的一种识别及响应错误的一致性机制. Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性.在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了"什么"被抛出,异常堆栈跟踪回答了"在哪"抛出,异常信息回答了"为什么"会抛出. Java异常机制用到的几个关键字:try.catch.finally.throw.throws. 关键字 说

  • java使用任务架构执行任务调度示例

    复制代码 代码如下: package com.yao; import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.conc

  • Java Web三层架构的配置详解

    一.软件下载: 1.java 这里使用的是jdk1.4.2.     下载地址:http://dlc.sun.com/jdk/j2sdk-1_4_2_07-windows-i586-p.exe;     2.tomcat 5.0.28 这里的tomcat的版本是5.0的,安装版或是解压版都是可以的. 3.数据库 推荐使用mysql,but暂时找不到下载地址,由于此次偶们班有课程设计要用sqlserver的,所以下面实践会使用sqlserver(找张安装盘安装)     注:连接sqlserver

  • SpringMVC互联网软件架构REST使用详解

    什么是REST REST:即 Representational State Transfer.(资源)表现层状态转化.是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用 ☐ 资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息.它可以是一段文本.一张图片.一首歌曲.一种服务,总之就是一个具体的存在.可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的 URI .要获取这个资源,访问它的URI就可以,因此 UR

  • SpringMVC下获取验证码实例详解

    SpringMVC下获取验证码实例详解 前言: 1.用户一开始登录的时候, 不建议出现验证码, 这一点在很多网站上已经体现的很好了, 只有当用户连续输错三次或者以上才会要求用户输入验证码. 2.记录用户输错次数最好不要使用 session 来记录, 因为 session 是跟客户端浏览器会话有关的, 如果用重启浏览器或者换新的浏览器再来登录或者试错, 就是新的回话了, 原来记录的错误次数就失效了. 建议此处采用缓存机制来实现, 简单处理就是采用 Map<用户登录id, 错误次数> 来实现, 如

  • SpringMVC中的拦截器详解及代码示例

    本文研究的主要是SpringMVC中的拦截器的介绍及实例代码,配置等内容,具体如下. Springmvc的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理.本文主要总结一下springmvc中拦截器是如何定义的,以及测试拦截器的执行情况和使用方法. 1. springmvc拦截器的定义和配置 1.1 springmvc拦截器的定义 在springmvc中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的三个方法,如下: /

  • SpringMVC实现Validation校验过程详解

    这篇文章主要介绍了SpringMVC实现Validation校验过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.概述 对前端的校验大多数通过js在页面校验,这种方法比较简单,如果对安全性考虑,还要在后台校验. springmvc使用JSR-303(javaEE6规范的一部分)校验规范,springmvc使用的是Hibernate Validator(和Hibernate的ORM) 二.步骤 2.1 引入 Hibernate Vali

  • Spring集成Web环境与SpringMVC组件的扩展使用详解

    目录 一.Spring集成Web环境(解耦) 二.SpringMVC快速入门 三.SpringMVC的执行流程 四.SpringMVC组件解析 五.SpringMVC注解解析 六.SpringMVC组件扫描的扩展 七.SpringMVC的XML配置解析之视图解析器 一.Spring集成Web环境(解耦) 实际开发中,我们通常需要编写多个Web相关的Servlet的时候,如下 package com.kang.service; import org.springframework.context.

  • SpringMVC使用RESTful接口案例详解

    目录 一.准备工作 二.功能清单 三.具体功能-访问首页 一.准备工作 和传统 CRUD 一样,实现对员工信息的增删改查. ①搭建环境 添加相关依赖 web.xml springmvc.xml ②准备实体类 public class Employee { private Integer id; private String lastName; private String email; //1 male, 0 female private Integer gender; public Integ

  • SpringMVC表单标签使用详解

    在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容.下面将对这些标签一一介绍. 在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令: <%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %> 1.1.form标签 使用Sprin

  • 学习SpringMVC——如何获取请求参数详解

    @RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView)!它(@ModelAttribute)!没错,仅注解这块,spring mvc就为你打开了五彩斑斓的世界.来来来,不要兴(mi)奋(hu),坐下来,我们好好聊聊这么些个注解兄弟们~~~(wait, 都没有听过? 好,来,你坐前排,就你!)  一.spring mvc如何匹配请求路径--"请求路径哪家

  • java springmvc乱码解决归纳整理详解

    springmvc的中文乱码问题主要有以下几种情形: 页面传值到后台: 工程编码(最后一开始建立工程就设置整个工程的编码) 页面的几种编码属性的设置 get提交方式乱码的处理 post提交方式乱码的处理 后台到数据库乱码: 数据库连接字符串指定编码格式 数据库编码属性(也是一开始设置数据库的时候就要设置好,不然要重新建数据库) 1.页面的几种编码属性 pageEncoding="UTF-8" jsp页面编码,jsp文件本身的编码 contentType="text/html;

  • 学习SpringMVC——国际化+上传+下载详解

    一个软件,一个产品,都是一点点开发并完善起来的,功能越来越多,性能越来越强,用户体验越来越好--这每个指标的提高都需要切切实实的做点东西出来,好比,你的这个产品做大了,用的人多了,不仅仅再是上海人用,北京人用,还有印度人用,法国人用等等,可以说这个产品已经走上了国际化的大舞台.当印度的哥们输入url访问产品时,界面上弹出"欢迎您,三哥",估计哥们当场就蒙圈了.而这个时候,国际化就应运而生了. 要做国际化这道菜,真的没有想象中的那么复杂,反而很简单,不信你看-- 1. 注入Resourc

随机推荐