SpringMVC学习之旅-应用掌握篇(12)

73 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第41天,点击查看活动详情


写在前面

当我们学习了spring框架之后,基本上来说,已经是打好了一个良好得基础了。

但是距离一个企业的基本开发需要掌握的框架,还是得经过不断得学习,才行。

这不,我们继续学习下一个框架SpringMVC

SpringMVC这个框架,一般来说,用来作为我们项目得Controller层,用来接收用户得输入,然后选择相应得视图回显展示给用户。

MVC作为WEB项目开发的核心环节,正如三个单词的分解那样,C(控制器)将V(视图、用户客户端)与M(javaBean:封装数据)分开构成了MVC。

对于以前得项目来说,还有出现Struts得,但现在基本都很少了。

Struts1(现在一般不用),Struts2(一般老项目使用)等等。

这不,接下来就是spring mvc框架的学习之旅了,希望可以帮助到大家。

一、拦截器应用

SpringMVC 的拦截器主要是针对特定处理器进行拦截的。

1.1 拦截器介绍

  • SpringMVC 拦截器( Interceptor )实现对每一个请求处理前后进行相关的业务处理,类似与servlet 中的Filter。

  • SpringMVC 中的 Interceptor 拦截请求是通过 HandlerInterceptor 接口来实现的。

在 SpringMVC 中定义一个 Interceptor 非常简单,主要有4种方式:

  1. 实现 SpringMVC 的 HandlerInterceptor 接口;
  2. 继承实现了 HandlerInterceptor 接口的类,比如 SpringMVC 已经提供的实现了 HandlerInterceptor 接口的抽象类 HandlerInterceptorAdapter ;
  3. 实现 SpringMVC 的 WebRequestInterceptor 接口;
  4. 继承实现了 WebRequestInterceptor 的类;

1.2 定义拦截器

实现 HandlerIntercepter 接口:

public class MyHandlerIntercepter implements HandlerInterceptor{

    //Handler执行前调用
    //应用场景:登录认证、身份授权
    //返回值为true则是放行,为false是不放行
    @Override
    public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
        return false;
    }

    //进入Handler开始执行,并且在返回ModelAndView之前调用
    //应用场景:对ModelAndView对象操作,可以把公共模型数据传到前台,可以统一指定视图
    @Override
    public void postHandle(HttpServletRequest request,
        HttpServletResponse response, Object handler,
        ModelAndView modelAndView) throws Exception {

    }

    //执行完Handler之后调用
    //应用场景:统一异常处理、统一日志处理
    @Override
    public void afterCompletion(HttpServletRequest request,
        HttpServletResponse response, Object handler, Exception ex)
        throws Exception {

    }
}

1.3 配置拦截器

SpringMVC 拦截器是绑定在 HandlerMapping 中的,即:如果某个 HandlerMapping 中配置拦截,则该 HandlerMapping 映射成功的 Handler 会使用该拦截器。

SpringMVC 的全局拦截器配置,其实是把配置的拦截器注入到每个已初始化的 HandlerMapping 中了。

<!-- 配置全局mapping的拦截器 -->
<mvc:interceptors>

    <!-- 公共拦截器可以拦截所有请求,而且可以有多个 -->
    <bean class="com.llsydn.ssm.interceptor.MyHandlerInterceptor" />
    <bean class="com.llsydn.ssm.interceptor.MyHandlerInterceptor2" />

    <!-- 如果有针对特定URL的拦截器,则进行以下配置 -->
    <mvc:interceptor>
        <!-- /**表示所有URL和子URL路径 -->
        <mvc:mapping path="/orders/**" />

        <!-- 特定请求的拦截器只能有一个 -->
        <bean class="com.llsydn.ssm.interceptor.MyHandlerInterceptor3" />
    </mvc:interceptor>
</mvc:interceptors>

1.4 多拦截器拦截规则

如果有多个拦截器,那么配置到springmvc.xml中最上面的拦截器,拦截优先级最高。


好了,以上就是SpringMVC学习之旅-应用掌握篇(12) 的全部内容了。

今天就先到这里了,后面的内容,留下次分享了,先溜了!!!^_^

如果觉得写得不错的,帮忙点赞、评论、收藏一下呗!!!

image.png