我是JSP编程的新手,正在为一个家庭成员编写一个Web应用程序。在我学习的过程中,我听到很多关于如何将JSP用于表示,而servlet用于业务逻辑。我的问题基本上是关于这种情况有多远以及何时使用JSTL是不好的做法。这是一个例子:我有一个我的应用程序的登录页面,我正在使用c:如果自定义函数连接到我的java类来处理表单。这会被认为是糟糕的MVC实践,或者因为我只引用了EL的逻辑代码,这是JSP的合法使用吗?
答案 0 :(得分:5)
你的问题包含许多最佳实践,这些实践引发了很多观点和争论,这在这个论坛中通常是不受欢迎的。通常,JSP是MVC中的“V”,应该用于呈现由“M”odel提供的数据,这将是您的Java代码。 “C”ontroller经常分散在M和V之间(邀请更多辩论,抱歉)。
您在JSP中放置的任何逻辑除了查看给定的数据并决定如何呈现它之外,还将其移向模型。您的登录页面应该只收集凭据并将它们呈现给模型,模型应该响应“无效”并重新请求凭证(或完全失败),或者如果有效,则转到下一页。
在实践中,恕我直言,你不应该放置很多(如果有的话)操作数据的代码,除了格式化它 - 创建表条目,用链接包装等等。你不应该(恕我直言)查询数据库,执行计算,等等,在JSP中 - 让模型做到这一点。
正如duffymo所说,JSP已经过时了,但它们仍然有效。我建议您也考虑AngularJs(ng)(在阅读了关于V1诉V2的争议之后)。
答案 1 :(得分:4)
JSP是一种过时的技术,很少有软件仍在使用它。但是如果你想使用它,我建议你使用Oracle Coding Standards。这个页面应该让你清楚地知道你应该和不应该做什么。
答案 2 :(得分:0)
JSP的最佳实践 - 根本不使用JSP 。我会试着解释原因并明确。
首先,我必须解释一些与JSP没有任何联系的东西,但它将帮助您理解JSP技术的确切问题。
在函数式编程中有一个术语 - 纯函数。这意味着它没有副作用。此外,这样的函数确保对于具有相同输入的每次调用,总是返回相同的输出。 在OOP中,函数并不纯粹。它可能有副作用。它使我们的生活更加复杂。但重要的是,这些副作用只能在 WITHIN 您的功能中发生。你可以调试它。或多或少在你的控制之下。
让我们假设我们用JSP编写的函数作为函数f,输入I和输出O:
O f(I)
JSP的第一个问题是它有副作用,这样的副作用不仅可以在你的函数f
内发生,而且还可以从外部影响它。一个简单的例子:您使用tiles
技术,您的jsp页面将用作切片模板中的组件。此模板的另一个组件使用getOutputstream()
方法并写入此输出流。但是应用程序可以在任何给定的响应上调用getOutputStream或getWriter,不允许同时执行这两个操作。 JSP引擎使用getWriter,因此您无法调用getOutputStream。并且你进入你的jsp页面,只有它一个人工作正常:
java.lang.IllegalStateException:已为此响应调用了getOutputStream()
getOutputStream() has already been called for this response
您可以说正确使用jsp技术并应用最佳实践可以解决大多数问题。是。同意。但它永远不会摆脱其内部缺点和复杂性。你总是要检查,真的开发人员是否遵循了最佳实践?我们的日子里有更好,更好的技术。
注意:唯一的例外或用例,当我亲自使用它时:用于本地化。您没有从服务器获取所有消息。您不希望要求服务器逐个获取本地化字符串。例如,您确实希望获得一批将在Web表单上使用的值。使用JSP + JS,您可以非常轻松地进行表达。