SSM整合

116 阅读2分钟

表现层与前端数据传输协议定义

1655371577(1).png

异常处理

1655430645(1).png

在哪里处理异常?

  • 异常要分类处理
  • 所有的异常均抛出到表现层进行处理
  • 异常要采取AOP思想处理,(表现层处理异常,每个方法中单独书写,代码书写量大且意义不强)

采用spring异常管理器

1655431121(1).png

1655431981(1).png

24d97bda4b6c0c14584dcbe8d2c0ea4.png

10fe7544c601aafc080e9baeb415a4d.png

f325694898885125f94995d35aa9eb9.png

异常分类

1655432582(1).png

b3a851e412a8a46694fefeab4a733da.png 在业务代码层面加入异常识别

1655433844(1).png

前台后台协议联调

拦截器

创建拦截器

b7847eb6680faa0e479104160e938fb.png

@Component
//定义拦截器类,实现HandlerInterceptor接口
//注意当前类必须受Spring容器控制
public class ProjectInterceptor implements HandlerInterceptor {
    @Override
    //原始方法调用前执行的内容
    //返回值类型可以拦截控制的执行,true放行,false终止
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String contentType = request.getHeader("Content-Type");
        HandlerMethod hm = (HandlerMethod)handler;
        System.out.println("preHandle..."+contentType);
        return true;//false将终止被拦截操作的执行,与此同时postHandle,afterCompletion方法也不会执行了
    }

    @Override
    //原始方法调用后执行的内容
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
    }

    @Override
    //原始方法调用完成后执行的内容
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
    }
}

配置拦截器

在SpringMvcSupport中继承WebMvcConfigurationSupport类,之后重写addInterceptors /books 表示拦截路径为/books的请求 /books/* 表示拦截已books开头的请求

1ce142066b10676318e8fd67238bfbf.png

简化开发

可以直接在SpringMvcConfig中写 19176cbda75c853c359f2b4dff9076f.png

拦截器参数

取数据

@Override
//原始方法调用前执行的内容
//返回值类型可以拦截控制的执行,true放行,false终止
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    String contentType = request.getHeader("Content-Type");  //取数据
    HandlerMethod hm = (HandlerMethod)handler;
    System.out.println("preHandle..."+contentType);
    return true;
}

1655609835(1).png

拦截器链(多个拦截器)

拦截器执行顺序根据addInterceptorRegisty中的书写顺序来执行 ![1655610326(1).png](p3-juejin.byteimg.com/tos-cn-i- k3u1fbpfcp/0ea93dde7cf647729b8b1ca0f23a38b0~tplv-k3u1fbpfcp-watermark.image?) 只要有中断,post全部不执行 1655611412(1).png

1655611597(1).png