- *********************preHandle********************
- class com.chenzhou.examples.erm.web.AdminController
- 2012-10-21 16:28:25 org.apache.catalina.core.StandardWrapperValve invoke
- 严重: Servlet.service() for servlet erm threw exception
- java.lang.ClassCastException: com.chenzhou.examples.erm.web.AdminController cannot be cast to org.springframework.web.method.HandlerMethod
- at com.chenzhou.examples.erm.util.interceptor.LoginInterceptor.preHandle(LoginInterceptor.java:37)
- at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:891)
- at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
- at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
- at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
- ……
根据错误提示可以看出是HandlerMethod handlerMethod = (HandlerMethod) handler;这一步报错了,根据System.out.println(handler.getClass());打印的结果可以得知handler是该请求访问的Controller类,无法转换成HandlerMethod对象。解决方案是使用
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
替换
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
因为DefaultAnnotationHandlerMapping只能返回Controller对象,不会映射到Controller中的方法级别。替换之后配置如下:
- <bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
- <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
- <property name="interceptors">
- <list>
- <bean class="com.chenzhou.examples.erm.util.interceptor.LoginInterceptor"/>
- </list>
- </property>
- </bean>
重启tomcat测试之后发现再次报错,报了另外一个错误,具体信息如下:
- 2012-10-21 16:39:39 org.apache.catalina.core.StandardWrapperValve invoke
- 严重: Servlet.service() for servlet erm threw exception
- javax.servlet.ServletException: No adapter for handler [public org.springframework.web.servlet.ModelAndView com.chenzhou.examples.erm.web.AdminController.init(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)]: Does your handler implement a supported interface like Controller?
- ……
这一次,请求根本没有到达拦截器容器就已经报错了,错误提示的意思是找不到handler对象对应的Adapter类。我在RequestMappingHandlerMapping类对应的spring-webmvc-3.1.0.RELEASE.jar 包里找到了该类对应的Adapter类:RequestMappingHandlerAdapter