为什么使用Restful风格;
- 强调HTTP应当以资源为中心,并且规范了资源URI的风格;
- 规范了HTTP请求动作(PUT,POST等)的使用,具有对应的语义;
遵循REST规范的Web应用将会获得下面好处:
URL具有很强可读性的,具有自描述性;
资源描述与视图的松耦合;
1.环境准备
导入web,thymeleaf启动器和jquery的jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.0.0</version>
</dependency>
2.创建Vo层
public class Book {
String isbn;
String name;
int price;
Date publishDate;
public Book(String isbn, String name, int price, Date publishDate) {
this.isbn = isbn;
this.name = name;
this.price = price;
this.publishDate = publishDate;
}
public Date getPublishDate() {
return publishDate;
}
public void setPublishDate(Date publishDate) {
this.publishDate = publishDate;
}
public Book(String isbn, String name, int price) {
this.isbn = isbn;
this.name = name;
this.price = price;
}
public Book() {
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "Book{" +
"isbn='" + isbn + '\'' +
", name='" + name + '\'' +
", price=" + price +
", publishDate=" + publishDate +
'}';
}
}
3.创建Service层(模拟)
static Map<String,Book> map=new HashMap<String,Book>();
//初始数据
static{
map.put("123456",new Book("123456","世界是平的",45,new Date()));
map.put("123457",new Book("123457","正年的奇迹",75,new Date()));
map.put("123458",new Book("123458","浪潮之耟",69,new Date()));
map.put("123459",new Book("123459","数学 之美丽",58,new Date()));
}
public static void save(Book book){
map.put(book.getIsbn(),book);
}
public static void update(Book book){
map.put(book.getIsbn(),book);
}
public static void delete(String isbn){
map.remove(isbn);
}
public static List<Book> getAll(){
return new ArrayList<Book>(map.values());
}
public static Book getBook(String isbn){
return map.get(isbn);
}
4.创建Handler
@Controller
@RequestMapping("/book")
public class BookHandler {
@GetMapping("")
public String getAll(Map<String,Object> map){
map.put("list", BookService.getAll());
System.out.println("查询所有");
System.out.println(map);
return "list";
}
@GetMapping("/{isbn}")
public String getBook(Map<String,Object> map,@PathVariable("isbn") String isbn){
map.put("book", BookService.getBook(isbn));
System.out.println("查询一个"+map);
return "book";
}
@DeleteMapping("/{isbn}")
public String delete(@PathVariable("isbn") String isbn){
BookService.delete(isbn);
System.out.println("删除一个"+isbn);
return "redirect:/book";
}
@PutMapping("")
public String update(Map<String,Object> map,Book book){
BookService.update(book);
System.out.println("修改一个:"+book);
return "redirect:/book";
}
@PostMapping("")
public String save(Map<String,Object> map,Book book){
BookService.save(book);
System.out.println("增加一个:"+book);
return "redirect:/book";
}
@GetMapping("/index")
public String index(){
return "book";
}
}
5.查询列表页面(list.html)
此页面放在template文件夹下;
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table th:border="1" width="80%">
<tr>
<td>序号</td>
<td>isbn</td>
<td>name</td>
<td>price</td>
<td>publishDate</td>
<td>操作</td>
</tr>
<tr th:each="book:${list}">
<td th:text="${book.isbn}"></td>
<td th:text="${book.isbn}"></td>
<td th:text="${book.name}"></td>
<td th:text="${book.price}"></td>
<td th:text="${#dates.format(book.publishDate,'yyyy-MM-dd')}"></td>
<td>
<a th:href="@{/book/}+${book.isbn}">编辑</a>
<button th:attr="del_url=@{/book/}+${book.isbn}" name="del_button">删除</button>
</td>
</tr>
</table>
<a th:href="@{/book/index}" th:value="添加新图书">添加新图书</a>
<!--删除操作-->
<form method="post" id="form_delete">
<input type="hidden" name="_method" value="delete"/>
</form>
<!--导入jquery.js-->
<script type="text/javascript" th:src="@{/webjars/jquery/3.0.0/jquery.js}"></script>
<!--删除操作-->
<script>
$(function () {
alert("start....");
$("button[name='del_button']").click(function () {
alert($(this).attr("del_url"));
$("#form_delete").prop("action", $(this).attr("del_url")).submit();
});
});
</script>
</body>
</html>
6.添加和修改图书页面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form th:action="@{/book/}" method="post">
<!--判断book是否为空来确定添加还是修改-->
<input type="hidden" name="_method" th:value="put" th:if="${book!=null}" ><br/>
<input type="text" name="isbn" th:value="${book!=null? book.isbn : ''}" placeholder="编号"><br/>
<input type="text" name="name" th:value="${book!=null? book.name : ''}" placeholder="书名"><br/>
<input type="text" name="price" th:value="${book!=null? book.price : ''}" placeholder="价格"><br/>
<input type="text" name="publishDate" th:value="${book!=null? #dates.format(book.publishDate,'yyyy-MM-dd'): ''}" placeholder="出版日期"><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>