开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
视图
InternalResourceView
请求后会进行内部转发,但是不会经过thymeleaf渲染所以不常用
@Controller
public class TestViewController {
@RequestMapping("/test/view/forward")
public String testInterResourceView(){
return "forward:/test/model";
}
}
RedirectView
请求后会进行重定向
@RequestMapping("/test/view/redirect")
public String testRedirectView(){
return "redirect:/test/model";
}
视图控制器
之前定义了一个控制器,在访问首页时触发:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ProtalMapping {
@RequestMapping("/")
public String protal(){
return "index";
}
}
但只为了实现这一个控制器而写了一个类未免有点小题大做,因此可以通过视图控制器<controller-view>方式来定义
<mvc:view-controller path="/" view-name="index"></mvc:view-controller>
这样在访问根路径时就会自动跳转到index.html,方便许多,但是又引入了一个新的问题:
当时用该控制器后,只有视图控制器所设置的请求会被处理,其他的请求都是404
此时就必须配置一个新的标签<mvc:annotation-driven/>就可以直接解决该问题
RESTful
REST: Representational State Transfer,表现层资源状态转移。
可以理解为:restful只关心我们需要的资源,而不在意资源的操作方式,例:假如对user库进行资源的增删改查,那么这些操作都是对user库的操作,restful就可以将他设置为/user路径,之后的操作通过不同的请求方式来判断如何操作数据库即:
GET:获取资源
POST:新建资源
PUT:更新资源
DELETE:删除资源
| 操作 | 传统方式 | REST风格 |
|---|---|---|
| 查询操作 | getUserById?id=1 | user/1 —> get请求方式 |
| 保存操作 | saveUser | user —> post请求方式 |
| 删除操作 | deleteUser?id=1 | user/1 —> delete请求方式 |
| 更新操作 | updateUser | user —> put请求方式 |
数据库操作
查询操作
GET方式
@Controller
public class TestRestController {
@RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
public String getUserById(@PathVariable("id") int id){
System.out.println("根据id查询信息-->/user/"+id+"-->get");
return "success";
}
}
添加操作
POST方式
@RequestMapping(value ="/user",method = RequestMethod.POST)
public String inserUser(){
System.out.println("成功添加用户信息");
return "success";
}
更新操作
HiddenHttpMethodFilter
表单中没有PUT和DELETE请求,所以可以通过HiddenHttpMethodFilter过滤器来获取这两种请求方式
web.xml加上
<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>
之后表单中加上name="_method" value="put"即可 (需注意method必须为post才行)
<form th:action="@{/user}" method="post">
<input type="hidden" name="_method" value="put">
<input type="submit" value="更新用户数据">
</form>
这样就可以成功获取put参数了
@RequestMapping(value = "/user",method = RequestMethod.PUT)
public String updateUser(){
System.out.println("成功更新用户数据");
return "success";
}
删除操作
删除操作同理,DELET请求方式
@RequestMapping(value = "/user/{id}",method = RequestMethod.DELETE)
public String deleteUser(@PathVariable("id") int id){
System.out.println("根据id删除信息-->/user/"+id+"-->get");
return "success";
}
HTML
<form th:action="@{/user/2}" method="post">
<input type="hidden" name="_method" value="delete">
<input type="submit" value="删除用户数据">
</form>