一、RestFul 是一个请求路径的风格,将请求参数放在url中以/来分割请求参数。
url : /delete/1 1就是参数
RestFul的请求方式对应的是不同的操作
get : 查询
post : 插入
delete : 删除
put : 修改
二、RestFul案例
创建模型(User实体类,UserDao)
// 实体类
public class User {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public User() {
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
}
// UserDao
@Repository
public class UserDao {
private static LinkedHashMap<Integer, User> map = new LinkedHashMap<>();
static {
map.put(1001,new User(1001,"test01","test01"));
map.put(1002,new User(1002,"test02","test02"));
map.put(1003,new User(1003,"test03","test03"));
}
public void addUser(User user) {
map.put(user.getId(),user);
}
public Collection<User> getAllUser() {
return map.values();
}
public void deleteUserById(Integer id) {
if (map.get(id) != null) {
map.remove(id);
}
System.out.println("没有id为" + id + "的用户");
}
}
查询操作
@Controller
public class RestFulController{
@RequestMapping(value = "/user", method = RequestMethod.GET)
public String getAllUser(HttpServletRequest request) {
// 查询用户
Collection users = dao.getAllUser();
// 将结果存放到作用域中
request.setAttribute("users",users);
// 返回到页面
return "index";
}
}
添加操作
@RequestMapping(value = "/user", method = RequestMethod.POST)
public String getAllUser(User user, HttpServletRequest request) {
dao.addUser(user);
// 重定向
return "redirect:/user";
}
三、请求转发 和 重定向
有前缀的情况
前缀为 forward: + 请求地址,转发到地址。视图类为 InternalResourceView,如果没有配置其他视图解析器默认也是这个
前缀为 redirect: + 请求地址,重定向到地址。视图类为RedirectView
没有前缀的情况
视图解析器的前缀 + 返回的视图名 + 后缀 ,然后以转发的形式访问。
四、开启delete 、put请求
form表单只能发送get,post请求,如果要发送delete,put请求需要配置HiddenMethodFilter过滤器来开启。
<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>
想要发送delete、put请求,必须要有_method请求参数,value的值为请求方式
<form th:action="@{/user/1}" method="post">
<input type="hidden" name="_method" value="delete"
</form>
a标签发送delete、put请求
// html代码
<a th:href="@{/user/1}" id="delete">发送delete请求</a>
<a th:href="@{/user}" id="put">发送put请求</a>
<form method="post" id="requestMethod">
<input type="hidden" name="_method" id="method" /input>
</form>
如果要使用jquery要在springmvc配置文件中开启默认servlet处理器
<mvc:default-servlet-handler></mvc:default-servlet-handler>
// jquery代码
$(function() {
$("#delete").click(function() {
$("#method").attr("value","delete");
$("#request").attr("action",this.href).submit();
return false;
})
$("#put").click(function() {
$("#method").attr("value","put");
$("#request").attr("action",this.href).submit();
return false;
})
})
使用配置文件来设置请求控制器
<mvc:view-controoler path="/" viewname="index"> </mvc:view-controller>
如果使用了配置文件来设置控制器,那用注解来设置的控制器失效。需要开启mvc注解
<mvc:annotation-driven></mvc:annotation-driven>
删除操作
@RequestMapping(value="/user/{id}", method = RequestMethod.DELETE)
public String deleteUserById(@PathVariable("id") Integer id) {
dao.deleteUserById(id);
return "redirect:/user";
}
SpringMVC 支持的路径风格
1.ant风格
1.? 表示任意一个单个字符
2.* 表示任意多个字符,可以是零个
3.** 表示多层目录,可以是零层目录
2.rest风格
将请求参数放到请求地址中,参数以/来分割。这样的请求地址被叫做rest风格的路径方式
获取rest风格请求参数
// 使用 @PathVariable 来获取rest风格 的请求参数
// /user/{id} {} 占位符
@RequestMapping(value="/user/{id}", method = RequestMethod.DELETE)
public String deleteUserById(@PathVariable("id") Integer id) {
dao.deleteUserById(id);
return "redirect:/user";
}
修改操作
@RequestMapping(value="/user", method = RequestMethod.PUT)
public String deleteUserById(User user) {
dao.addUser(user);
return "redirect:/user";
}
五、解决乱码问题
如果请求为中文时,服务器获取的请求参数会发生乱码为了解决乱码问题。配置CharacterEncodingFilter
<filter>标签:return,请求,SpringMVC,public,user,RestFul,id,String From: https://blog.51cto.com/u_15497049/5873675
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 设置请求参数编码 --!>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!-- 设置响应编码 --!>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>