免费ppt成品网站,有没有专门搞网站上线的公司,盘锦做网站选哪家,网站建设瀑布流1.拦截器#xff1a;如果我们想在多个handler方法(controller中的方法)执行之前或者之后都进行一些处理#xff0c;甚至某些情况下需要拦截掉#xff0c;不让handler方法执行#xff0c;那么就可以使用SpringMVC为我们提供的拦截器。
拦截器和过滤器的区别#xff1a;过滤…1.拦截器如果我们想在多个handler方法(controller中的方法)执行之前或者之后都进行一些处理甚至某些情况下需要拦截掉不让handler方法执行那么就可以使用SpringMVC为我们提供的拦截器。
拦截器和过滤器的区别过滤器是在Servlet执行之前或者之后进行处理。而拦截器是对handler执行前后进行处理。 步骤
① 创建并配置拦截器
public class MyInterceptor implements HandlerInterceptor{
}
② 实现方法
public class MyInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(preHandle);return HandlerInterceptor.super.preHandle(request, response, handler);}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(postHandle);HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(afterCompletion);HandlerInterceptor.super.afterCompletion(request, response, handler, ex);}
}
③ 配置拦截器 springboot中用Bean注解就可以配置拦截器了
2.
preHandler方法会在Handler方法controller中的方法/不同url执行之前进行我们可以在其中进行一些前置的判断或者处理。
postHandler方法会在Handler方法controller中的方法/不同url执行之后进行我们可以在其中对域中的数据进行修改也可以修改要跳转的页面。
afterCompletion方法会在最后执行这个时候已经没有办法对域中的数据进行修改也没有方法修改要跳转的路径。我们在这个方法中一般进行一些资源的释放。
3.多拦截器执行顺序如果我们配置了多个拦截器拦截器的顺序是按照配置的先后顺序来执行的 注意 4.统一异常处理
我们在实际项目中Dao层和Service层的异常都会被抛到Controller层。但是如果我们在Controller的方法中都加上异常的try...catch处理也会显得非常的繁琐。
所以SpringMVC为我们提供了统一异常处理方案。可以把Controller层的异常进行统一处理。这样既提高了代码的复用性也让异常处理代码和我们的业务代码解耦。
一种方法是实现HandlerEeceptionResolver接口后期不用的方式一种是使用ControllerAdvice注解重要的方式。
HandlerEeceptionResolver接口该接口中只有一个可被重写的方法resolveException。如果handler中出现了异常就会调用该方法我们可以在resolveException方法中进行统一的异常处理。
ControllerAdvice注解使用
ControllerAdvice
Component
public class MyControllerAdvice {ExceptionHandler({NullPointerException.class, ArrayIndexOutOfBoundsException.class})public ModelAndView handlerException(Exception ex){// 如果出现了上面两种异常就会调用该方法String msg ex.getMessage();ModelAndView modelAndView new ModelAndView();// 把异常信息存入到域中modelAndView.addObject(msg,msg);// 跳转到error.jspmodelAndView.setViewName(/WEB-INF/page/error.jsp);return modelAndView;}
}
5.
前后端不分离模式如jsp使用ModelAndView对象来传递信息跳转页面等。
前后端分离模式vue 定义响应体对象ResultT配置ResponseBody注解的方式将响应数据响应码等以json格式的形式封装成ResultT对象给前端做处理。
6.SpringMVC实现文件上传。Http协议规定了我们在进行文件上传时的请求格式要求。所以在进行文件上传时除了在表单中增加一个用于上传文件的表单项input标签typefile另外还需要满足以下的条件才能进行上传
① 请求方式为POST请求 ② 请求头Content-Type必须为mulipart/form-data 7.接受上传的文件数据并处理 8.SpringMVC执行流程
我们有两种开发模式
① 一种是类似JSP的开发流程 把数据放入域对象中然后进行页面跳转。 ② 另外一种是前后端分离的开发模式这也是目前市场上主流的模式 把数据转化为Json放入响应体中。 所以采用前后端分离的开发模式从第六步开始后续的ModelAndView对象都是null所以第八步如果ModelAndView为null就不会去请求视图解析器视图解析器就是用来拼接跳转页面的名称的例如拼接.jsp
9.Spring解决了创建bean控制反转IOC和注入属性依赖注入DI避免了对象与对象之间的耦合SpringMVC简化了展示层采用Servlet开发封装了web原生对象Mybatis将SQL与代码的解耦在配置文件中单独书写sql。
10.框架脚手架其实就是开发好了很多代码使得我们在开发相应场景时可以直接进行调用快速并简化我们的后续开发。
例如JavaWeb阶段所有的代码都需要我们自己写所以我们的代码自己门清。但是框架就不一样了因为框架内部已经写好了很多代码我们只是在它的基础之上去添加一些代码去控制框架指挥框架因此有一种“我们只写了一两行代码但是它发挥出来的效果和之前写很多代码的效果一样”的感觉。
例如汽车就是框架我们驾驶汽车不难但是随着我们驾驶技术的提高我们也应该去理解学习汽车内部的原理。
11.Mybatis中相关核心类SqlSessionFactory用来获取SqlSession对象SqlSession提供了在数据库中执行sql命令所需的所有方法还提供了事务的相关操作
12.Mybatis配置文件的常用配置属性Mybatis常用配置属性_mybatis 属性-CSDN博客
13.Mybatis还可以通过内置的日志工厂提供日志功能。内置的日志工厂将会把日志工作委托给下面的实现之一
SLF4JApache Commons LoggingLog4j2Log4jJDK logging
Mybatis的日志可以查看我们执行的Sql语句用于排错。
14.Mybatis也支持注解开发但是我们一般用Mybatis就是采用xml配置文件的方式来书写sql语句。
---------------------------------------------------------------------------------------------------------------------------------
动态SQL
15.trim/标签可以使用该标签动态的添加前缀或者后缀也可以使用该标签动态的消除前缀。
① trim标签中的prefixOverrides属性用来设置需要被清除的前缀多个值可以用|分隔注意|前后不要有空格。例如and|or
例如: ② trim标签中的suffixOverrides属性用来设置需要被清除的后缀多个值可以|分隔注意|前后不要有空格。
例如
③ trim标签中的prefix属性用来设置动态添加的前缀如果标签中有内容就会添加上设置的前缀。
例如 ④ trim标签中的suffix属性用来设置动态添加的后缀如果标签中有内容就会添加上设置的后缀。
例如 16.where/标签等价于
trim prefix where prefixOverrides and|or/trim
可以使用where标签动态的拼接where并且去除前缀的and 或者 or。
例如 17.set/标签等价于
trim prefix set suffixOverrides ,/set 可以使用set标签动态的拼接set并且去除后缀的逗号。
例如 18.foreach标签可以使用foreach标签遍历集合或者数组中的参数获取其中元素拿来动态的拼接SQL语句。
例如 collection表示要遍历的数组/集合。
open表示遍历开始时拼接的语句
item表示给当前遍历到的元素取的名字
separator表示每遍历完一次拼接的分隔符
close表示最后一次遍历完拼接的语句
注意如果方法参数是数组类型collection默认的参数名是array如果方法参数是listcollection默认的参数名是list。建议遇到数组或者集合类型的参数统一使用Param注解进行命名。
19.choosewhenotherwise标签
当我们不想使用所有的条件而只是想从多个条件中选择一个使用时。可以使用choose系列标签。类似于Java中的switch。
例如 20.SQL片段的抽取相同sql语句抽取出来通过复用sql片段来降低sql语句的重复。 21.resultType自动映射实体类的时候出现问题可以使用resutlMap。当我们sql变复杂的时候我们需要使用resultMap标签自定义结果集和实体类的映射规则。
22.mybatis多表连表查询一对一一对多多对多
Mybatis基于xml的一对一、一对多、多对多嵌套结果查询和嵌套查询_java xml 一对多查询-CSDN博客
一对一标签association/
一对多List集合的话标签collection/