SpringMvc
Interceptors and filters
一、自定义拦截器
1.编写MyIntercepetor类继承HandlerInterceptor类
package com.kuang.config;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyIntercepetor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("=====================处理前========================");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("=====================处理后========================");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("=====================清理========================");
}
}
2.编写一个拦截用户登录的拦截器
package com.kuang.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
if (request.getRequestURI().contains("login")) {
return true;
}
if(request.getSession().getAttribute("username") != null) {
return true;
}
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
return false;
}
}
3.配置拦截器
<!--拦截器配置-->
<mvc:interceptors>
<mvc:interceptor>
<!--拦截所有请求-->
<mvc:mapping path="/**"/>
<bean class="com.kuang.config.MyIntercepetor"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.kuang.config.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
二、自定义过滤器(解决编码问题)
1.编写EncodingFilte类继承Filter类
package com.kuang.config;
import javax.servlet.*;
import java.io.IOException;
public class EncodingFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
filterChain.doFilter(servletRequest,servletResponse);
}
public void destroy() {
}
}
2.配置过滤器
<!--自定义过滤器-->
<filter>
<filter-name>encoding</filter-name>
<filter-class>com.kuang.config.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>'/*'</url-pattern>
</filter-mapping>
3.使用SpringMvc提供的过滤器直接解决乱码问题
<filter>
<filter-name>encoding</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>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>'/*'</url-pattern>
</filter-mapping>
三、拦截器与过滤器的注意点
1.过滤器
过滤器是所有javaweb项目都可以用的
在配置文件web.xml中配置过滤器
在url-pattern中配置了'/*'之后,可以对所有要访问的资源进行拦截(包括静态资源)
2.拦截器
拦截器是所有SpringMvc项目可以用的
在配置文件springmvc-servlet.xml中配置拦截器
拦截器只会拦截访问的控制器方法, 如果访问的是jsp/html/css/image/js是不会进行拦截的
3.过滤器与拦截器的区别
拦截器是AOP思想的具体应用
Integrated SSM framework