spring mvc

JSR303、349 -Bean Validation 数据校验规范使用说明和验证流程源码分析

守給你的承諾、 提交于 2019-12-09 15:08:37
本文讲解基于jsr303和jsr349标准的 Bean Validation规范。通过以下部分讲解: 约束注解的定义 约束验证规则(约束验证器) 约束注解的声明 约束验证流程 在spring mvc中使用jsr349 使用工具类不使用Spring提供的功能 Spring3.1支持方法级别验证 dubbo中使用jsr303提供的验证 需要关注一下问题 参考网址 Bean Validation 是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。数据校验是任何一个应用程序都会用到的功能,无论是显示层还是持久层. 通常,相同的校验逻辑会分散在各个层中, 这样,不仅浪费了时间还会导致重复代码(如下图). 为了避免重复, 开发人员经常会把这些校验逻辑直接写在领域模型里面, 但是这样又把领域模型代码和校验代码混杂在了一起, 而这些校验逻辑更应该是描述领域模型的元数据. JSR 303,349 - Bean Validation - 为实体验证定义了元数据模型和API. 默认的元数据模型是通过Annotations来描述的,但是也可以使用XML来重载或者扩展. Bean Validation API 并不局限于应用程序的某一层或者哪种编程模型, 例如,如下图所示, Bean Validation 可以被用在任何一层, 或者是像类似Swing的富客户端程序中. 一个

7:spring mvc 数据验证

佐手、 提交于 2019-12-04 22:58:53
注解式数据验证 Spring3 开始支持JSR-303 验证框架,JSR-303 支持XML 风格的和注解风格的验证,接下来我们首先看一下如何和Spring集成。 1、添加jar 包: 此处使用Hibernate-validator 实现(版本:hibernate-validator-4.3.0.Final-dist.zip),将如下jar 包添加到classpath(WEB-INF/lib 下即可): validation-api-1.0.0.GA.jar JSR-303 规范API 包 hibernate-validator-4.3.0.Final.jar Hibernate 参考实现 2、配置中添加对JSR-303验证框架的支持 <!--以下validator ConversionService在使用mvc: annotation-driven 会自动注册--> <bean id="validator"class="org.springframework. validation. beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org. hibernate. validator. HibernateValidator"/> <! -

spring mvc 配置文件报错处理集合

本小妞迷上赌 提交于 2019-12-03 06:58:53
这篇文章中的内容是在开发过程中碰到的配置文件错误的处理方法的集合,部分内容从网上摘抄并进行整理。此文章持续更新。 问题一:元素 'beans' 必须不含字符 [子级], 因为该类型的内容类型为“仅元素” 这个问题是因为配置文件中有特殊字符导致,检查配置文件,删除特殊字符即可。 PS:有时从网站上复制下来的配置项,一些空格内容也是特殊字符,检查配置没有明显的特殊字符,可以将空格部分都删除试下。 来源: oschina 链接: https://my.oschina.net/u/872585/blog/755798

2:DispatcherServlet 前端控制器

社会主义新天地 提交于 2019-12-03 05:09:43
DispatcherServlet作用 DispatcherServlet是前端控制器设计模式的实现,提供 Spring Web MVC的集中访问点,负责职责的分派,与Spring IoC容器无缝集成,从而可以获得 Spring的所有好处。 DispatcherServlet 主要用作职责调度工作,本身主要用于控制流程,主要职责如下: 1、文件上传解析,如果请求类型是multipart 将通过MultipartResolver进行文件上传解析; 2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器); 3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器); 4、通过ViewResolver解析逻辑视图名到具体视图实现; 5、本地化解析; 6、渲染具体的视图等; 7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。 DispatcherServlet配置 <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet

Shiro学习之路 Hello Shiro(一)

旧城冷巷雨未停 提交于 2019-12-02 20:11:41
由于最近自己的项目需要加入权限的功能所以使用Shiro整合Spring mvc来实现。 Shiro简介 Shiro是一个拥有许多综合性的程序安全框架。有非常方便的身份认证、授权、企业会话管理和加密。 Shiro可以为我们做什么: 验证用户来核实他们的身份。 对用户执行访问控制,如: 判断用户是否被分配一个确定的安全角色。 判断用户是否被允许做某事。 在任何环境下使用Session API,即使没有Web或EJB容器。 在身份验证、访问控制期间、会话的生命周期,对事件作出反应。 启用单点登录功能。。。。 Shiro 把 Shiro 开发团队称为“应用程序的四大基石”——身份验证,授权,会话管理和加密作为其目标。 Authentication:有时也简称为“登录”,这是一个证明用户是他们所说的他们是谁的行为。 Authorization:访问控制的过程,也就是决定“谁”去访问“什么”。 Session Management:管理用户特定的会话,即使在非 Web 或 EJB 应用程序。 Cryptography:通过使用加密算法保持数据安全同时易于使用。 也提供了额外的功能来支持和加强在不同环境下所关注的方面,尤其是以下这些: Web Support:Shiro 的 web 支持的 API 能够轻松地帮助保护 Web 应用程序。 Caching:缓存是 Apache Shiro

客户端传递json格式数据,spring mvc服务端接受并进行参数校验

