Spring MVC(二)


 

第一章 Spring MVC参数绑定

一、包装类型POJO参数绑定

    1. 实现方法:
    2. 页面定义:
      controller方法形参的定义:

      包装类型:

二、数组绑定

  1. 表现层实现:
    关键:将页面选择的(多选)商品id,传到controller方法的形参,方法形参使用数组接收

三、List绑定 

  1. 关键
    使用List接收页面提交的批量数据,通过包装POJO接收,在包装POJO中定义List<pojo>属性




四、Map绑定

  


第二章 Validation校验

一、服务端校验

  1. 校验理解
    在项目中使用较多的是前端校验,比如页面中的js校验,对于安全要求较高的建议在服务端校验
    服务端校验:
    • 控制层Controller:校验页面请求的参数的合法性。在服务端控制层校验,不区分客户端类型(浏览器、手机客户端、远程调用)
    • 业务层Service:使用较多,主要校验主要业务参数,仅限于service接口中使用的参数
    • 持久层dao:一般是不校验的

  2. spring mvc校验
    spring mvc校验使用的是hibernate的校验框架validation(和hibernate没有任何关系)
    校验思路:
    页面提交请求的参数,请求到controller方法中,使用validation进行校验,如果校验出错,将错误信息展示到页面

  3. 环境准备
  4. 配置校验器
  5. 将校验器注入到处理器适配器
  6. 在pojo中添加校验规则

    对应的配置文件CustomValidationMessages.properties中配置校验信息

  7.  controller中捕获校验信息并将错误信息传到页面

     页面:

  8.  分组校验

  9.  添加分组校验接口



  10.  pojo校验规则中添加分组

  11. 在controller中使用指定分组的校验



第三章 数据回显

  1. 什么是数据回显
    提交后,如果出现错误,将刚才提交的数据回显到刚才的提交页面
  2. pojo数据回显
    springmvc默认对pojo数据进行回显
    pojo数据传入controller方法以后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写)




    也可以使用@ModelAttribute指定pojo回显到页面在request域中的key






    @ModelAttribute还有一个作用:将方法的返回值传到页面
    需求:controller中定义商品类型查询方法,最终将商品类型传到页面


  3. 最简单的方法实现数据回显
    使用Model,可以不用@ModelAttribute


  4. 简单类型的数据回显
    使用最简单的方式:Model


第四章 异常处理 

一、全局异常处理器开发

  1. 异常处理思路
    系统中的异常有两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获得异常信息,后者主要通过规范代码开发、测试减少运行时异常
    系统中的dao、service、controller出现异常都throws Exception向上抛出,最后由springmvc的前端控制器交给异常处理器进行异常处理,如图:


    springmvc提供全局的异常处理器(一个系统只有一个异常处理器)进行统一异常处理

  2. 自定义异常类
    对不同的异常类型定义异常类
  3. 全局异常处理器
    思路:
    系统遇到异常,在程序中手动抛出,dao抛给service,service抛给controller,controller抛给前端控制器,前端控制器会调用全局异常处理器
    全局异常处理器处理思路:
      如果该异常类型是系统自定义的异常,直接取出异常信息,在错误页面展示
      如果该异常类型不是系统自定义的异常,就构造一个自定义的异常,(信息为“未知错误”)
    springmvc提供了一个HandlerExceptionResolver接口




  4. 在springmvc中配置全局异常处理器

二、抛出异常 

  在controller、service、dao的任意一处需要手动抛出异常
  如果是在程序中手动抛出的异常,会在错误页面显示自定义的异常信息
  如果不是手动抛出的异常,说明是一个运行时异常,在错误页面只会显示“未知错误···”
  如:在商品修改方法中抛出异常
  

  也可以在service抛出异常
  

  总结:

  如果与业务功能相关的异常,建议在service抛出

  与业务功能没有关系的异常,建议在controller抛出


第五章 图片上传

  1. springmvc中对多部件类型解析
    在页面form表单中提交 enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析


    在springmvc.xml中配置multipart类型解析器
  2. 在服务器端创建一个虚拟目录存储图片
    方法:
    D:apache-tomcat-8.0.47confserver.xml添加虚拟目录/pic,实际目录是F:......


    注意:在图片虚拟目录中,一定将图片目录分级创建(提高I/O性能),一般是按照日期(年、月、日)进行分级创建

  3. 加入上传图片的jar包
    上面的解析器内部使用下面的jar包进行图片上传
  4.  上传图片代码

    页面:


    controller:




