RestFul风格详解

RestFul风格详解文章目录一、前言二、什么是RestFul风格三、传统风格与RestFul风格对比1.传统方式操作资源2.RestFul方式操作资源四、RestFul代码演示1.代码展示2.拓展情景五、使用method属性指定请求类型六、总结一、前言该技术博客总结与狂神说SpringMVC课程二、什么是RestFul风格Restful就是一个资源定位、资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。资源:互联网所有的事物都可以被抽象为资源资源

大家好,又见面了,我是你们的朋友全栈君。

一、前言

该技术博客总结与狂神说SpringMVC课程

二、什么是RestFul风格

Restful就是一个资源定位、资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

资源:互联网所有的事物都可以被抽象为资源
资源操作:分为POST、DELETE、PUT、GET四种方法,使用不同方法对资源进行操作(增、删、改、查)
在这里插入图片描述

三、传统风格与RestFul风格对比

1. 传统方式操作资源

通过不同的参数来实现不同的效果!方法单一!

http://127.0.0.1/item/queryItem.action?id=1 (查询,GET)
http://127.0.0.1/item/saveItem.action (新增,POST)
http://127.0.0.1/item/updateItem.action (更新,POST)
http://127.0.0.1/item/deleteItem.action?id=1 (删除,GET或POST)

2. RestFul方式操作资源

可以通过不同的请求方式来实现不同的效果!
如下:请求地址一样,但是功能可以不同!

http://127.0.0.1/item/1 (查询,GET)
http://127.0.0.1/item (新增,POST)
http://127.0.0.1/item (更新,PUT)
http://127.0.0.1/item/1 (删除,DELETE)

四、RestFul代码演示

1.代码展示

在进行代码演示之前,需要配置好环境!

首先导入依赖:

<!--springmvc注解-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.9.RELEASE</version>
</dependency>

接着创建springmvc.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">


    <!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 -->
    <context:component-scan base-package="com.xu.controller"/>
    <!--处理器映射器 + 处理器适配器注入-->
    <mvc:annotation-driven />

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

接着配置web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">

    <!--注册DispatcherServlet-->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--关联一个springmvc配置文件:springmvc.xml-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--启动级别:1-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

然后在WEB-INF下创建jsp/test.jsp文件,用于接收值:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Test</title>
</head>
<body>
${msg}
</body>
</html>

最后创建RestFulController类:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class RestFulController { 
   
    //映射访问路径
    @RequestMapping("/commit/{p1}/{p2}")
    //在SpringMVC中可以使用 @PathVariable,让方法参数的值对应绑定到一个URI模板变量上
    public ModelAndView index(@PathVariable int p1, @PathVariable int p2, ModelAndView mv){ 
   
        int result = p1 + p2;
        //实例化一个ModelAndView对象用于向视图中传值
        mv.addObject("msg","结果:" + result);
        //返回视图
        mv.setViewName("test");
        return mv;
    }
}

搭建好Tomcat服务器并运行,输入请求进行测试:
在这里插入图片描述

2.拓展情景

通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法,如果这里访问是的路径是 /commit/1/a,则路径与方法不匹配,而不会是参数转换失败。
在这里插入图片描述
解决方式:将RestFulController类中方法第二个参数类型改成String

五、使用method属性指定请求类型

用于约束请求的类型,可以收窄请求范围。
指定请求谓词的类型如:GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等

代码展示:

//在RestFulController类中增加一个方法
//映射访问路径,必须是POST请求
@RequestMapping(value = "/hello",method = { 
   RequestMethod.POST})
public String index2(Model model){ 
   
   model.addAttribute("msg", "hello!");
   return "test";
}

发送请求后,显示如下结果:
在这里插入图片描述
原因:我们使用浏览器地址栏进行访问默认是Get请求,会报错405!

解决方式:将POST修改为GET就正常了

//映射访问路径,必须是Get请求
@RequestMapping(value = "/hello",method = { 
   RequestMethod.GET})
//我们一般采用这种方式:@GetMapping("/hello")
public String index2(Model model){ 
   
   model.addAttribute("msg", "hello!");
   return "test";
}

成功显示!
在这里插入图片描述

六、总结

所有的地址栏请求默认都会是GET类型的。

针对章节五的问题,我们也可以通过组合注解来解决:

@GetMapping:扮演的是@RequestMapping(method =RequestMethod.GET) 的快捷方式。
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

项目结构:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148647.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nginx负载均衡算法8种_权重负载均衡算法实现

    nginx负载均衡算法8种_权重负载均衡算法实现Nginx是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达50,000个并发连接数的响应,感谢Nginx为我们选择了epollandkqueue作为开发模型。下面是五种负载均衡算法:roundrobin(默认) weight IP_hash url_hash(第三方) fair(第三方)1.roundr…

    2022年10月12日
    2
  • virsh查看虚拟网络信息_kvm创建虚拟机

    virsh查看虚拟网络信息_kvm创建虚拟机1.virsh查看/管理虚拟机问题本案例要求熟悉KVM虚拟化的virsh管理工具的的基本使用,从命令行来操作虚拟机,完成以下基本任务:1)查看KVM服务器信息2)列出有哪些虚拟机、指定虚拟机的状态3)基本的开关机操作4)将虚拟机设置为自动运行方案virsh命令行管理的常见用法:1)virsh:直接进交互模式2)virshnodeinfo:查看KVM节点(服务器)信息3…

    2022年8月12日
    22
  • linux查看权限命令

    linux查看权限命令查看权限命令查看目录的相关权限可以采用命令ls-lD,或者直接用ls-la如ls-lwwwt//这里表示查看www目录修改权限命令chmod777文件名1.chmod577/home/stuser-R2.umask-p02003.chownXXXXYYYY(XXXX为用户名YYYY为文件名)权限列表-rw——-(600)只有所有者才…

    2022年5月15日
    70
  • 搜集对编程有帮助的论坛以及个人空间信息_猿编程怎么样

    搜集对编程有帮助的论坛以及个人空间信息_猿编程怎么样(持续更新中)论坛:编程论坛——中国最大的编程者社区:http://bbs.bc-cn.net/编程论坛-编程爱好者学习的净土,程序员交流的园地:http://www.programbbs.com/豆瓣小组:java小组http://www.douban.com/group/java/大富翁论坛:http://w

    2022年9月1日
    3
  • html背景音乐自动播放代码_HTML5视频播放器代码

    html背景音乐自动播放代码_HTML5视频播放器代码src后文件可换

    2022年9月24日
    2
  • macbook air13-inch_苹果笔记本mgn63ch

    macbook air13-inch_苹果笔记本mgn63chMacBookAirMGN63CH/A/MGN93CH/A/MGND3CH/A/MGN73CH/A/MGNA3CH/MGNE3CH/A配置报价图片:https://www.mac.so/macbook-air/MGN63CH/A 7999 深空灰色 全新MacBookAirM1芯片低配 触控ID AppleM1芯片配备8核中央处理器 8GB统一内存 256GB固态硬盘 7核图形处理器 13.3原彩显示2560×160…

    2022年10月6日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号