【1】web.xml中配置springmvc的配置文件路径
<!-- 配置 DispatcherServlet --><servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置 DispatcherServlet 的一个 初始化参数,其作用是配置 springmvc 配置文件的位置和名称--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><!-- mapping --><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
【2】springmvc.xml 中配置自定义拦截器
<mvc:interceptors><!-- 配置自定义的拦截器 --><bean class="com.swjtu.springmvc.interceptors.FirstInterceptor"></bean><!-- <mvc:interceptor> 可以配置作用的路径,也可以配置不作用的路径 --><mvc:interceptor><mvc:mapping path="/emps"/> <bean class="com.swjtu.springmvc.interceptors.SecondInterceptor"></bean></mvc:interceptor><!-- 配置 LocaleChangeInterceptor --><bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean></mvc:interceptors>
【3】自定义拦截器
显然 拦截器的逻辑,可以在业务逻辑之前,也可以在业务逻辑之后执行;
public class FirstInterceptor implements HandlerInterceptor {/*** 该方法在目标方法之前被调用* , 若返回值为 true, 则继续调用后续的拦截器和目标方法, * 若返回值为false, 则不会再调用 后续的拦截器和目标方法;* * 可以考虑做权限, 或者是日志 或者事务(开启事务)*/@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {System.out.println("first preHandle");return true;}/*** 调用目标方法之后, 但渲染视图之前被调用; * * 可以对 请求域中的属性或视图做修改;* */@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {System.out.println("first postHandle");}/*** 渲染视图之后被调用 ;* * 释放资源 */@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {System.out.println("first afterCompletion"); }
}
【4】访问 http://localhost:8080/springmvc02/springmvc/emps
@RequestMapping("/springmvc")
@Controller
public class EmployeeHandler { /*** 获取 员工列表* @param map* @return*/@RequestMapping("/emps")public String list(Map<String, Object> map) {System.out.println("list(Map<String, Object> map)方法开始");map.put("emps", employeeDao.getAll());System.out.println("list(Map<String, Object> map)方法结束");return LIST; }
}
打印结果
first preHandle
@ModelAttribute getEmployee(...)
list(Map<String, Object> map)方法开始
list(Map<String, Object> map)方法结束
first postHandle
first afterCompletion