RESTful风格

(一)什么是RESTful

(1)RESTful不是一套标准,只是一套开发方式,构架思想

(2)url更加简洁

(3)有利于不同系统之间的资源共享

(二)概述

RESTful具体来讲就是HTTP协议的四种形式,四种基本操作

GET:获取资源

POST:新建资源

PUT:修改资源

DELETE:删除资源

(三)实例

(1)功能

1.数据的增删改查

2.controller层的应用

3.HTTP四种基本操作的应用

(2)代码实现

1.pom.xml

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>

2.web.xml

<web-app>

  <display-name>Archetype Created Web Application</display-name>

  <servlet>

    <servlet-name>SpringMVC</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <init-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>classpath:springmvc.xml</param-value>

    </init-param>

  </servlet>

  <servlet-mapping>

    <servlet-name>SpringMVC</servlet-name>

    <url-pattern>/</url-pattern>

  </servlet-mapping>

  <!--过滤器,将请求转换为标准的http方法,使得支持GET,POST,PUT,DELETE请求-->

  <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>

</web-app>

3.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"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!--包扫描-->

    <context:component-scan base-package="controller,dao"></context:component-scan>

    <!--视图解析器-->

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <!--前缀-->

        <property name="prefix" value="/"></property>

        <!--后缀-->

        <property name="suffix" value=".jsp"></property>

    </bean>

</beans>

4.User.java

package entiry;

public class User {

    private int id;

    private String name;

    private String password;

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

    @Override

    public String toString() {

        return "User{" +

                "id=" + id +

                ", name='" + name + '\'' +

                ", password='" + password + '\'' +

                '}';

    }

}

5.UserDao.java

package dao;

import entiry.User;

import org.springframework.stereotype.Repository;

import java.util.Collection;

import java.util.HashMap;

import java.util.Map;

@Repository

public class UserDao {

    private Map<Integer, User> map=new HashMap<Integer, User>();

    /**

     * 增加

     * @param user

     */

    public void add(User user){

        map.put(user.getId(),user);

    }

    /**

     * 查询所有

     * @return

     */

    public Collection<User> selectAll(){

        return map.values();

    }

    /**

     * 通过id查询

     * @param id

     * @return

     */

    public User select(int id){

        return map.get(id);

    }

    /**

     * 修改

     * @param user

     */

    public void update(User user){

        map.put(user.getId(),user);

    }

    /**

     * 删除

     * @param id

     */

    public void delete(int id){

        map.remove(id);

    }

}

6.UserController.java

package controller;

import dao.UserDao;

import entiry.User;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.*;

import org.springframework.web.servlet.ModelAndView;

@Controller

public class UserController {

    @Autowired

    private UserDao userDao;

    @PostMapping("/add")

    public String add(User user){

       userDao.add(user);

       //重定向到selectAll

       return "redirect:/selectAll";

    }

    @GetMapping("/selectAll")

    public ModelAndView selectAll(){

        ModelAndView modelAndView=new ModelAndView();

        modelAndView.addObject("users",userDao.selectAll());

        modelAndView.setViewName("select");

        for(User user:userDao.selectAll()){

            System.out.println(user);

        }

        return modelAndView;

    }

    @GetMapping("/select/{id}")

    public ModelAndView select(@PathVariable(value="id") int id){

        ModelAndView modelAndView=new ModelAndView();

        modelAndView.setViewName("update");

        modelAndView.addObject("user",userDao.select(id));

        return modelAndView;

    }

    @PutMapping("/update")

    public String update(User user){

        userDao.update(user);

        return "redirect:/selectAll";

    }

    @DeleteMapping("/delete/{id}")

    public String delete(@PathVariable(value="id")int id){

        userDao.delete(id);

        return "redirect:/selectAll";

    }

}

7.add.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>Title</title>

</head>

<body>

<form action="${pageContext.request.contextPath}/add" method="post">

    id:<input type="text" name="id"><br>

    用户名:<input type="text" name="name"><br>

    密码:<input type="text" name="password"><br>

    <input type="submit">

</form>

</body>

</html>

8.select.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@page isELIgnored="false" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<html>

<head>

    <title>Title</title>

</head>

<body>

<table>

    <tr>

        <td>id</td>

        <td>用户名</td>

        <td>密码</td>

        <td></td>

        <td></td>

    </tr>

    <c:forEach items="${users}" var="user">

        <tr>

            <td>${user.id}</td>

            <td>${user.name}</td>

            <td>${user.password}</td>

            <td>

                <form action="${pageContext.request.contextPath}/select/${user.id}"method="get">

                    <button type="submit">修改</button>

                </form>

            </td>

            <td>

                <form action="${pageContext.request.contextPath}/delete/${user.id}" method="post">

                    <!--将请求的方式设为DELETE-->

                    <input type="hidden" name="_method" value="DELETE">

                <button type="submit" >删除</button>

                </form>

            </td>

        </tr>

    </c:forEach>

