主要是这里配置拦截器信息,第一个UnicodeIntercept拦截器是对所有的.do请求进行拦截。第二个LoginIntercept拦截器是对login.do请求进行拦截。我们来看看他们分别是怎么实现拦截的
package com.xingyao.action.intercept;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class UnicodeIntercept extends HandlerInterceptorAdapter {
/**
* 在请求之前被调用
* 编码过滤器
*/
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
request.setCharacterEncoding("utf8");
response.setCharacterEncoding("utf8");
return super.preHandle(request, response, handler);
}
/**
* 在请求执行后被调用
*/
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
super.postHandle(request, response, handler, modelAndView);
}
/**
* 最后执行,一般用于释放资源
*/
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
super.afterCompletion(request, response, handler, ex);
}
}
这样就能完成拦截器的配置,我们再来走一遍springmvc对.do请求的流程
执行步骤
1、一个.do请求到来,就交给DispatchServlet进行处理
2、这时候系统会创建:视图定位器(viewResolver)和请求转发器(simpleUrlHandlerMapping)
3、系统到请求转发器的mappings里面查找对应请求的key,从而找到找到系统处理,这里是loginControl
4、在执行loginControl前后会执行对应的拦截器(拦截器执行的顺序采用栈的形式执行)
5、然后到这个servlet里面执行handleRequest方法,返回一个ModelAndView对象,里面可以封装返回视图信息、返回结果数据
6、然后再查找配置信息。从而在返回视图信息加上视图定位器的信息,转发到界面页面