浅浅的园子

导航

 

SpringMVC简介

 SpringMVC概述:

  SpringMVC技术与Servlet技术功能相同,均属于web层开发技术

  SpringMVC是一种基于Java实现MVC模型的轻量级Web框架

    优点:

      使用简单,开发便捷(相比于Servlet)

      灵活性强

 入门案例:

  1.使用SpringMVC技术需要先导入SpringMVC坐标与Servlet坐标

  2.创建SpringMVC控制器类(等同于Servlet功能)

  3.初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的bean

  4.初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求

 

  注解

    名称:@Controller

    类型:类注解

    位置:SpringMVC控制器类定义上方

    作用:设定SpringMVC的核心控制器bean

    范例:

        

    

    名称:@RequestMapping

    类型:方法注解

    位置:SpringMVC控制器方法定义上方

    作用:设置当前控制器方法请求访问路径

    范例:

        

    相关属性: value(默认):请求访问路径

 

    名称:@ResponseBody

    类型:方法注解

    位置:SpringMVC控制器方法定义上方

    作用:设置当前控制器方法响应内容为当前返回值,无需解析

    范例:

        

 

  SpringMVC入门程序开发总结(1+N)

    一次性工作

      创建工程,设置服务器,加载工程

      导入坐标

      创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径

      SpringMVc核心配置类(设置配置类,扫描controller包,加载controller控制器bean)

    多次工作

      定义处理请求的控制器类

      定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)

 

AbstractDispatcherServletInitializer类是springMVC提供的快速初始化web3.0容器的抽象类

AbstractDispatcherServletInitializer提供三个接口方法供用户实现

  1.createServletApplicationContext()方法,创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,而webApplicationContext的作用范围为ServletContext范围,即整个web容器范围

      

 

  2.getServletMappings()方法,设定SpringMVC对应的请求映射路径,设置为/表示拦截所有请求,任意请求都将转入到SpringMVC进行处理

      

 

  3.createRootApplicationContext()方法,如果创建Servlet容器时需要加载非springMVC对应的bean,使用当前方法进行,使用方式同createServletApplicationContext()

      

 

 入门案例工作流程分析

  *启动服务器初始化过程

    1.服务器启动,执行ServletContainersInitConfig类,初始化web容器

    2.执行createServletApplicationContext方法,创建了WebApplicationContext对象

    3.加载SpringMvcConfig

    4.执行@ComponentScan加载对应的bean

    5.加载UserController,每个@RequestMapping的名称对应一个具体的方法

    6.执行getServletMappings方法,定义所有的请求都通过SpringMVC

  *单次请求过程

    1.发送请求local host/save

    2.web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理

    3.解析请求路径/save

    4.由/save匹配执行对应的方法save()

    5.执行save()

    6.检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方

 

 Controller加载控制与业务bean加载控制

  SpringMVC相关bean(表现层bean)

  Spring控制的bean

    业务bean(Service)

    功能bean(DataSource等)

 

  1.因为功能不同,如何避免Spring错误的加载到SpringMVC的bean一加载Spring控制的bean的时候排除掉SpringMVC控制的bean

 

  SpringMVC相关bean加载控制

    SpringMVC加载的bean对应的包均在com.itheima.controller包内

  Spring相关bean加载控制

    方式一:Spring加载的bean设定扫描范围为com.itheima,排除掉controller包内的bean

    方式二:Spring加载的bean设定扫描范围为精准范围,例如service包、dao包

    方式三:不区分Spring与SpringMVC的环境,加载到同一个环境中

方式一(排除方式)、方式二(指定方式)

 

  名称:@ComponentScan

  类型:类注解

  范例:

 

 

  属性:

    excludeFilters:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)

    includeFilters:加载指定的bean,需要指定类别(type)与具体项(classes)

 

bean的加载格式:

 

 

  简化开发:

 

 

 

PostMan简介:

  PostMan是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件

  作用:常用于进行接口测试

  特征:

    简单

    实用

    美观

    大方

 

