问题描述
对于Spring mvc的拦截器我觉的应该是请求什么就该拦截什么,没有请求的就不该被拦截,但是不知道为什么,在如下的代码中,当我请求/路径的时候,我并没有请求index.html呀,为什么执行完控制器的代码和拦截器的postHandle方法之后,又执行了一次preHandle。我实在是想不明白为什么会是这样。详细内容如下:
相关代码
项目名称:codesound
Controller代码
@RequestMapping(value="/",method=RequestMethod.GET)
public String domain() {
System.out.println("控制器被调用");
return "index";
}
拦截器LoginInterceptor代码
package com.xy.codesound.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle:"+request.getRequestURL());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion");
}
}
拦截器配置信息
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
mapping="/resources/**">
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
10485760
UTF-8
base-package="com.xy.codesound.web">
当浏览器发起127.0.0.1:8080/codesound/请求,我期待的控制台输出结果是
preHandle:http://127.0.0.1:8080/codesound/
控制器被调用
postHandle
afterCompletion
实际看到的错误信息是
preHandle:http://127.0.0.1:8080/codesound/
控制器被调用
postHandle
preHandle:http://127.0.0.1:8080/codesound/WEB-INF/html/index.html
postHandle
afterCompletion
afterCompletion