江枫思渺然 提交于 2019-12-02 19:58:07
前端传来的参数是json格式的数据,并不是传统的表单提交,由于服务端使用spring mvc框架,首先想到了Spring mvc 自带的@RequestBody注解,直接将传递参数注入到处理方法的参数中, 但是这样遇到了一个问题,在使用拦截器对客户端传递参数进行校验时是没法直接通过request.getParameter("name")获取该对象的参数,只能通过request.getInputStream();将传递对象的body读出,解析json字符串,对参数进行处理, 拦截器的方法跑通了,到了具体的处理方法时,注入参数报错了 原因是,之前的在拦截器中的处理方法已经通过request.getInputStream()取出了输入流,参数解析时已经拿不到了,此时想到两种解决方法: 1.将所有的参数解析及参数校验逻辑写在每个方法中 2.让request.getInputStream()再次取值时还能取到 第一种方法,能够很快实现,但是会产生大量的重复代码 于是决定使用第二种方法,代码如下 import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import javax.servlet.ServletRequest; import javax.servlet.http

SpringMVC基于注解的Controller

眉间皱痕 提交于 2019-12-02 09:47:35
本文将介绍 Spring 2.5 新增的 Sping MVC 注解功能,讲述如何使用注解配置替换传统的基于 XML 的 Spring MVC 配置。 一个简单的基于注解的 Controller 使用过低版本 Spring MVC 的读者都知道:当创建一个 Controller 时,我们需要直接或间接地实现 org.springframework.web.servlet.mvc.Controller 接口。一般情况下,我们是通过继承SimpleFormController 或 MultiActionController 来定义自己的 Controller 的。在定义 Controller 后,一个重要的事件是在SpringMVC的配置文件中通过 HandlerMapping 定义请求和控制器的映射关系,以便将两者关联起来。来看一下基于注解的 Controller 是如何定义做到这一点的,下面是使用注解的 BbtForumController: 1、BbtForumController.java package com.baobaotao.web; import com.baobaotao.service.BbtForumService; import org.springframework.beans.factory.annotation.Autowired; import org

4:spring mvc 数据绑定

白昼怎懂夜的黑 提交于 2019-12-01 06:03:27
如何绑定数据 API方式绑定数据 我们还可以通过如HttpServletRequest 等API 得到请求数据,但推荐使用注解方式,因为使用起来更简单。我们需要首先看看功能处理方法支持哪些类型的形式参数,以及他们的具体含义。 一、ServletRequest/HttpServletRequest 和ServletResponse/HttpServletResponse 二、InputStream/OutputStream 和Reader/Writer requestBodyIn:等价于request.getInputStream(); responseBodyOut:等价于response.getOutputStream() 。 三、WebRequest/NativeWebRequest WebRequest 是Spring Web MVC 提供的统一请求访问接口,不仅仅可以访问请求相关数据(如参数区数据、请求头数据,但访问不到Cookie 区数据),还可以访问会话和上下文中的数据;NativeWebRequest 继承了WebRequest,并提供访问本地Servlet API 的方法。 四、HttpSession session 访问不是线程安全的,如果需要线程安全,需要设置AnnotationMethodHandlerAdapter

5:spring mvc 数据类型转换

半世苍凉 提交于 2019-11-30 04:07:43
SpringMVC如何实现数据类型转换 1、类型转换:首先表单数据(全部是字符串)通过WebDataBinder进行绑定到命令对象,内部通过Converter SPI实现; 2、数据验证:使用JSR-303验证框架进行验证; 3、格式化显示:在表单页面可以通过如下方式展示通过内部通过Converter SPI格式化的数据和错误信息; 数据类型转换 SpringMVC数据转换包括两部分 一、类型转换器:提供类型转换的实现支持; 1、Converter:类型转换器,用于转换S 类型到T 类型,此接口的实现必须是线程安全的且可以被共享。 package org.springframework.core.convert.converter; public interface Converter<S, T> { // S 是源类型T 是目标类型T convert(S source); // 转换S 类型的source 到T 目标类型的转换方法 } 2、GenericConverter 和ConditionalGenericConverter:GenericConverter 接口实现能在多种类型之间进行转换,ConditionalGenericConverter 是有条件的在多种类型之间进行转换。GenericConverter: package org.springframework

Spring MVC 到 Spring BOOT的简化之路

萝らか妹 提交于 2019-11-29 15:52:51
背景 从Servlet技术到Spring和Spring MVC,开发Web应用变得越来越简捷。但是Spring和Spring MVC的众多配置有时却让人望而却步,相信有过Spring MVC开发经验的朋友能深刻体会到这一痛苦。因为即使是开发一个Hello-World的Web应用,都需要我们在pom文件中导入各种依赖,编写web.xml、spring.xml、springmvc.xml配置文件等。特别是需要导入大量的jar包依赖时,我们需要在网上查找各种jar包资源,各个jar间可能存在着各种依赖关系,这时候又得下载其依赖的jar包,有时候jar包间还存在着严格的版本要求,,所以当我们只是想开发一个Hello-World的超简单的Web应用时,却把极大部分的时间在花在了编写配置文件和导入jar包依赖上,极大地影响了我们的开发效率。所以为了简化Spring繁杂的配置,Spring Boot应运而生。正如Spring Boot的名称一样,一键启动,Spring Boot提供了自动配置功能,为我们提供了开箱即用的功能,使我们将重心放在业务逻辑的开发上。那么Spring Boot又是怎么简化Spring MVC的呢?Spring Boot和Spring、Spring MVC间又是怎样的关系呢?Spring Boot又有什么新特点呢?接下来,让我们走进Spring MVC 到Spring