Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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 JSP和MVC最佳实践_Java_Jsp_Jakarta Ee_Model View Controller_Jstl - Fatal编程技术网

Java JSP和MVC最佳实践

Java JSP和MVC最佳实践,java,jsp,jakarta-ee,model-view-controller,jstl,Java,Jsp,Jakarta Ee,Model View Controller,Jstl,我是JSP编程新手,正在为一位家庭成员编写一个web应用程序。在我学习的过程中,我听到了很多关于JSP应该如何用于表示和servlet如何用于业务逻辑的信息。我的问题基本上是关于这会走多远,以及何时使用JSTL会是一种糟糕的做法。这里有一个例子:我有一个应用程序的登录页面,我使用c:if和连接到java类的自定义函数来处理表单。这会被认为是糟糕的MVC实践吗?或者,因为我只是引用了EL中的逻辑代码,这是JSP的合法使用吗?JSP是一种过时的技术,现在仍然使用它的软件很少。但是如果你想用它,我建议

我是JSP编程新手,正在为一位家庭成员编写一个web应用程序。在我学习的过程中,我听到了很多关于JSP应该如何用于表示和servlet如何用于业务逻辑的信息。我的问题基本上是关于这会走多远,以及何时使用JSTL会是一种糟糕的做法。这里有一个例子:我有一个应用程序的登录页面,我使用c:if和连接到java类的自定义函数来处理表单。这会被认为是糟糕的MVC实践吗?或者,因为我只是引用了EL中的逻辑代码,这是JSP的合法使用吗?

JSP是一种过时的技术,现在仍然使用它的软件很少。但是如果你想用它,我建议你用它。这一页应该给你一个清晰的概念,你应该做什么,不应该做什么

JSP是一种过时的技术,很少有软件仍然使用它。但是如果你想用它,我建议你用它。这一页应该给你一个清晰的概念,你应该做什么,不应该做什么

您的问题包含了许多最佳实践,这些实践引发了许多意见和争论,而这些意见和争论在本论坛中通常是不受欢迎的。一般来说,JSP是MVC中的视图,应该用来表示模型提供的数据,这些数据就是您的Java代码。控制器经常分散在M和V之间,引起更多的争论,对不起

您在JSP中放入的任何逻辑,如果超出了查看给定数据并决定如何表示数据的范围,就会将其移向模型。您的登录页面应该只收集凭据并将其呈现给模型,然后模型将以无效响应并重新请求凭据,或者完全失败,或者如果有效,则转到下一页

在实践中,IMHO,除了格式化数据之外,您不应该放置很多(如果有的话)处理数据的代码——创建表条目、使用链接包装等等。您不应该在JSP中IMHO查询数据库、执行计算等——让模型来做这件事


正如duffymo所说,JSP很旧,但它们仍然有效。我建议你在阅读V1V争论之后,也会考虑AngularJs NG。V2

您的问题包含了许多最佳实践,这些实践引发了许多意见和争论,而这些意见和争论在本论坛中通常是不受欢迎的。一般来说,JSP是MVC中的视图,应该用来表示模型提供的数据,这些数据就是您的Java代码。控制器经常分散在M和V之间,引起更多的争论,对不起

您在JSP中放入的任何逻辑,如果超出了查看给定数据并决定如何表示数据的范围,就会将其移向模型。您的登录页面应该只收集凭据并将其呈现给模型,然后模型将以无效响应并重新请求凭据,或者完全失败,或者如果有效,则转到下一页

在实践中,IMHO,除了格式化数据之外,您不应该放置很多(如果有的话)处理数据的代码——创建表条目、使用链接包装等等。您不应该在JSP中IMHO查询数据库、执行计算等——让模型来做这件事


正如duffymo所说,JSP很旧,但它们仍然有效。我建议你在阅读V1V争论之后,也会考虑AngularJs NG。V2

JSP的最佳实践是根本不使用JSP。我会尽力解释原因并澄清

首先,我必须解释一些与JSP根本没有联系的东西,但它将帮助您理解JSP技术的确切问题

在函数式编程中有一个术语-纯函数。这意味着它没有副作用。此外,这样的函数可以保证每次使用相同输入的调用总是返回相同的输出。 在OOP中,函数不是纯粹的。它可能有副作用。它使我们的生活更加复杂。但重要的是,这些副作用只能在你的功能范围内发生。你可以调试它。它或多或少在你的控制之下

让我们想象一下,我们用JSP编写的功能是一个带有输入I和输出O的函数f:

O f(I)
JSP的第一个问题是它确实有副作用,这种副作用不仅可能发生在函数f内部,而且还可能从外部影响它。一个简单的例子:您使用tiles技术,您的jsp页面被用作tiles模板中的一个组件。此模板的另一个组件使用getOutputstream方法并写入此输出流。但是应用程序可以对任何给定的响应调用getOutputStream或getWriter,不允许两者都调用。JSP引擎使用getWriter,因此不能调用getOutputStream。当jsp页面单独运行时,您的jsp页面工作正常:

java.lang.IllegalStateException:已为此响应调用getOutputStream

