Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在真正的基于Java的企业应用程序中,应该在哪一层进行验证?_Java_Spring Mvc_Bean Validation - Fatal编程技术网

在真正的基于Java的企业应用程序中,应该在哪一层进行验证?

在真正的基于Java的企业应用程序中,应该在哪一层进行验证?,java,spring-mvc,bean-validation,Java,Spring Mvc,Bean Validation,我曾在一些主要基于Spring框架和JavaEE(主要是EJB)的企业应用程序中担任开发人员;但不是所有的图层(视图图层是我至少研究过的) 考虑多层应用程序(客户端层、业务层、数据层等)数据验证应在哪一层进行? 我听说过Bean验证API即:jsr303;但是验证是在bean中执行的,即服务器端(如果我理解正确的话) 那么在实际应用中,验证应该在哪里进行呢?是否应该在客户端层本身进行一些验证(例如,如果使用的视图技术是JSP,那么验证是否应该在JSP中进行)?如果是这样,那么JSR303的优点是

我曾在一些主要基于Spring框架和JavaEE(主要是EJB)的企业应用程序中担任开发人员;但不是所有的图层(视图图层是我至少研究过的)

考虑多层应用程序(客户端层、业务层、数据层等)数据验证应在哪一层进行?

我听说过Bean验证API即:
jsr303
;但是验证是在bean中执行的,即服务器端(如果我理解正确的话)

那么在实际应用中,验证应该在哪里进行呢?是否应该在客户端层本身进行一些验证(例如,如果使用的视图技术是JSP,那么验证是否应该在JSP中进行)?如果是这样,那么JSR303的优点是什么

因为验证而拒绝从客户端到服务器的数据传输也是没有意义的,我不清楚什么是正确的验证方法


理解这一点的任何解释都是值得赞赏的。

您是正确的,Bean Validation API在业务逻辑层执行验证,而不是在客户端执行验证。一般来说,数据验证应该尽可能靠近客户机进行,最好是在客户机端进行,这也是正确的

但有时,您无法在那里进行验证,因此需要服务器端验证。例如,如何验证已在注册页面中登录

有时验证甚至深入到数据层。例如,数据完整性约束是数据层验证(引用完整性、可空性等)


总之,数据验证应尽可能在客户端进行,但有时不能在客户端进行。因此,您必须在服务器端进行验证,而不必考虑在客户端和服务器之间传输数据的成本。

您是正确的,Bean验证API在业务逻辑层而不是客户端执行验证。一般来说,数据验证应该尽可能靠近客户机进行,最好是在客户机端进行,这也是正确的

但有时,您无法在那里进行验证,因此需要服务器端验证。例如,如何验证已在注册页面中登录

有时验证甚至深入到数据层。例如,数据完整性约束是数据层验证(引用完整性、可空性等)

总之,数据验证应尽可能在客户端进行,但有时不能在客户端进行。因此,您必须在服务器端执行此操作,而不必考虑在客户端和服务器之间传输数据的成本。

据我所知,因为“验证从用户接收的输入以保持数据完整性是应用程序逻辑的一个重要部分”,始终鼓励web开发人员在UI和业务逻辑中进行两步数据验证。让我向你简要介绍一下

  • 客户端验证的优点是,您可以控制在需要时警告用户,并立即显示相关消息。但是请记住,要避免使用复杂的逻辑,例如将日期比较作为验证,因为在后端,您将有足够的自由来验证各种约束
  • 通常最好在业务层执行后端验证,因为业务层可能成为应用程序最强大的部分。这确保了完美的输出,记住抛出自定义异常,使应用程序看起来更好,并利用现有方法进行验证{ex.isDigit()、isEmpty()等}
  • 在数据层级别,尽量减少验证,但有时如果依赖于其他服务等,我们必须包含验证
  • 关于JSR303,bean验证,它有助于简化映射到bean的用户输入字段的验证{通常在基于Spring的REST应用程序中}

    对于您的疑问,“由于验证而拒绝从客户端到服务器的数据传输也没有意义。”。。看起来可能是这样,但以这种方式处理涉及复杂逻辑的验证和更好地处理异常是非常重要的。

    因为据我所知,“验证从用户接收的输入以保持数据完整性是应用程序逻辑的一个重要部分”,始终鼓励web开发人员在UI和业务逻辑中进行两步数据验证。让我向你简要介绍一下

  • 客户端验证的优点是,您可以控制在需要时警告用户,并立即显示相关消息。但是请记住,要避免使用复杂的逻辑,例如将日期比较作为验证,因为在后端,您将有足够的自由来验证各种约束
  • 通常最好在业务层执行后端验证,因为业务层可能成为应用程序最强大的部分。这确保了完美的输出,记住抛出自定义异常,使应用程序看起来更好,并利用现有方法进行验证{ex.isDigit()、isEmpty()等}
  • 在数据层级别,尽量减少验证,但有时如果依赖于其他服务等,我们必须包含验证
  • 关于JSR303,bean验证,它有助于简化映射到bean的用户输入字段的验证{通常在基于Spring的REST应用程序中}


    对于您的疑问,“由于验证而拒绝从客户端到服务器的数据传输也没有意义。”。。看起来可能是这样,但让流程以这种方式处理涉及复杂逻辑的验证和更好地处理异常是非常重要的。

    通常,流程中有3层