zoukankan      html  css  js  c++  java
  • 网络通信必备基础之Restful URL(一)

    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680

    本文将先从通过Restful风格的URL请求来介绍网络通信必备基础

    SpringMVC的URL请求的配置方式有两种

    第一种方式:.do,.action 类似于 /user/addUser.do /user/addUser.action

    第二种配置方式:/ 类似于/user/addUser /user/delUser*

    注意:第二种方式其实是包含第一种方式,但是当我们的页面包含静态资源文件.js,.image,.css 的时候 springMVC 会将他们认为是一个 url 请求去匹配,结果 404。*

    怎么解决?
    三种方式:
    一:在springmvc.xml配置文件里面配置:

    <mvc:resources location="/jsAndCss/" mapping="/jsAndCss/**"></mvc:resources>
    

    二:在springmvc.xml配置文件里面配置:

    <mvc:default-servlet-handler/>
    

    三:在web.xml配置:

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>         
    </servlet-mapping>
    

    ps:实际应用中第一种方式比较常见,因为后两种方式使用的是容器默认的 servlet,不同的容器默认的 servlet 不同,实际项目部署时多用 WebLogic,WebSphere。Tomcat 多用于开发。为了防止部署的时候出现差错,所以一般用第一种方式。

    Restful是什么

    中文名称:表现层状态转化。用 URL 表示要操作的资源,用不同的 HTTP 请求(GET,POST,PUT,DELETE)描述对资源的操作,通过 HTTP 的状态码来判断此次对资源操作的结果,这就是 Restful风格。

    其实 Restful 风格是对请求的一次解耦,提高了 url 的重用性。

    状态转化:客户端通过 http 协议访问服务端资源,通过 http 协议里面定义好的四个动词:GET POST PUT DELETE 来讲资源进行状态转化。
    GET 用来获取资源
    POST 用来新增资源
    PUT 用来更新资源
    DELETE 用来删除资源
    put和delete虽然是http协议的规范 ,但是遗憾的是,所有的无论是html4还是h5都不支持,所以我们在实际开开发过程当中要模拟这两种状态。

    普通的URL开发方式 :http://qujianlei.com/getUserList addUser deleteUser updateUser

    Restful风格的URL:

    http://qujianlei.com/users/ method = “get” 获取用户列表
    http://qujianlei.com/user method = “post” 更新用户
    http://qujianlei.com/user method=“delete” 删除用户
    http://qujianlei.com/user method = “put” 新增用户

    Restful怎么实现

    SpringMVC 提供了对 restful 风格很友好的支持。

    支持无后缀的 uri 匹配,是一种很优雅的 restful 风格的 URI。

    对于 html 不支持的 delete 和 put 两种提交方式,提供了一个过滤器进行转化:设置一个 _method = delete / put 的元素,通过 springmvc 提供的过滤器, 能够将他转化成 http 协议的 delete 和 put 提交方式 ,可以在 springmvc 的 @RequestMapping 注解里面获取。
    像下面这样来模拟 put 和 delete 两种方式:

    url :'<%=path%>/user/'+userId+'?_method=delete'
    url :'<%=path%>/user/'+userId+'?_method=put'
    

    a:配置 HiddenHttpMethodFilter 过滤器

    <!-- 配置restful风格url请求的hidden过滤器 -->
    <filter>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    b:在 @RequesetMapping 注解用指定 method 的方式来匹配 url

    /**
     * restful风格的用户列表
     * @return
     */
    @RequestMapping(value="/users",method = RequestMethod.GET)
        public @ResponseBody List<User> getUserListRestful(){
        List<User> userList = userService.getUserList(new User());
        return userList;
    }
    

    c:对于 http://qujianlei.com/user/1 带参数的这种方式,需要用 @PathVariable 注解来接收

    /**
     * restful风格的删除
     * @param userId
     * @return
     */
    @RequestMapping(value="/user/{userId}" ,method = RequestMethod.DELETE)
    public @ResponseBody Map<String,Object> userDelRestful(@PathVariable("userId") Long userId){
        Map<String,Object> resultMap = new HashMap<String,Object>();
        if(userId!=null){
            if(userService.delUser(userId)){
                resultMap.put("result", "删除用户成功") ; 
            }else{
                resultMap.put("result", "删除用户失败");  
            }
        }        
        return resultMap;
    }
    

    Restful有什么意义

    网络上的所有的信息体都看作一种资源,对网络资源的某种操作,都是通过 method 来确定的。

    对于现在的数据或者资源提供方,对外透露的接口一般是 restful 风格的,有利于不同系统之间的资源共享,而且只需要遵守规范不需要做另外的配置就能达到资源共享。

    这是豆瓣提供的一个 restful 风格的 URL :https://api.douban.com/v2/book/2129650

    获取到的 json 格式的数据如下:

    {"rating":{"max":10,"numRaters":16,"average":"7.4","min":0},"subtitle":"","author":["廖雪峰"],"pubdate":"2007","tags":[{"count":21,"name":"spring","title":"spring"},{"count":13,"name":"Java","title":"Java"},{"count":6,"name":"javaee","title":"javaee"},{"count":5,"name":"j2ee","title":"j2ee"},{"count":4,"name":"计算机","title":"计算机"},{"count":4,"name":"编程","title":"编程"},{"count":3,"name":"藏书","title":"藏书"},{"count":3,"name":"POJO","title":"POJO"}],"origin_title":"","image":"https://img3.doubanio.com/view/subject/m/public/s2552283.jpg","binding":"平装","translator":[],"catalog":"","pages":"509","images":{"small":"https://img3.doubanio.com/view/subject/s/public/s2552283.jpg","large":"https://img3.doubanio.com/view/subject/l/public/s2552283.jpg","medium":"https://img3.doubanio.com/view/subject/m/public/s2552283.jpg"},"alt":"https://book.douban.com/subject/2129650/","id":"2129650","publisher":"电子工业出版社","isbn10":"7121042622","isbn13":"9787121042621","title":"Spring 2.0核心技术与最佳实践","url":"https://api.douban.com/v2/book/2129650","alt_title":"","author_intro":"","summary":"本书注重实践而又深入理论,由浅入深且详细介绍了Spring 2.0框架的几乎全部的内容,并重点突出2.0版本的新特性。本书将为读者展示如何应用Spring 2.0框架创建灵活高效的JavaEE应用,并提供了一个真正可直接部署的完整的Web应用程序——Live在线书店(http://www.livebookstore.net)。 在介绍Spring框架的同时,本书还介绍了与Spring相关的大量第三方框架,涉及领域全面,实用性强。本书另一大特色是实用性强,易于上手,以实际项目为出发点,介绍项目开发中应遵循的最佳开发模式。 本书还介绍了大量实践性极强的例子,并给出了完整的配置步骤,几乎覆盖了Spring 2.0版本的新特性。 本书适合有一定Java基础的读者,对JavaEE开发人员特别有帮助。本书既可以作为Spring 2.0的学习指南,也可以作为实际项目开发的参考手册。","price":"59.8"}

    我们在后台获取到了这些数据之后,再通过一些 json 解析包,像:fastjson,gson…就可以把获取到的数据转换成 java 对象,然后再进行数据库的一些增删改查操作。

    restful 是用来外提供接口的,主要用于在不同的系统之间进行数据的交互。

    ps:其实在做内部系统的时候并不会使用 restful 风格的 url 请求,只用普通的 @RequestMapping 来匹配请求就行了。

    原文链接:https://blog.csdn.net/a909301740/article/details/80587580
    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680

  • 相关阅读:
    Cache,ViewState,Session,Application,Static变量
    Java -- 通过 URLConnection 进行http请求中文乱码
    maven
    SpringMVC restful风格下载文件,文件后缀被截掉
    vim 命令
    CentOS -- 命令
    json -- fastjson如何序列化@Transient的字段
    SpringBoot -- 配置mysql、hibernate
    Java -- 泛型父类中获取子类的泛型T
    Excel
  • 原文地址:https://www.cnblogs.com/Android-Alvin/p/12102724.html
Copyright © 2011-2022 走看看