请求与响应

  请求映射路径

    1.团队多人开发,每个人设置不同的请求路径,冲突问题如何解决----------设置模块名作为请求路径前缀

    名称:@RequestMapping

    类型:方法注解 类注解

    位置:SpringMVC控制器方法定义上方

    作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀

    范例:

          

    属性:

      value(默认):请求访问路径,或访问路径前缀

 

  请求方式

    get请求

      普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数

          

    post请求  

      普通参数:form表单post请求传参,表单参数名与形参变量名相同,定义形参即可接收数据

          

    Post请求中文乱码处理

      为web容器添加过滤器并指定字符集,Spring-web包中提供了专用的字符过滤器

            

  请求参数

    参数种类

      普通参数:url地址传参,地址参数名与形参变量名相同,定义参数即可接收参数

 

            

 

      名称:@RequestParam

      类型:形参注解

      位置:SpringMVC控制器方法形参定义前面

      作用:绑定请求参数与处理器方法形参间的关系

      范例:

            

 

      参数:

        required:是否为必传参数

        defaultValue:参数默认值

 

      POJO类型参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数

            

 

      嵌套POJO类型参数:

        POJO对象中包含POJO对象

            

 

        请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

              

 

      数组类型参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型形参即可接收参数

             

 

      集合类型参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系

             

 

 

  请求参数(传递json数据)

    json数组

    json对象(POJO)

      POJO参数:json数据与形参对象属性名相同,定义POJO类型形参即可接收参数

          

 

    json数组(POJO)

      POJO集合参数:json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数

          

 

      1.添加json数据转换相关坐标

            

      2.设置发送json数据(请求body中添加json数据)

           

      3.开启自动转换json数据的支持

            

       注意事项:@EnableWebMvc注解功能强大,该注解整合了多个功能,此前仅使用其中一部分功能,即json数据进行自动转换

      4.设置接收json数据

            

 

  

      名称:@EnableWebMvc

      类型:配置类注解

      位置:SpringMVC配置类定义上方

      作用:开启SpringMVC多项辅助功能

      范例:

            

 

      名称:@RequestBody

      类型:形参注解

      位置:SpringMVC控制器方法形参定义前面

      作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次

      范例:

           

 

@RequestBody与@RequestParam区别

  区别
    @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】

    @RequestBody用于接收json数据【application/json]
  应用
    后期开发中,发送json格式数据为主,@RequestBody应用较广

    如果发送非json格式数据,选用@RequestParam接收请求参数

 

  日期类型参数传递

    日期类型数据基于系统不同格式也不尽相同

      2020-08-18

      2020/08/18

      08/18/2020

    接收形参时,根据不同的日期格式设置不同的接收方式

 

        

 

    

      名称:@DateTimeFormat

      类型:形参注解

      位置:SpringMVC控制器方法形参前面

      作用:设定日期时间型数据格式

      范例:

            

      属性:pattern:日期时间格式字符串

    类型转换器

      Converter接口

 

            

 

        请求参数年年数据(String->Integer)

        日期格式转换(String->Date)

      注意:如果在某些转换是出问题,可以开启下面注解

        @EnableWebMvc功能之一:根据类型匹配对应的类型转换器

  响应json数据

    响应页面(了解)

        

 

    响应数据

      文本数据(了解)

        

 

      json数据(对象转json)

        

 

      json数据(对象集合转json数组)

        

 

 

 

      名称:@ResponseBody

      类型:方法注解

      位置:SpringMVC控制器方法定义上方

      作用:设置当前控制器返回值作为响应体

      范例:

            

 

    HttpMessageConverter接口

        

 

