ssm学习笔记三-SpringMVC框架

    科技2022-09-05  137

    SpringMVC框架

    简介

    p77 SpringMVC框架的概述,简单来说就是上图中的公用行为封装和特有行为调用的框架。具体请见视频

    p78 SpringMVC的开发步骤,见上图6步

    POJO:Plain Ordinary Java Object,即普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO。即一般开发中的domain包下的简单的实体类,是JavaBeans的子集,前面的笔记有过提及。特点就是支持业务逻辑的协助类。

    到具体项目中来的步骤描述:

    p79 基于上述开发步骤的小案例代码实现

    组件解析

    p80 基于上述小demo的项目部署启动流程及分析。步骤的再次强调

    p81 基于SringMVC框架的底层组件解析SpringMVC的执行流程:

    ↓             ↓             ↓            ↓

    p82-85 SpringMVC组件解析:

    82 注解解析:@RequstMapping()。包括:作用、位置、属性

    83 组件扫描:<context:component-scan>属性:base-package,全限定包名

    子标签:

    <context:include-filter> 只扫描的部分<context:exclude-filter> 排除扫描的部分

    84 XML配置解析(资源解析器):源码查看解析,对Controller类代码进行增强

    Controller类中return的视图返回方式:forward、redirect

    xml中配置内部资源视图解析器(InternalResourceViewResolver):

    重构源码中内部资源视图解析器中的前缀(prefix)和后缀(suffix)的默认构造方法,自定义添加需要的前后缀,使得return语句变得更简洁。

    组件总结:红色框住部分为重点

    数据响应

    p86 SpringMVC数据相应方式的预览和思维导向讲解:

    ​ 重点注意回写数据中的返回对象或集合中提及的AJAX和Json的应用

    p87-90 页面跳转

    87 返回字符串的形式。对上述构建的小demo的web执行的流程解析

    88-90 返回ModelAndView的形式,四种形式:

    88 以ModelAndView方式建立ModelAndView类型的方法,重构实现上述返回字符串的形式的demo

    89 另外两种形式:

    ModelAndView对象解耦:SpringMVC自动注入;

    自定义String方法,实现ModelAndView形式(String对象即为View,再自动注入一个Model对象)

    90 自定义String方法,实现ModelAndView形式(String对象即为View,再自动注入一个HTTPServletRequest对象)

    对比前面的Model对象的自定义方法,Model对象是SpringMVC框架封装好的一个对象,HTTPRequestServlet对象是原生的,Tomcat提供的对象(**不常用,使用框架就尽量使用框架提供的方法)

    p91-94 回写数据

    91 直接返回字符串:不进行视图跳转,直接返回字符串展示,两种方法:

    方法类型为void,没有return返回,自动注入response对象调用getWriter().print()展示通过return返回字符串,添加**@ResponsBody**注解告知SpringMVC直接通过响应体回写

    92 返回Json格式字符串:使用Json转换工具将实体类对象转换为Json格式字符串返回:

    ​ 使用ObjectMapper类的**writerValueAsString(domain)**方法

    93 94 返回对象或集合:配置SpringMVC自动将对象转换成Json

    93 xml中配置处理器适配器的RequestMappingHandlerAdapter类的类型转换器,实现SpringMVC的自动转换

    94 简化上述配置,xml配置中添加一个MVC的注解驱动:<mvc:annotation-driven>即可,作用如下图:

    p95 数据响应总结

    SpringMVC的请求

    获得请求参数 P96-108

    P96-101 请求参数类型

    96 参数类型总结和思维导图讲解:

    基本类型POJO类型数组类型集合类型

    97获取基本类型参数:

    98获取POJO类型参数:

    99获取数组类型参数:

    100 101 获取集合类型参数:

    自定义一个list类(VO对象)在Controller类中注入,并在视图页面(jsp)中提交数据,数据在Controller类中完成封装获取

    注意ajax提交的代码编写方式,引出静态资源访问权限问题:

    p102 静态资源访问开启

    SpringMVC前端控制器DispatcherServlet内部会对web资源进行虚拟路径匹配(Controller类),而原案例web.xml配置为’/’(缺省),所以全部资源讲由SpringMVC来匹配。

    在spring-mvc.xml中配置不由SpringMVC来匹配,开放静态资源访问:

    <mvc:resources>属性:mapping:映射地址,location:开放的目录-

    <mvc:default-servlet-handler/>:当DispatcherServlet匹配不到时,交由原始容器(Tomcat)寻找

    p103 请求数据乱码问题:配置全局乱码过滤器<filter>

    p104 参数绑定注解:@requestParam

    属性:

    p105 获得Restful风格的参数

    @PathVariable 进行占位符匹配:

    p106 自定义类型转换器

    步骤:

    p107 获取Servlet相关API

    视频丢失,看的这个:

    https://www.bilibili.com/video/BV1mE411X7yp?p=174

    在一个虚拟路径方法中,想获取Servlet任意API直接在形参中声明即可,SpringMVC自动注入。

    p108 获取请求头信息:

    @CookieValue:

    文件上传 P109-113
    p109 上传客户端三要素,及前端表单实现:

    p110 文件上传原理:

    p111 单文件上传步骤:

    ​ ①在pom.xml添加

    ​ ②spring-mvc.xml配bean

    ​ ③编写Controller类方法

    p112单文件的上传下载案例实现

    多文件上传:

    数组形式:

    前端不同名的name值,方法中多个对应形参形式

    SpringMVC拦截器

    p114 拦截器(Interceptor)的概述和作用:

    p115 拦截器(Interceptor)和过滤器(Filter):

    p116 自定义拦截器快速入门步骤:

    ​ ①三个方法都需要实现(可以缺省)

    ​ ②spring-mvc.xml配置:<mvc:interceptors>标签及其子标签 <mvc:interceptor>具体某一个拦截器,

    ​ 属性标签:<mvc:mapping>,属性值:path,(配置对那些资源进行拦截操作 p121)

    ​ (属性标签:<mvc:exclude-mapping>,属性值:path,配置对那些资源不进行拦截操作 p121)

    括号内的为后面p121的内容

    ​ ③build测试

    p117 自定义拦截器三个方法的逻辑实现,以及拦截器链的三个方法的执行顺序:

    Boolean preHandle():

    在目标方法执行前执行

    最常用,类似于Filter中的doFilter()方法;

    void postHandle()

    在目标方法执行之后,视图对象返回之前执行

    可用于修改返回的视图对象

    void afterCompletion()

    在流程都执行完毕后执行

    不常用

    执行顺序:

    ​ 链中所有preHandle()方法执行完再执行所有postHandle()方法, 最后执行所有afterCompletion()方法。

    ​ 链中拦截器的执行顺序是由xml文件中的配置顺序决定的。

    p118 三个方法说明总结及其他总结:

    28.p119-122 拦截器案例demo实现用户登录权限控制

    119 案例需求分析及preHandle()实现逻辑分析

    120 在preHandle()方法代码实现上P的逻辑分析

    121 实现登录功能保存至数据库,并引出拦截范围问题,引出新标签用于排除拦截:<mvc:exclude-mapping>

    122 JdbcTemplate的queryForObject()方法返回为空时的EmptyResultDataAccessException异常问题:

    解决:Dao层抛出异常,业务层中抓取异常并解决。并引出后续的框架解决异常的方法。

    异常处理机制

    p123 不使用框架方法解决异常思路:

    Dao层抛出异常,业务层中抓取异常并解决。每个方法都抓取解决。

    引出抽取思想,进而引出SpringMVC框架解决思路:

    以及后续对绿色框部分的学习

    异常处理的两种方式:

    简单异常处理器SimpleMappingException代码实现:

    自定义异常处理器实现HandlerExceptionResolver接口步骤和案例实现:

    ​ ①实现方法中,方法参数除servlet两大对象外,Exception参数即异常对象;返回值ModelAndView:跳转的错误视图信息

    ​ 配置方法中,使用分支结构囊括所需要的异常类型,使用instanceof方法进行判断,最后设置ModelAndView对象信息并该对象返回即可。

    ​ ②简单声明配bean即可

    ​ ③④没什么可讲

    异常处理总结

    请求的两个额外注解:

    https://www.bilibili.com/video/BV1mE411X7yp?p=181

    @ModelAttribute

    修饰方法有返回值:

    修饰方法没有返回值

    @SessionAttributes

    Processed: 0.009, SQL: 10