当前位置: 首页 > news >正文

asp网站免费模板下载商城网上购物

asp网站免费模板下载,商城网上购物,网站建设psd,长春百度关键词搜索一#xff0c;JSR303的概念 JSR303是Java中的一个标准#xff0c;用于验证和校验JavaBean对象的属性的合法性。它提供了一组用于定义验证规则的注解#xff0c;如NotNull、Min、Max等。在Spring MVC中#xff0c;可以使用JSR303注解对请求参数进行校验。 1.2 为什么要使用J…一JSR303的概念 JSR303是Java中的一个标准用于验证和校验JavaBean对象的属性的合法性。它提供了一组用于定义验证规则的注解如NotNull、Min、Max等。在Spring MVC中可以使用JSR303注解对请求参数进行校验。 1.2 为什么要使用JSR303(更加理解) 前端不是已经校验过数据了吗为什么我们还要做校验呢直接用不就好了草率了假如说前端代码校验没写好又或者是对于会一点编程的人来说直接绕过前端发请求通过类似Postman这样的测试工具进行非常数据请求把一些错误的参数传过来你后端代码不就危险了嘛 所以我们一般都是前端一套校验后端在一套校验这样安全性就能够大大得到提升了。 1.3 常用的注解 在上面JSR303的概念中也指到了一些注解以下是注解的详细概述 注解说明Null用于验证对象为nullNotNull用于对象不能为null无法查检长度为0的字符串NotBlank只用于String类型上不能为null且trim()之后的size0NotEmpty用于集合类、String类不能为null,且size0。但是带有空格的字符串校验不出来Size用于对象Array,Collection,Map,String长度是否在给定的范围之内Length用于String对象的大小必须在指定的范围内Pattern用于String对象是否符合正则表达式的规则Email用于String对象是否符合邮箱格式Min用于Number和String对象是否大等于指定的值Max用于Number和String对象是否小等于指定的值AssertTrue用于Boolean对象是否为trueAssertFalse用于Boolean对象是否为false 1.4 Validated与Valid区别 Validated Spring提供的 支持分组校验 可以用在类型、方法和方法参数上。但是不能用在成员属性字段上 由于无法加在成员属性字段上所以无法单独完成级联校验需要配合Valid Valid JDK提供的标准JSR-303规范 不支持分组校验 可以用在方法、构造函数、方法参数和成员属性字段上 可以加在成员属性字段上能够独自完成级联校验 二JSR303使用 2.1 导入pom.xml依赖 !-- JSR303 -- hibernate.validator.version6.0.7.Final/hibernate.validator.version!-- JSR303 -- dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-validator/artifactIdversion${hibernate.validator.version}/version /dependency 2.2 配置校验规则 package com.Bingzy.model;import lombok.ToString; import org.hibernate.validator.constraints.NotBlank;ToString public class Tbook {ToStringpublic class Clazz {NotNull(message 书籍编号不能为空)protected Integer bid;NotBlank(message 书籍名不能为空)protected String bname;NotBlank(message 书籍价格不能为空)protected Float price;public Clazz(String bid, String bname, Float price) {this.bid bid;this.bname bname;this.price price;}public String getBid() {return bid;}public void setBid(String bid) {this.bid bid;}public String getBname() {return bname;}public void setBname(String bname) {this.bname bname;}public Float getPrice() {return price;}public void setPrice(Float price) {this.price price;}Overridepublic String toString() {return Clazz{ bid bid \ , bname bname \ , price price };}}} 2.3 入门案例 在请求处理方法中使用Validated或Valid注解要验证的对象并根据BindingResult判断校验是否通过。 // 给数据添加服务端校验RequestMapping(/valiAdd)public String valiAdd(Validated Tbook tbook,BindingResult result,HttpServletRequest req){ // 如果服务端验证不通过有错误if(result.hasErrors()){ // 服务端验证了实体类的多个属性多个属性都没有验证通过ListFieldError fieldErrors result.getFieldErrors();MapString,Object map new HashMap();for (FieldError fieldError : fieldErrors) { // 将多个属性的验证失败信息输送到控制台System.out.println(fieldError.getField() : fieldError.getDefaultMessage());map.put(fieldError.getField(),fieldError.getDefaultMessage());}req.setAttribute(errorMap,map);}else {this.tbookBiz.insertSelective(tbook);return redirect:list;}return book/edit;} edit.jsp % page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8% !DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd html head meta http-equivContent-Type contenttext/html; charsetUTF-8 title博客的编辑界面/title /head body center编辑界面form action${pageContext.request.contextPath }/${empty b ? book/valiAdd : book/edit} methodpostbr书籍id:input typetext namebid value${b.bid }span stylecolor: red${errorMap.bid}/spanbr书籍名称:input typetext namebname value${b.bname }span stylecolor: red${errorMap.bname}/spanbr书籍价格:input typetext nameprice value${b.price }span stylecolor: red${errorMap.price}/spanbrinput typesubmit/form /center /body /html 运行结果 点击新增或修改进入页面后点击提交显示相对应的提示语句  三拦截器 3.1 什么是拦截器 Spring MVC拦截器是Spring框架中的一个组件用于拦截请求并在请求处理之前或之后执行一些额外的操作。它可以用于实现一些通用的、与业务无关的功能如日志记录、权限验证、异常处理、跨域请求处理等。 拦截器在请求到达DispatcherServlet之后但在具体的Controller方法执行之前提供了一个拦截点可以对请求进行处理和干预。拦截器可以拦截请求、响应或会话的各个阶段并在每个阶段执行预定义的操作。 3.2 什么是过滤器 依赖于servlet容器。在实现上基于函数回调可以对几乎所有请求进行过滤但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作比如在过滤器中修改字符编码在过滤器中修改HttpServletRequest的一些参数包括过滤低俗文字、危险字符等 3.3 拦截器与过滤器的区别 过滤器(filter) 1.filter属于Servlet技术只要是web工程都可以使用 2.filter主要由于对所有请求过滤 3.filter的执行时机早于Interceptor 拦截器(interceptor) 1.interceptor属于SpringMVC技术必须要有SpringMVC环境才可以使用 2.interceptor通常由于对处理器Controller进行拦截 3.interceptor只能拦截dispatcherServlet处理的请求 3.4 应用场景 日志记录记录请求信息的日志以便进行信息监控、信息统计、计算PVPage View等。 权限检查如登录检测进入处理器检测是否登录如果没有直接返回到登录页面 性能监控有时候系统在某段时间莫名其妙的慢可以通过拦截器在进入处理器之前记录开始时间在处理完后记录结束时间从而得到该请求的处理时间如果有反向代理如apache可以自动记录 通用行为读取cookie得到用户信息并将用户对象放入请求从而方便后续流程使用还有如提取Locale、Theme信息等只要是多个Controller中的处理方法都需要的我们就可以使用拦截器实现 四拦截器快速入门 定义一个包并创建OneInterceptor类 拦截器(interceptor): package com.Bingzy.interceptor;import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class OneInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(【OneInterceptor】preHandle...);return true;}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(【OneInterceptor】postHandle...);}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(【OneInterceptor】afterCompletion...);} } spring-mvc.xml配置自定义拦截器 mvc:interceptorsbean classcom.Bingzy.interceptor.OneInterceptor/bean /mvc:interceptors 在拦截器(interceptor)中的preHandle()方法中的返回值为true未拦截的情况 在拦截器(interceptor)中的preHandle()方法中的返回值为false拦截的情况  注意拦截器会根据preHandle()方法返回值进行拦截判断返回了一个true值。这个返回值表示该拦截器已经处理了当前的请求并且可以继续向下传递请求。如果返回false则表示该拦截器不处理当前请求请求将被终止  4.1 拦截器原理图 preHandle用于对拦截到的请求进行预处理方法接收布尔(true,false)类型的返回值返回true放行false不放行。 执行时机在处理器方法执行前执行 方法参数 参数说明request请求对象response响应对象handler拦截到的方法处理 postHandle用于对拦截到的请求进行后处理可以在方法中对模型数据和视图进行修改 执行时机在处理器的方法执行后视图渲染之前 方法参数 参数说明request请求对象response响应对象handler拦截到的处理器方法ModelAndView处理器方法返回的模型和视图对象可以在方法中修改模型和视图 afterCompletion用于在整个流程完成之后进行最后的处理如果请求流程中有异常可以在方法中获取对象 执行时机视图渲染完成后(整个流程结束之后) 方法参数 参数说明request请求参数response响应对象handler拦截到的处理器方法ex异常对象 4.2 拦截器链 如果多个拦截器能够对相同的请求进行拦截则多个拦截器会形成一个拦截器链主要理解拦截器链中各个拦截器的执行顺序。拦截器链中多个拦截器的执行顺序根拦截器的配置顺序有关先配置的先执行 拦截器(interceptor) package com.Bingzy.interceptor;import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class TwoInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(【TwoInterceptor】preHandle...);return true;}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(【TwoInterceptor】postHandle...);}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(【TwoInterceptor】afterCompletion...);} } spring-mvc.xml配置自定义拦截器 mvc:interceptors!--2) 多拦截器拦截器链--mvc:interceptormvc:mapping path/**/bean classcom.Bingzy.interceptor.OneInterceptor//mvc:interceptormvc:interceptormvc:mapping path/book/**/bean classcom.Bingzy.interceptor.TwoInterceptor//mvc:interceptor /mvc:interceptors 运行展示 五用户登录权限案例  登入拦截器(interceptor) package com.Bingzy.interceptor;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(【implements】preHandle...);StringBuffer url request.getRequestURL();if (url.indexOf(/login) 0 || url.indexOf(/logout) 0){// 如果是 登录、退出 中的一种return true;} // 代表不是登录也不是退出 // 除了登录、退出其他操作都需要判断是否 session 登录成功过String bname (String) request.getSession().getAttribute(bname);if (bname null || .equals(bname)){response.sendRedirect(/page/book/login);return false;}return true;}} spring-mvc.xml配置自定义登入拦截器 mvc:interceptorsbean classcom.Bingzy.interceptor.LoginInterceptor/bean /mvc:interceptors Controller层web: package com.Bingzy.web;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession;Controller public class LoginController {RequestMapping(/login)public String login(HttpServletRequest req){String bname req.getParameter(bname);HttpSession session req.getSession();if (zs.equals(bname)){session.setAttribute(bname,bname);}return redirect:/book/list;}RequestMapping(/logout)public String logout(HttpServletRequest req){req.getSession().invalidate();return redirect:/book/list;} } login.jsp: 简单的测试布局可自行布局 测试结果 总结 如果用户发送URL中的后缀包含/login或/logout则表示当前请求是登录或退出操作直接返回true表示继续处理请求后端进行判断“uname”是否为“zs”如果不是zs则域对象不会保存从而到拦截器判断域对象为空则会重定向到登良页面如果不为空就执行后端返回的字符串到视图解析器解析跳转指定页面
http://www.zqtcl.cn/news/635743/