REST风格

  REST简介

    REST (Representational State Transfer),表现形式状态转换传

    统风格资源描述形式

      http: / /localhost/user/getById?id=1

      http: / / localhost/user/save

    UserREST风格描述形式

      http: / / localhost/user/1

      http: / / localhost/user
    优点:
      隐藏资源的访问行为,无法通过地址得知对资源是何种操作

      书写简化

 

 

  按照REST风格访问资源时使用行为动作区分对资源进行了何种操作    

        地址          操作      请求方式

    http:/ / localhost/users     查询全部用户信息  GET(查询)

    http: / / localhost/users/1     查询指定用户信息  GET(查询)

    http: / /localhost/users    添加用户信息    POST(新增/保存)

    http: / /localhost/users    修改用户信息    PUT(修改/更新)

    http: / /localhost/users/1   删除用户信息    DELETE (删除)

  根据REST风格对资源进行访问称为RESTful

 

   注意:上述行为是有约定方式,约定不是规范,可以打破,所以称REST风格,而不是REST规范

      描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如:users、books.......

 

  RESTful入门案例

   步骤:

    1.设定http请求动作(动词)

 

        

 

    2.设定请求参数(路径变量)

 

        

 

    3.

 

      名称:@RequestMapping

 

      类型:方法注解

 

      位置:SpringMVC控制器方法定义上方

 

      作用:设置当前控制器方法请求访问路径

 

      范例:

 

 

            

 

      属性:

        value(默认):请求访问路径

        method:http请求动作,标准动作(GET/POST/PUT/DELETE)

 

 

      名称:@PathVariable

      类型:形参注解

      位置:SpringMVC控制器方法形参定义前面

      作用:绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一 一对应

      范例:

            

 

 

 

  @RequestBody  @RequestParam  @PathVariable
  区别
    @RequestParam用于接收url地址传参或表单传参

    @RequestBody用于接收json数据

    @PathVariable用于接收路径参数,使用{参数名称}描述路径参数

  应用
    后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
    如果发送非json格式数据,选用@RequestParam接收请求参数
    采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值

 

  REST快速开发

          

 

      名称:@RestController

 

      类型:类注解

 

      位置:SpringMVC的RESTful开发控制器类定义上方

 

      作用:设置当前控制器类为RESTful风格,等同于@Controller与@ResponseBody两个注解组合功能

 

      范例:

 

            

 

 

 

    名称:@GetMapping @PostMapping@PutMapping @DeleteMapping

    类型:方法注解

    位置:基于SpringMVC的RESTful开发控制器方法定义上方

    作用:设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,例如@GetMapping对应GET请求

    范例:

 

 

        

 

    属性:

      value(默认):请求访问路径

 

 

  案例:基于RESTful页面数据交互

    1.制作SpringMVC控制器,并通过PostMan测试接口功能

 

          

 

    2.设置对静态资源的访问放行

 

          

 

    3.前端页面通过异步提交访问后台控制器

 

          

 

