2016-09-14 124 views
1

我是JSP编程新手,正在为家庭成员编写Web应用程序。在我学习的过程中,我听到很多关于JSP如何用于表示和Servlet是用于业务逻辑的信息。我的问题基本上是关于多远,当我使用JSTL将是不好的做法。下面是一个例子:我有一个我的应用程序的登录页面,并且我正在使用c:if的自定义函数连接到我的java类来处理表单。这会被认为是不好的MVC实践,或者,因为我只是从EL引用我的逻辑代码,这是JSP的合法用法吗?JSP和MVC最佳实践

+1

JSP是一种较老的技术,是对Microsoft Active Server Pages的20世纪90年代的回应。更现代的方法是使用HTML5,CSS3和JavaScript查看网页; REST服务; HTTP servlets /控制器与客户端进行交互。 – duffymo

+0

所以你会建议不要使用它们? –

+1

请不要接受这个建议。 HTML5,CSS3和JavaScript都很棒,但对于动态Java Web应用程序根本无法帮到你。听起来就像你建立一个Java Web应用程序。使用JSP。否则,你会限制你可以做的事情。 – Shaggy

回答

4

你的问题包含了很多什么是最佳实践,它引发了很多意见和辩论,这在本论坛中通常会被忽视。一般来说,JSP是MVC中的“V”视图,应该用来呈现由“M”odel提供的数据,这将是您的Java代码。 “C”型推车经常分散在M和V之间(邀请更多的辩论,抱歉)。

您在JSP中放置的任何逻辑都无法查看给定的数据并决定如何呈现它,并将其移至模型。您的登录页面应仅收集凭证并将其呈现给模型,模型将依次以“无效”作出响应并重新申请凭据(或完全失败),或者如果有效,则转到下一页。在实践中,恕我直言,你不应该放置很多操作数据的代码(除了格式化之外) - 创建表格条目,包装链接等。不应该(恕我直言)查询数据库,执行计算等,在JSP中 - 让模型做到这一点。

正如duffymo所言,JSP是旧的,但它们仍然有效。我建议你也考虑AngularJs(ng)(在阅读关于V1 v。V2的争议之后)。

4

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

0

JSP的最佳实践是完全不使用JSP。我会试着解释为什么并且要清楚。

首先,我必须解释一些根本就没有JSP连接的东西,但它可以帮助您理解JSP技术的确切问题。

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

让我们想象一下我们写在JSP作为一个函数f与输入功能,我和输出端0:

O f(I) 
  1. 与JSP的第一个问题是,它有副作用,这种副作用会发生不仅在你的功能f里面,还可以从外面影响它。一个简单的例子:您使用tiles技术,您的jsp页面被用作tile模板中的组件。此模板的另一个组件使用getOutputstream()方法并写入此输出流。但是应用程序可以在任何给定的响应中调用getOutputStream或getWriter,但不允许这两者都执行。 JSP引擎使用getWriter,所以你不能调用getOutputStream。而你在你的JSP页面工作得很好,当它是孤独的:

    java.lang.IllegalStateException:getOutputStream方法()已经被调用,这种响应

getOutputStream() has already been called for this response

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

    注意:唯一的例外或用例,当我亲自使用它:用于本地化。您没有从服务器获取所有消息。您不想让服务器逐一获取本地化的字符串。例如,您希望获得一批值,这些值将用于您的Web表单。使用JSP + JS,您可以非常轻松地进行解析。