使用函数可以显式地获取输入参数。 输入总是清晰的。此外,您可以使用常量,或者,如果您的函数有副作用,则可以使用其他服务来获取数据以进行处理。但它总是在你的职责范围内,或多或少在你的控制之下。对于JSP页面,您根本没有这样的控制。输入数据可以放在具有不同servlet/web组件的会话中,输入数据可以通过带有大量if语句的servlet放在请求范围中。您必须首先研究这个servlet的逻辑。创建“Hello World!”程序时,额外的复杂性并不明显,但当您维护几年前编写的此类页面时,这确实会让您发疯。 我想你们已经读到了,混合输出和逻辑不是一个好主意。JSP允许人们这样做。因为它“很方便”。 您不能在jsp页面中测试逻辑。或者这会让事情变得更加困难。 可以说,正确使用jsp技术和应用最佳实践解决了大多数问题。对同意但它永远无法摆脱其内部缺陷和复杂性。您必须经常检查,开发人员是否遵循了最佳实践?在我们的时代,有更好、更好的技术


注意:我个人会使用它的唯一例外或用例:用于本地化。您没有从服务器获取所有邮件。您不希望要求服务器逐个获取本地化字符串。例如,您确实希望获得一批将在web表单上使用的值。使用JSP+JS,您可以非常轻松地完成这项工作,并将其明确化

JSP的最佳实践是根本不使用JSP。我会尽力解释原因并澄清

首先,我必须解释一些与JSP根本没有联系的东西,但它将帮助您理解JSP技术的确切问题

在函数式编程中有一个术语-纯函数。这意味着它没有副作用。此外,这样的函数可以保证每次使用相同输入的调用总是返回相同的输出。 在OOP中,函数不是纯粹的。它可能有副作用。它使我们的生活更加复杂。但重要的是,这些副作用只能在你的功能范围内发生。你可以调试它。它或多或少在你的控制之下

让我们想象一下,我们用JSP编写的功能是一个带有输入I和输出O的函数f:

O f(I)
JSP的第一个问题是它确实有副作用,这种副作用不仅可能发生在函数f内部,而且还可能从外部影响它。一个简单的例子:您使用tiles技术,您的jsp页面被用作tiles模板中的一个组件。此模板的另一个组件使用getOutputstream方法并写入此输出流。但是应用程序可以对任何给定的响应调用getOutputStream或getWriter,不允许两者都调用。JSP引擎使用getWriter,因此不能调用getOutputStream。当jsp页面单独运行时,您的jsp页面工作正常:

java.lang.IllegalStateException:已为此响应调用getOutputStream

使用函数可以显式地获取输入参数。输入总是清晰的。此外,您可以使用常量,或者,如果您的函数有副作用,则可以使用其他服务来获取数据以进行处理。但它总是在你的职责范围内,或多或少在你的控制之下。对于JSP页面,您根本没有这样的控制。输入数据可以放在具有不同servlet/web组件的会话中,输入数据可以通过带有大量if语句的servlet放在请求范围中。您必须首先研究这个servlet的逻辑。创建“Hello World!”程序时,额外的复杂性并不明显,但当您维护几年前编写的此类页面时,这确实会让您发疯。 我想你们已经读到了,混合输出和逻辑不是一个好主意。JSP允许人们这样做。因为它“很方便”。 您不能在jsp页面中测试逻辑。或者这会让事情变得更加困难。 可以说,正确使用jsp技术和应用最佳实践解决了大多数问题。对同意但它永远无法摆脱其内部缺陷和复杂性。您必须经常检查,开发人员是否遵循了最佳实践?在我们的时代,有更好、更好的技术


注意:我个人会使用它的唯一例外或用例:用于本地化。您没有从服务器获取所有邮件。您不希望要求服务器逐个获取本地化字符串。例如,您确实希望获得一批将在web表单上使用的值。使用JSP+JS,您可以非常轻松地完成这项工作,并将其明确化

JSP是一种较老的技术,是对Microsoft Active Server页面的一种响应。更现代的方法是使用HTML5、CSS3和JavaScript查看页面;休息服务;HTTP servlet/controllers与客户端交互。因此,建议不要使用它们
请不要接受那个建议。HTML5、CSS3和JavaScript都很棒,但它们对动态JavaWeb应用程序毫无帮助。听起来就像你在构建一个Java web应用程序。使用JSP。是的,我对JSTL和EL的使用更感兴趣。我之所以选择这种体系结构,是因为很多关于Java的帖子都提到JSP是一种需求,而我是一个新手,正在尝试确定获得Java经验的最佳框架。也许它已经很旧了,但仍然在使用?请注意,如果您使用scriptlet代码编写JSP,我们会找到您。只使用JSTL和坚持标签。JSP是一种较旧的技术,是对Microsoft Active Server页面的一种响应。更现代的方法是使用HTML5、CSS3和JavaScript查看页面;休息服务;HTTP servlet/controllers与客户端交互。因此,您建议根本不要使用它们?请不要采纳该建议。HTML5、CSS3和JavaScript都很棒,但它们对动态JavaWeb应用程序毫无帮助。听起来就像你在构建一个Java web应用程序。使用JSP。是的,我对JSTL和EL的使用更感兴趣。我之所以选择这种体系结构,是因为很多关于Java的帖子都提到JSP是一种需求,而我是一个新手,正在尝试确定获得Java经验的最佳框架。也许它已经很旧了,但仍然在使用?请注意,如果您使用scriptlet代码编写JSP,我们会找到您。仅使用JSTL并坚持使用标记。