ssm(五)----过滤拦截演示

FirstController.java


@Controller
@RequestMapping("/first")
public class FirstController {
    @RequestMapping("/a")
    public void a(){
        System.out.println("aa");
    }

    @RequestMapping("/b")
    public void b(){
        System.out.println("bb");
    }

    @RequestMapping("/c")
    public void c(){
        System.out.println("cc");
    }
}

FirstFilter.java

@WebFilter("*.do")
public class FirstFilter implements Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("First过滤器来了!");
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("First过滤器又来了!");
    }

    @Override
    public void destroy() {

    }
}

FirstInterceptor.java

@Component("firstInterceptor")
public class FirstInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("我是first拦截器!");//在控制器之前执行
        return true;//true等同于doFilter,放行 false不放行
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("我又是first拦截器!");//控制器之后,视图解析器之前执行
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("我还是first拦截器!");//控制器之后,视图解析器之后执行
    }
}

/**
 * 拦截器和过滤器的区别?
 * 1.过滤器是Servlet的内容,而拦截器是SpringMVC的内容;
 * 2.过滤器的响应级别高,过滤范围大;而拦截器只能处理SpringMVC的请求;
 * 3.过滤器在服务器启动时创建,而拦截器是在applicationContext.xml加载时创建
 * 4.过滤器拦截比较死,而拦截器比较灵活,可以有全局和局部,可以规定有哪些拦截,哪些不拦截
 */

applicationContext.xml

<?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
       ">

        <!--IOC注解-->
        <context:annotation-config/>
        <context:component-scan base-package="controller,interceptor"/>

        <!--MVC注解-->
        <mvc:annotation-driven/>

        <!--全局拦截器-->
        <mvc:interceptors>
                <!--配置的是一个全局拦截器,两个作用是一样的,第一种需要扫描包,需要加上创建对象注解-->
                <!--<ref bean="firstInterceptor"/>-->
                <!--<bean class="interceptor.FirstInterceptor"/>-->

                <!--配置局部拦截器-->
                <mvc:interceptor>
                        <!--只拦截a.do的请求-->
                        <!--<mvc:mapping path="/first/a.do"></mvc:mapping>-->

                        <mvc:mapping path="/first/*.do"/><!--对谁拦截-->
                        <mvc:exclude-mapping path="/first/a.do"/><!--对谁不拦截-->
                        
                        <!--相当于全局拦截器-->
                        <!--<mvc:mapping path="/*"></mvc:mapping>-->
                        <ref bean="firstInterceptor"></ref>
                </mvc:interceptor>
        </mvc:interceptors>

</beans>

web.xml

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <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:applicationContext.xml,classpath:applicationContext2.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值