springMVC学习(七)RESTful API和拦截器
RESTful API
RESTful结构:
-
每一个URI代表一种资源;
-
客户端和服务器之间,传递这种资源的某种表现层;
-
客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"
非RESTful的http的url:http://localhost:8080/items/editItems.action?id=1&….
RESTful的url是简洁的:http:// localhost:8080/items/editItems/1
RESTful结构开发步骤:
-
更改DispatcherServlet的配置,修改web.xml的url匹配模式
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
-
配置对静态资源的解析,当DispatcherServlet拦截/开头的所有请求,对静态资源的访问就报错,添加静态资源配置
<!-- 静态资源 解析 -->
<mvc:resources location="/js/" mapping="/js/**" />
<mvc:resources location="/img/" mapping="/img/**" />
/**
就表示不管有多少层,都对其进行解析,/*
代表的是当前层的所有资源
-
在Controller上使用PathVariable注解来绑定对应的参数
@PathVariable 可以将URL中占位符参数{xx}绑定到处理器类的方法形参中@PathVariable(“xx“),两个参数名必须相同
//根据商品id查看商品信息rest接口
//@RequestMapping中指定restful方式的url中的参数,参数需要用{}包起来
//@PathVariable将url中的{}中的参数和形参进行绑定
springMVC拦截器
用户请求到DispatherServlet中,DispatherServlet调用HandlerMapping查找Handler,HandlerMapping返回一个拦截链(多个拦截),springmvc中的拦截器是通过HandlerMapping发起的
开发步骤:
-
自定义拦截器,实现 HandlerInterceptor
public class HandlerInterceptor1 implements HandlerInterceptor {
//在执行handler之前来执行的
//用于用户认证校验、用户权限校验
-
配置拦截器
<!--拦截器 -->
<mvc:interceptors>
<!--多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="cn.itcast.ssm.controller.interceptor.HandlerInterceptor1"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="cn.itcast.ssm.controller.interceptor.HandlerInterceptor2"/>
</mvc:interceptor>
<mvc:interceptor>
<!-- /**可以拦截路径不管多少层 -->
<mvc:mapping path="/**" />
<bean class="cn.itcast.ssm.controller.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
-
拦截器链是按配置的拦截器顺序执行,执行preHandle是顺序执行。执行postHandle、afterCompletion是倒序执行
-
如果preHandle不放行,postHandle、afterCompletion都不执行。只要有一个拦截器不放行,controller不能执行完成
-
只有前边的拦截器preHandle方法放行,下边的拦截器的preHandle才执行。
日志拦截器或异常拦截器要求
-
将日志拦截器或异常拦截器放在拦截器链中第一个位置,且preHandle方法放行
身份认证
拦截器
public class LoginInterceptor implements HandlerInterceptor {
//在执行handler之前来执行的
//用于用户认证校验、用户权限校验
Controller