什么是RESTful?
RESTful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
资源:互联网所有的事物都可以被抽象成资源
操作资源方法:使用Post、Delete、put、get,使用不同的方法对资源进行操作
分别 添加、删除、修改、查询
传统方式操作资源
http://127.0.0.1/item/queryItem.action?id=1 查询,GET
http://127.0.0.1/item/saveItem.action 新增,POST
http://127.0.0.1/item/updateItem.action 更新,POST
http://127.0.0.1/item/deleteItem.action?id=1 删除,GET或POST
使用RESTful操作资源
http://127.0.0.1/item/1 查询,GET
http://127.0.0.1/item 新增,POST
http://127.0.0.1/item 更新,PUT
http://127.0.0.1/item/1 删除,DELETE
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。
从URL地址上获取参数
需求:http://127.0.0.1/product/1 查询,GET
我们需要从URL地址上获取商品ID
- 使用注解@RequestMapping(/product/{XXX})声明请求的URL
- {XXX}叫做占位符,请求的URL地址/product/1
(2)@PathVariable获取URL上的数据
RequestMapping中占位符的名称和形参的名字要一致。
如果不一致
@Controller
public class DemoController {
@Autowired
private ProductService productService;
@RequestMapping("/product/{productId}")
public Product queryProductById(@PathVariable("productId") Integer id){
System.out.println(id);
return null;
}
}
注意:
@PathVariable和@RequestParam区别
@PathVariable
获取URL地址上参数
@RequestParam
获取请求(request)参数
拦截器
定义,是什么
Spring web Mvc的处理器拦截器类似于Servlet开发中过滤器filter,用于对 处理器(控制器)进行预处理或者后处理
拦截器使用
定义拦截器
Interceptor1:
public class Interceptor1 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("Interceptor1 preHandle1");
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("Interceptor1 postHandle1");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("Interceptor1 afterCompletion1");
}
}
Interceptor2
public class Interceptor2 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("Interceptor2 preHandle2");
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("Interceptor2 postHandle2");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("Interceptor2 afterCompletion2");
}
}
拦截器配置
在springMVC中配置:
<!--拦截器设置-->
<mvc:interceptors>
<mvc:interceptor>
<!--所有请求都拦截-->
<mvc:mapping path="/**"/>
<!--配置具体的拦截器-->
<bean class="com.huadian.controller.Interceptor1"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.huadian.controller.Interceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>
测试
随便发送一个请求,看控制器输出