zoukankan      html  css  js  c++  java
  • 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.  配置拦截器

         


     





      





     




  • 相关阅读:
    LeetCode--011--盛最多水的容器(java)
    LeetCode--008--字符串转换整数 (atoi)(java)
    TF-IDF的解释
    Ubuntu14.04LTS下安装Node.js&NPM以及个人博客hexo的初始化配置
    UVa10791
    唯一分解定理
    UVa10375
    ubuntu下codeblocks安装与中文化
    Uva11582
    Ubuntu下使用网易云音乐
  • 原文地址:https://www.cnblogs.com/gucl/p/8211744.html
Copyright © 2011-2022 走看看