SSM整合

    ssm整合

      ssm整合流程

          1.创建工程
          2. SSM整合公
            Spring

              SpringConfig 

                    

            MyBatis
              MybatisConfig

                    

              JdbcConfig

                

              jdbc.properties

 

                    

            SpringMVC

              ServletConfig(web配置类)

                    

              SpringMvcConfig

                    
          3.功能模块
            表与实体类

                  

            dao(接口+自动代理)

                  

            service(接口+实现类)

                  

                  

              业务层接口测试(整合JUnit )

             

            controller(基于Restful的Controller)

                 

              表现层接口测试( PostMan )

                  

 

 

         事务处理

                  

 

    表现层数据封装

      设置统一数据返回结果类

 

 

            

 

      注意事项:

        Result类中的字段并不是固定的,可以根据需要自行增减提供若干个构造方法,方便操作

 

      设置统一数据返回结果编码

            

      注意事项

        Code类的常量设计也不是固定的,可以根据需要自行增减,例如将查询再进行细分为GET_OK,GET_ALL_OK,GET_PAGE_OK

 

      根据情况设置合理的Result

            

 

    异常处理器

      程序开发过程中不可避免的会遇到异常现象

 

     出现异常现象的常见位置与常见诱因如下:
      框架内部抛出的异常:因使用不合规导致

      数据层抛出的异常:因外部服务器故障导致(例如:服务器访问超时)

      业务层抛出的异常:因业务逻辑书写错误导致(例如:遍历业务书写操作,导致索引异常等)

      表现层抛出的异常:因数据收集、校验等规则导致(例如:不匹配的数据类型间导致异常)

      工具类抛出的异常:因工具类书写不严谨不够健壮导致(例如:必要释放的连接长期未释放等)

 

 

    1.各个层级均出现异常,异常处理代码书写在哪一层?

      所有的异常均抛出到表现层进行处理

    2.表现层处理异常,每个方法中单独书写,代码书写量巨大且意义不强,如何解决?

      AOP思想

    异常处理器

      集中的、统一的处理项目中出现的异常

          

 

    名称:@RestControllerAdvice

    类型:类注解

    位置: Rest风格开发的控制器增强类定义上方

    作用:为Rest风格开发的控制器类做增强

    范例:

        

 

 

    说明:
      此注解自带@ResponseBody注解与@Component注解,具备对应的功能

 

 

 

    名称:@ExceptionHandler

    类型:方法注解

    位置:专用于异常处理的控制器方法上方

    作用:设置指定异常的处理方案,功能等同于控制器方法,出现异常后终止原始控制器执行,并转入当前方法执行

    范例:

        

    说明:
      此类方法可以根据处理的异常不同,制作多个方法分别处理对应的异常

 

    项目异常分类

      业务异常( BusinessException)

        规范的用户行为产生的异常

        不规范的用户行为操作产生的异常

      系统异常(SystemException)

        项目运行过程中可预计且无法避免的异常

      其他异常(Exception)

        编程人员未预期到的异常

 

    项目异常处理方案

      业务异常(BusinessException)

        发送对应消息传递给用户,提醒规范操作

      系统异常(SystemException)

        发送固定消息传递给用户,安抚用户

        发送特定消息给运维人员,提醒维护

        记录日志

      其他异常(Exception)

        发送固定消息传递给用户,安抚用户

        发送特定消息给编程人员,提醒维护(纳入预期范围内)

        记录日志

 

      1.自定义项目系统级异常

            

      2.自定义项目业务级异常

            

      3.自定义异常编码(持续补充)

            

      4.触发自定义异常

       

      5.拦截并处理异常

       

      6.异常处理器效果对比

       

       

 

    案例:ssm整合标准开发 

拦截器

   拦截器概念  

    拦截器( Interceptor)是一种动态拦截方法调用的机制

    作用:
      在指定的方法调用前后执行预先设定后的的代码
      阻止原始方法的执行

    拦截器与过滤器区别

      归属不同:Filter属于Servlet技术,Interceptor属于SpringMVC技术
      拦截内容不同:Filter对所有访问进行增强,Interceptor仅针对springMVc的访问进行增强

  入门案例

    1.制作拦截器功能类

    2.配置拦截器的执行位置

    步骤:

      1.声明拦截器的bean,并实现HandlerInterceptor接口(注意:扫描加载bean)

            

      2.定义配置类,继承webMvcConfigurationSupport,实现addInterceptor方法(注意:扫描加载配置)

       

      3.添加拦截器并设定拦截的访问路径,路径可以通过可变参数设置多个

       

      4.使用标准接口webMvcConfigurer简化开发(注意:侵入式较强)

       

   执行流程:

        

  拦截器参数

    前置处理

        

      参数

        request:请求对象

        response:响应对象
        handler:被调用的处理器对象,本质上是一个方法对象,对反射技术中的Method对象进行了再包装·

      返回值
        返回值为false,被拦截的处理器将不执行

 

    后置处理

     

    参数

      modelAndView:如果处理器执行完成具有返回结果,可以读取到对应数据与页面信息,并进行调整

 

    完成后处理

     

    参数
      ex:如果处理器执行过程中出现异常对象,可以针对异常情况进行单独处理

 

  拦截器工作流程分析

    当配置多个拦截器时,形成拦截器链

    拦截器链的运行顺序参照拦截器添加顺序为准
    当拦截器中出现对原始处理器的拦截,后面的拦截器均终止运行
    当拦截器运行中断,仅运行配置在前面的拦截器的afterCompletion操作

        

        

 

posted on 2023-07-14 22:51  梦浅  阅读(11)  评论(0编辑  收藏  举报