SpringMVC学习笔记之---RESTful风格
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风格的更多相关文章
- springmvc学习笔记(19)-RESTful支持
springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...
- SpringMVC 学习笔记(五) 基于RESTful的CRUD
1.1. 概述 当提交的表单带有_method字段时,通过HiddenHttpMethodFilter 将 POST 请求转换成 DELETE.PUT请求,加上@PathVariable注解从而实现 ...
- 史上最全的SpringMVC学习笔记
SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...
- SpringMVC学习笔记之二(SpringMVC高级参数绑定)
一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...
- springmvc学习笔记--REST API的异常处理
前言: 最近使用springmvc写了不少rest api, 觉得真是一个好框架. 之前描述的几篇关于rest api的文章, 其实还是不够完善. 比如当遇到参数缺失, 类型不匹配的情况时, 直接抛出 ...
- springmvc学习笔记---面向移动端支持REST API
前言: springmvc对注解的支持非常灵活和飘逸, 也得web编程少了以往很大一坨配置项. 另一方面移动互联网的到来, 使得REST API变得流行, 甚至成为主流. 因此我们来关注下spring ...
- springmvc学习笔记(简介及使用)
springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...
- SpringMVC:学习笔记(3)——REST
SpringMVC:学习笔记(3)——REST 了解REST风格 按照传统的开发方式,我们在实现CURD操作时,会写多个映射路径,比如对一本书的操作,我们会写多个URL,可能如下 web/delete ...
- SpringMVC:学习笔记(8)——文件上传
SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...
随机推荐
- numpy使用数组进行数据处理
numpy使用数组进行数据处理 meshgrid函数 理解: 二维坐标系中,X轴可以取三个值1,2,3, Y轴可以取三个值7,8, 请问可以获得多少个点的坐标? 显而易见是6个: (1,7)(2,7) ...
- Python 集合的各种操作 数学运算 关系操作 增删改查 生成式
# 集合是无序的 是可变的 不能重复 允许数学运算 分散存储 # 创建# collegel = {'哲学','经济学','法学','教育学'}## # {'教育学', '经济学', '法学', '哲学 ...
- python中魔法方法__str__与__repr__的区别
提出问题 当我们自定义一个类时,打印这个类对象或者在交互模式下直接输入这个类对象按回车,默认显示出来的信息好像用处不大.如下所示 In [1]: class People: ...: def __in ...
- numpy-查找操作大全
本文记录日常工作中遇到的查找操作,持续更新. 注意:输入必须是 数组,不能是 list 极值 min,max 返回极值 argmin(a, axis=None, out=None), 返回极值所在的位 ...
- oracle函数nvl,nvl2的区别,nullif函数,coalesce函数
在oracle中用nvl和nvl2函数来解决为空的情况,例如,如果奖金为空,则为它指定一个数.也就是nvl(奖金字段,指定的奖金),但是两个的类型要一致. 1)nvl()函数 SQL> sele ...
- React Native 开源项目汇总
最近闲来无事,学习了React Native开发Android APP,自我感觉RN APP的效果和Native APP比还是蛮不错,以下是找到的一些优秀源码,仅供学习参考... React Nati ...
- 1.Java 字符分割
使用方法 性能比较 使用方法 或|,点.,加+,乘*,在字符串中出现时,如果这个字符串需要被split,则split时候,需要在前面加两个反斜杠. 与&,在split时候,不需要转义. 一.j ...
- Centos 7.5 双网卡内外网同时访问路由设置
说明:服务器有两张网卡分别是eth0.eth1,eth0配置内网IP:192.168.1.1/24,eth1配置外网IP:10.1.1.1/24:要求192.168.0.0/16网段走网卡eth0,网 ...
- LVM逻辑卷理论及配置
LVM的概念 LVM 是 Logical Volume Manager 的简称,译为中文就是逻辑卷管理.它是 Linux 系统对磁盘分区的一种管理机制. LVM 是在硬盘分区之上建立一个逻辑层,这个逻 ...
- Mysql使用Merge引擎分表--方式及优缺点
merge:是SQL语句的一种.具体来说,MERGE语句会检查原数据表记录和目标表记录.如果记录在原数据表和目标表中均存在,则目标表中的记录将被原数据表中的记录所更新(执行Update操作):如果目标 ...