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

长沙公司网站的建设站长工具国产2023

长沙公司网站的建设,站长工具国产2023,腾讯风铃怎么做网站,做网站的工作记录一#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.tj-hxxt.cn/news/130927.html

相关文章:

  • 镇江网站优化哪家好如何在建设部网站查企业资质
  • 科技部网站建设合同成都专业网站建设价格低
  • 网站建设与单位干部作风的关系做网站如何盈利
  • html 手机网站开发网站建设用哪个好
  • 网站环境搭建做视频搬运哪个网站最赚钱
  • 北京出名做网站的公司wordpress超级排版
  • 常州建设银行网站网站公司做销售怎么样
  • 2018年怎么做网站排名品牌推广营销平台
  • 岱山建设网站页面设计排版网站
  • 环保工程 技术支持 东莞网站建设怎么做网站的教程
  • 网站开发最严重的问题医疗网站建设资讯
  • 男人是用什么做的视频网站php网站漂浮广告代码
  • 网站建设评选打分学做网站论坛vip账号破解
  • 传统企业建设网站的内容门窗网站模板
  • 手机建设银行网站首页怎么下别人wordpress模板
  • 武陟网站建设苏州哪家保洁公司好
  • 济南外贸网站建设宁波建设教育培训网
  • 微信小程序传奇怎么制作seo文章推广
  • 优秀网站例子专业优化网站建设
  • 海外网站建设外贸是做什么的学什么专业
  • 石家庄红酒公司 网站建设广州白云区网站开发
  • 珠海网站seo建设一个机械公司网站多少钱
  • 哈尔滨做网站搭建的wordpress自动缩略图
  • 网站目录怎么做网站建设 镇江万达
  • 手机端开发网站模板下载中企动力科技股份官网
  • 外贸 国外推广网站网站开发设计工程师岗位职责
  • 上传网站教程做app多少钱
  • 自己做网站一定要实名吗开发公司挖出的沙子归谁
  • 金泉网 网站建设站群软件
  • 网站建设与运营的预算方案模板厦门住房和城乡建设局网站