Chapter4Chapter4_第1页
Chapter4Chapter4_第2页
Chapter4Chapter4_第3页
Chapter4Chapter4_第4页
Chapter4Chapter4_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Chapter4 数据验证与异常处理*课程回顾*1 传参与取值2 高级参数绑定 *教学导航*1 数据校验2 数据回显3 SpringMvc异常处理1、 SpringMvc数据校验这个比较好理解,就是用来验证客户输入的数据是否合法,比如客户登录时,用户名不能为空,或者不能超出指定长度等要求,这就叫做数据校验。数据校验分为客户端校验和服务端校验客户端校验:js校验服务端校验:springmvc使用validation校验,struts2使用validation校验。都有自己的一套校验规则。Springmvc本身没有校验功能,SpringMVC支持JSR(Java Specification Result,Java规范提案)303-Bean Validation数据验证规范。而该规范的实现者很多,其中较常用的是Hibernate Validator。需要注意的是,Hibernate Validator是与Hibernate ORM并列的Hibernate的产品之一。# SpringMvc的校验示例 #校验思路:页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。具体需求:商品修改,添加校验(校验商品名称长度,价格的非空校验),如果校验出错,在商品修改页面显示错误信息。(1) 在javaWeb工程项目SpringMvcTwo基础上修改,添加依赖新的jar包在项目SrpingMvcTwo的基础上增加Hibernate的校验框架validation所需要jar包:hibernate-validator.jar,validation-api.jar,jboss-logging.jar,添加classmate.jar,否则出现java.lang.ClassNotFoundException: com.fasterxml.classmate.Filter(2) 在springmvc.xml中配置validator classpath:validationMessageSource (3) 将validator注册到适配器中1. 方式一注解式(推荐):添加红色部分2. 方式二:如果配置文件中使用的是非注解方式编写的适配器,则这样配置(4) 添加验证提示信息资源文件在类的根路径下添加资源文件:validationMessageSperties .size = 商品名称必须是1-20个字符之间items.price.notnull = 商品价格不能为空(5) 在pojo中指定校验规则在Item.java中添加校验规则:列举两个校验规则(使用的是注解校验)private Integer id; /提示信息不用资源文件就只能直接用文字 Size(min=6,max=20,message=.size) private String name; NotNull(message=items.price.notnull) private Float price; private String detail; private String pic; private Date createtime;.size和items.createtime.notnull:就是读取validationMessageSperties中的配置信息。从这里就可以理解该配置文件的意义,防止硬编码。(6) controller中对其校验绑定进行使用修改ItemController updateItem方法 RequestMapping(/updateitem) public String updateItem(Model model,Validated Item item,BindingResult bindingResult) if(bindingResult.hasErrors() List allErrors = bindingResult.getAllErrors(); for (ObjectError objectError : allErrors) System.out.println(objectError.getDefaultMessage(); model.addAttribute(allErrors,allErrors); return /goods/itemEdit.jsp; itemService.updateItemById(item); / 返回成功页面 return /goods/success.jsp; 注意:1、Validated作用就是将pojo内的注解数据校验规则(NotNull等)生效,如果没有该注解的声明,pojo内有注解数据校验规则也不会生效2、BindingResult对象用来获取校验失败的信息(NotNull中的message),与Validated注解必须配对使用,一前一后。3、代码中的逻辑应该很容易看懂,就是将result中所有的错误信息取出来,然后到原先的页面将错误信息进行显示,注意,要使用model对象,则需要在形参中声明Model model(后面的内容继续介绍Model)。(7) 在内页显示校验错误提示信息:在itemEdit.jsp页面添加下面红色内容 0$err.defaultMessage (8) tomcat部署运行显示主页,请求地址为:http:/localhost:8080/SpringMvcTwo/itemList.action入口进入修改页面测试观察结果#分组校验 #在pojo中定义校验规则,而pojo是被多个 controller所共用,当不同的controller方法对同一个pojo进行校验,但是每个controller方法可能需要不同的校验。解决方法:定义多个校验分组(其实是一个java接口),分组中定义有哪些规则每个controller方法使用不同的校验分组1、 定义校验分组接口就是定义空的接口,接口类只作为这个分组标识来使用,看下面的用法,就知道其意义何在了2、 校验规则中添加分组3、 在controller方法使用指定分组的校验在这个方法中,那么就只会校验item这个pojo中有ValidGroup1这个分组的校验注解,而不会在校验其他的2、 数据回显1. 什么数据回显提交后,如果出现错误,将刚才提交的数据回显到刚才的提交页面。2. 简单类型数据回显基本数据类型的数据可以使用最简单方法使用model。model.addAttribute(id, id);3. pojo数据回显方法1 springmvc默认对pojo数据进行回显。pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写)使用ModelAttribute指定pojo回显到页面在request中的key2 ModelAttribute还可以将方法的返回值传到页面在商品查询列表页面,通过商品类型查询商品信息。在controller中定义商品类型查询方法,最终将商品类型传到页面。3 使用最简单方法使用model,可以不用ModelAttribute3、 异常处理springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。(1) 异常处理思路系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如左图:springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。(2) 自定义异常类为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,继承Exception。public class CustomerException extends Exception private String expMessage;public CustomerException(String message) super(message); this.message = message;public CustomerException(String msg) this.expMessage = msg;public String getExpMessage() return expMessage;public void setExpMessage(String expMessage) this.expMessage = expMessage;(3) 自定义全局异常处理器思路:1. 解析出异常类型。2. 如果该异常类型是系统自定义的异常,直接取出异常信息,在错误页面展示。3. 如果该异常类型不是系统自定义的异常,那么应取出错误的堆栈信息,并记录下来,在错误页面展示。SpringMVC提供一个HandlerExceptionResolver接口,自定义全局异常处理器CustomeExceptionResolver必须要实现这个接口,所以编写一个自定义全局异常处理器,如下:public class CustomeExceptionResolver implements HandlerExceptionResolver Overridepublic ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) /handler就是处理器适配器要执行Handler对象(只有method)/解析出异常类型/如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示/String message = null;/if(ex instanceof CustomException)/message = (CustomException)ex).getMessage();/else/如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)/message=未知错误;/上边代码变为CustomException customException = null;if(ex instanceof CustomException)customException = (CustomException)ex;elsecustomException = new CustomException(未知错误);/错误信息String message = customException.getMessage();ModelAndView modelAndView = new ModelAndView();/将错误信息传到页面modelAndView.addObject(message, message);/指向错误页面modelAndView.setViewName(error);return modelAndView;(4) 记得还要在/WEB-INF/jsp目录下提供一个错误页面error.jsp,如下:(5) 在springmvc.xml配置全局异常处理器就是覆盖原先默认的异常处理器,没配置就是使用默认的,默认的就是系统自带的。拿到了异常就直接按我们经常显示404或者500或者别的错误信息的页面返回。但是通过我们上面自定义的异常处理器,当有异常时就捕捉到(为什么能捕捉到呢?所以为了让其能够捕捉到,所以我们需要配置我们自定义的异常处理器,这样有了异常才会交给它来处理),然后进行处理,然后在转到我们专门显示错误的页面(6) 异常测试在controller、service、dao中任意一处需要手动抛出异常。如果是程序中手动

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论