1、什么是restful風格
大家在做Web開發的過程中,method常用的值是get和post. 可事實上,method值還可以是put和delete等等其他值。
既然method值如此豐富,那么就可以考慮使用同一個url,但是約定不同的method來實施不同的業務,這就是Restful的基本考慮。
2、restful風格獨特之處
2.1 url的不同
- 非restful風格:http://.../queryItems.action?id=001&type=T01
- restful風格:http://..../items/001
2.2 請求方法的不同
學習javaweb的時候,我們只知道了get和post兩種請求方法,當restful卻不止這兩種
- 獲取數據:GET請求
- 增加數據:POST請求
- 修改數據:PUT請求
- 刪除數據:DELETE請求
3、ssm實現restful風格增刪改查
3.1 配置HiddenHttpMethodFilter過濾器
瀏覽器form表單只支持get和post請求,而delete和put請求並不支持。HiddenHttpMethodFilter是spring中自帶的一個過濾器,可以將瀏覽器表單請求轉換為標准的http請求,使它們支持get、post、delete、put請求。
<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>
3.2 在jsp中如何指定form表單的請求方式
在表單中加入隱藏域,name屬性一定要為 ”_method“,這樣剛才配的HiddenHttpMethodFilter攔截器才能夠識別,value屬性就是我們需要的請求方式。這樣springmvc就會幫我們做
<input type="hidden" name="_method" value="PUT">
3.3 restful參數傳遞
在獲取一條數據時或刪除一條數據時,一般情況下前端要向后端傳入一個id值,restful風格的參數傳遞與之前講的注解@RequestMapping()注解映射請求中的URI模板一樣,將參數作為變量放在URL中。
示例:
前端傳入id值為10000,id為以參數變量
前端瀏覽器URL:http://www.example.com/users/10000
@RequestMapping()注解:@RequestMapping("/users/{id}")
方法中接收id:public String getOneUser(@PathVariable("id") int id){}
3.4增刪改查實例
controller:
@Controller
public class UserController {
@Resource(name="userService")
UserService userService;
/*
* 查詢所有用戶
*/
@RequestMapping(value="/users",method=RequestMethod.GET)
public String index(Model model) {
List<User> users = userService.getAllUser();
model.addAttribute("users", users);
return "users";
}
/*
* 轉發到添加用戶的視圖
*/
@RequestMapping("/addUserView")
public String addUserView() {
return "add";
}
/*
* 添加用戶
*/
@RequestMapping(value="/addUser",method=RequestMethod.POST)
public String addUser(User user) {
userService.addUser(user);
return "redirect:/users";
}
/*
* 獲取所要修改用戶的信息
*/
@RequestMapping(value="/user/{id}",method=RequestMethod.GET)
public String updateUserView(@PathVariable("id") Integer id,Model model) {
User user = userService.getOneUserById(id);
model.addAttribute("user",user);
return "updateUserView";
}
/*
* 修改用戶信息
*/
@RequestMapping(value="/user",method=RequestMethod.PUT)
public String updateUser(User user) {
userService.updateUser(user);
return "redirect:/users";
}
/*
* 刪除用戶
*/
@RequestMapping(value="/user/{id}",method=RequestMethod.DELETE)
public String deleteUser(@PathVariable("id") Integer id) {
userService.deleteUser(id);
return "redirect:/users";
}
}
jsp:
users.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>獲取全部用戶信息</title>
</head>
<body>
<table border="1" >
<tr>
<th>編號</th>
<th>用戶名</th>
<th>密碼</th>
<th colspan="2">操作</th>
</tr>
<c:forEach var="user" items="${requestScope.users }" >
<tr>
<td>${user.id }</td>
<td>${user.username }</td>
<td>${user.password }</td>
<td><a href="/ssm/user/${user.id }">修改</a></td>
<td><form action="/ssm/user/${user.id }" method="post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="刪除">
</form></td>
</tr>
</c:forEach>
</table>
<a href="/ssm/addUserView">添加員工</a>
</body>
</html>
add.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="/ssm/addUser" method="post">
用戶名:<input type="text" name="username"><br><br>
密 碼:<input type="text" name="password"><br><br>
<input type="submit" value="提交">
</form>
</body>
</html>
updateUserView.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="/ssm/user" method="post">
<input type="hidden" name="_method" value="PUT">
<table border="1">
<tr>
<th>編號</th>
<td><input type="text" name="id"
value="${requestScope.user.id }"></td>
</tr>
<tr>
<th>用戶名</th>
<td><input type="text" name="username"
value="${requestScope.user.username }"></td>
</tr>
<tr>
<th>密碼</th>
<td><input type="text" name="password"
value="${requestScope.user.password }"></td>
</tr>
<tr>
<td><input type="submit" value="修改"></td>
</tr>
</table>
</form>
</body>
</html>