第五章 spring mvc 实现json数据交互

  1. 为什么要进行json数据交互
    json数据格式在接口调用中、html页面中比较常用,json格式比较简单,解析比较方便
    如:webservice接口,传输json数据
  2. springmvc进行json交互


    1. 请求json、输出json,要求请求的是json串,所以在前端页面中需要将请求的内容转换成json穿,这种不太方便

    2. 请求是key/value、输出json ,此方法比较常用 

  3. 环境准备

    springmvc中使用jackson的包进行json转换(@requestBody和@responseBody...)

  4. 配置json转换器
  5. 输入的是json串,输出的是json串


    controller中:


    jsp页面中:




    测试结果:

  6.  请求的是key/value,输出的是json

    controller中:

    jsp中:

    客户端直接就可以从data中取数据:



    测试结果:




第六章 Spring MVC对RESTful的支持

  1. URI、URL、URN

    URI:统一资源标识符;首先它是一个字符串。其次,它是一个可以唯一标识某一资源的字符串
    URL:统一资源定位符;首先,它是一种URI,其次,它可以标识资源的路径
    URN:统一资源名称;首先,它是一种URI,其次,它代表资源的名字

    URI可以分为URL,URN或同时具备locators 和names特性。URN作用就好像一个人的名字,URL就像一个人的地址。换句话说:URN确定了东西的身份,URL提供了找到它的方式
    所有的URL与URN都是URI,但是URI不一定就是URL或者URN

  2. 什么是RESTful
    1. 相关概念
      http://www.ruanyifeng.com/blog/2011/09/restful.html

      资源(Resources):一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在,用URI来表示它
      表现层(Representation):资源的外在表现形式;txt格式 、HTML格式、XML格式、JSON格式等表现(Accept和Content-Type,这两个字段是对"表现层"的描述)
      状态转化(State Transfer):互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。而这种转化是建立在表现层之上的,所以就是"表现层状态转化"

      客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源

      REST,即Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"

      RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用
    2. 总结什么是RESTful架构
      (1)每一个URI代表一种资源
      (2)客户端和服务器之间,传递这种资源的某种表现层
      (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"

    3. 另一个总结什么是RESTful架构
      1. 对URL进行规范,写REST格式的URL
        非REST格式的URL: http://...../queryItems.action?id=001&type=T01      在“?”后面加参数
        REST的URL: http://...../items/001       特点:URL简洁、将参数通过URL传到服务端

      2. 对http的方法进行规范
        不管是删除、添加、更新.......,使用的URL是一致的,如果进行删除,需要设置HTTP的方法为delete,同理......
        后台controller方法:判断http方法,如果是delete执行删除,如果是post执行添加
      3. 对http的contentType的规范
        请求时指定contentType,要json数据,就设置成json格式的type


  3. URL模版映射
  4. 需求


    controller里:


    如果有多个参数:


    REST的前端控制器的配置



  5.  对静态资源的解析


    配置前端控制器的url-partten中指定/    默认截获所有请求,这时候对静态资源的解析出现了问题
    在springmvc中添加静态资源解析方法:


第七章 Spring MVC拦截器

  1. 拦截器的定义
    拦截器的机制是基于AOP的
    拦截器需要实现HandlerIntercepter接口,里面有三个方法

  2. 拦截器配置

    1. springmvc的拦截器针对HandlerMapping进行拦截设置(一般不推荐使用)
      如果在某个HandlerMapping中配置拦截,经过该HandlerMapping映射成功的Handler最终才使用该拦截器

    2.  类似全局的拦截器配置

      springmvc配置类似全局的拦截器,springmvc框架将配置的拦截器注入到每一个HandlerMapping中

       

  3. 两个拦截器都放行
  4. 拦截器1放行  拦截器2不放行
  5. 拦截器1不放行,拦截器2不放行

  6.  小结:



  7. 拦截器应用(实现登录认证)

    1. 需求:

    2.  登录controller




    3.  登录页面:

    4.  登录认证拦截器



    5.  配置拦截器

       


 





  





 




原文地址:https://www.cnblogs.com/gucl/p/8211744.html