</table>

</body>

</html>

9.update.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>Title</title>

</head>

<body>

<form action="${pageContext.request.contextPath}/update" method="post">

<table>

    <tr>

        <td>id</td>

        <td><input type="text" name="id" value="${user.id}" readonly="readonly"></td>

    </tr>

    <tr>

        <td>用户名</td>

        <td><input type="text" name="name" value="${user.name}"></td>

    </tr>

    <tr>

        <td>密码</td>

        <td><input type="text" name="password" value="${user.password}"></td>

    </tr>

</table>

    <!--将请求的方式设为PUT-->

    <input type="hidden" name="_method" value="PUT">

    <input type="submit">

</form>

</body>

</html>

SpringMVC学习笔记之---RESTful风格的更多相关文章

  1. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

  2. SpringMVC 学习笔记(五) 基于RESTful的CRUD

    1.1. 概述 当提交的表单带有_method字段时,通过HiddenHttpMethodFilter 将 POST 请求转换成 DELETE.PUT请求,加上@PathVariable注解从而实现  ...

  3. 史上最全的SpringMVC学习笔记

    SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...

  4. SpringMVC学习笔记之二(SpringMVC高级参数绑定)

    一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...

  5. springmvc学习笔记--REST API的异常处理

    前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出 ...

  6. springmvc学习笔记---面向移动端支持REST API

    前言: springmvc对注解的支持非常灵活和飘逸, 也得web编程少了以往很大一坨配置项. 另一方面移动互联网的到来, 使得REST API变得流行, 甚至成为主流. 因此我们来关注下spring ...

  7. springmvc学习笔记(简介及使用)

    springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...

  8. SpringMVC:学习笔记(3)——REST

    SpringMVC:学习笔记(3)——REST 了解REST风格 按照传统的开发方式,我们在实现CURD操作时,会写多个映射路径,比如对一本书的操作,我们会写多个URL,可能如下 web/delete ...

  9. SpringMVC:学习笔记(8)——文件上传

    SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...

随机推荐

  1. 第七周课程总结&实验报考(五)

    第七周课程总结&实验报考(五) 实验四 类的继承 实验目的: 1.理解抽象类与接口的使用: 2.了解包的作用,掌握包的设计方法. 实验要求: 1.掌握使用抽象类的方法. 2.掌握使用系统接口的 ...

  2. PTA(Basic Level)1013.数素数

    令 *P**i* 表示第 i 个素数.现任给两个正整数 M≤N≤104,请输出 *P**M* 到 *P**N* 的所有素数. 输入格式: 输入在一行中给出 M 和 N,其间以空格分隔. 输出格式: 输 ...

  3. Python 描述符 (descriptor)

    1.什么是描述符? 描述符是Python新式类的关键点之一,它为对象属性提供强大的API,你可以认为描述符是表示对象属性的一个代理.当需要属性时,可根据你遇到的情况,通过描述符进行访问他(摘自Pyth ...

  4. hadoop面试复习笔记(1)

    0.Mappereduce采用的是Master/Slaves模型 1.Hadoop是一个开源软件框架,支持支持大数据集的存储和处理.Apache Hadoop是存储和处理大数据的解决方案你是因为: ( ...

  5. Centos下安装nc命令工具安装以及使用

    1)netcat(nc)是一个简单而有用的工具,被誉为网络安全界的“瑞士军刀”,不仅可以通过使用TCP或UDP协议的网络连接读写数据,同时还是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有 ...

  6. 剑指offer-1:旋转数组的最小数字

    旋转数组的最小数字1.题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2 ...

  7. React Native 底部导航栏

    首先安装:npm install react-native-tab-navigator   然后再引入文件中    import TabNavigator from 'react-native-tab ...

  8. 在线JSON转Go 结构体,在线JSON转Go Struct

    在线转换https://oktools.net/json2go

  9. Solr IK分词器配置

    下载地址:https://search.maven.org/search?q=com.github.magese 分词器配置: 参考:https://www.cnblogs.com/mengjinlu ...

  10. 主流NoSQL数据库的分析与选择

    一因为新的数据项目的数据量级较大,因此考虑将mysql替换更高性能的数据库. 介绍一下NoSQL(不仅仅是关系型数据库)的不同种类和其擅长的业务. NoSQL的一个比较明显的特点是适用于现代大数据的存 ...