相关文章:

  • 网站建设方案进行工期安排Wix做的网站在国内打不开
  • 网站后台后缀名qq免费申请账号
  • seo网站优化代码静态网站可以做哪些
  • 网页素材及网站架构制作个人单页网站模板
  • 微小店网站建设价格建设网站设备预算
  • 电子商城网站开发公司泰州网络营销
  • 网站建设公司利润分配一些常用的网站
  • 鄂尔多斯做网站的公司北京企业网站设计报价
  • 南宁关键词网站排名wordpress付免签插件
  • 龙岩网站定制电子政务与网站建设方面
  • 东莞网站制作十强英语培训机构网站建设策划书
  • 住房和城乡建设部网站加装电梯苏州外发加工网
  • 企业网站管理系统带授权广州seo报价
  • 建设门户网站的意义旅游电商网站建设方案模板
  • 网站做动态图片不显示某购物网站开发项目
  • 大淘客网站logo怎么做紫鸟超级浏览器手机版
  • 专做公司网站 大庆wordpress编辑器百度云
  • 企业手机网站模板下载网站建设实训 考核要求
  • 企业网站建设的ppt4414站长平台
  • 物流网站制作怎么做pc网站开发
  • 合肥做网站可以吗网站程序 seo
  • 网站备案 动态ip网站多域名
  • 网站加速免费电子商务网站建设的认识
  • 做职业资格考试的网站有哪些网页游戏排行榜2024前十名
  • 网站设计方案怎么写wordpress仿站软件
  • 汕头建站模板系统北京有哪些电商平台公司
  • 深圳网站建设zhaoseo小包工头接活的平台
  • 电商平面设计前景如何seo推广什么意思
  • 网站解析不了wordpress 密码失败
  • 临沂企业建站系统模板扮家家室内设计