web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!--过滤器:处理中文乱码--> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--Springmvc核心servlet 配置文件: 第一种:【servlet-name】-servlet.xml,比如:springmvc-servlet.xml 第二种:改变命名空间namespace 必须配置文件放在web-inf目录下 第三种:contextConfigLocation--> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:imoocmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- <mvc:annotation-driven > <!– 消息转换器 –> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> </mvc:message-converters> </mvc:annotation-driven>--> <!-- 配置自动扫描 --> <context:component-scan base-package="com.imooc.web"></context:component-scan> <!--拦截器的注册--> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/user/**"/> <bean class="com.imooc.core.LogInterceptor"/> </mvc:interceptor> <mvc:interceptor> <!-- <mvc:mapping path="/user/search"/> <mvc:mapping path="/user/updatepwd"/> <mvc:mapping path="/user/updateheaderPic"/>--> <mvc:mapping path="/user/**"/> <!--exclude-mapping在所有拦截中进行排除,一般在通配符中会有意义--> <mvc:exclude-mapping path="/user/updatepwd"/> <mvc:exclude-mapping path="/user/updatebackground/*"/> <bean class="com.imooc.core.LoginInterceptor"/> </mvc:interceptor> </mvc:interceptors> <!--映射物理路径--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
public class LogInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler) throws Exception { System.out.println("LogInter:---->1:== ketetip ====preHandle============>"); System.out.println("LogInter:-------当前执行的类是:"+handler.getClass()); System.out.println("LogInter:-------当前执行的类是:"+handler); return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { System.out.println("LogInter:---->3:== ketetip ====postHandle============>"); } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { System.out.println("LogInter:---->4:== ketetip ====afterCompletion============>"); } }
package com.imooc.core; import com.imooc.bean.User; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse httpServletResponse, Object o) throws Exception { User user = (User)request.getSession().getAttribute("session_user"); /* if(user==null){ System.out.println("&&LoginInter:1:ketetip=== --Login-- ===preHandle====>"); httpServletResponse.sendRedirect("/login"); return false; }*/ System.out.println("&&LoginInter:1:ketetip===--Login--===preHandle============>"); return true;//如果返回false,会终止所有的请求 } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { System.out.println("&&LoginInter:3:ketetip==--Login--====postHandle============>"); } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { System.out.println("&&LoginInter:4:ketetip===--Login--===afterCompletion============>"); } }
http://localhost:8080/user/search
LogInter:---->1:== ketetip ====preHandle============>
LogInter:-------��ǰִ�е����ǣ�class com.imooc.web.UserController
LogInter:-------��ǰִ�е����ǣ�com.imooc.web.UserController@d0573a
&&LoginInter:1:ketetip===--Login--===preHandle============>
2:ketetip======search============>
&&LoginInter:3:ketetip==--Login--====postHandle============>
LogInter:---->3:== ketetip ====postHandle============>
&&LoginInter:4:ketetip===--Login--===afterCompletion============>
LogInter:---->4:== ketetip ====afterCompletion============>
根据运行结果可以看出,传入的时候是根据配置的先后顺序执行--》然后执行具体方法--》返回的时候是后边的先执行,配置在前面的后执行
package com.imooc.web; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("/user") public class UserController { //查询用户 @RequestMapping("/search") public String search(){ System.out.println("2:ketetip======search============>"); return "user/search"; } //查询用户 @RequestMapping("/updatepwd") public String updatepwd(){ System.out.println("ketetip== login ====updatepwd============>"); return "user/updatepwd"; } //查询用户 @RequestMapping("/updateheaderPic") public String updateheaderPic(){ System.out.println("ketetip=== login ===updateheaderPic============>"); return "user/updateheaderPic"; } //查询用户 @RequestMapping("/updatebackground/{id}") public String updatebackground(){ System.out.println("ketetip==== login ==updateheaderPic============>"); return "user/updateheaderPic"; } }