html文件中的内联后端代码

时间:2016-04-28 22:18:43

标签: java python asp.net-mvc django jsp

每当我在JSP中编码并具有如下内联Java代码时:

  <%
    double num = Math.random();
    if (num > 0.95) {
  %>
      <h2>You'll have a luck day!</h2><p>(<%= num %>)</p>
  <%
    } else {
  %>
      <h2>Well, life goes on ... </h2><p>(<%= num %>)</p>
  <%
    }
  %>

它似乎让人们疯狂,他们传递的评论如下:

  

为什么使用20年前的技术?

     

这不是可管理的代码

     

你应该使用Servlets

     

你应该使用JSTL。

     

即使是JSTL也不再是一种良好实践。

然而,当涉及到其他语言,如Python(Django)和C#(ASP.NET)时,它似乎完全没问题。早在短短几个月内,以下片段就来自教程。

所以这里发生了什么?只有Java找到了正确管理代码的方法,而其他语言则坐拥20年历史的技术?或者Java开发人员对完全可接受的编码方式做出了反应?

{% for x in range(5) %}
    <h1>Hello World</h1>
{% endfor %}

Razor中的情况与ASP.NET MVC在启动新项目时初始化时的情况相同,cshtml页面具有内联c#代码。例如如下:

@{ var theMonth = DateTime.Now.Month; }
<p>The numeric value of the current month: @theMonth</p>

注意:请注意,我不是要求如何避免在JSP中编写Java代码。我在问为什么后端编码“不是问题”在其他语言中更少Java。

1 个答案:

答案 0 :(得分:0)

问题不仅仅是scriptlet。

问题在于表示和业务逻辑的分离。

当然,演示文稿(你的模板)需要逻辑,比如重复值的条件部分和循环,但数据的收集/准备(业务逻辑)属于用纯Java / C#/ Python编写的动作处理程序,而不是嵌入(隐藏)在演示模板中。

对于Java和JSP,JSP模板支持scriptlet,但它也支持标记库,基本上不赞成使用scriptlet,以至于经常禁止scriptlet(编码策略)。

对于其他模板语言,没有两种方法可以使用条件和循环逻辑,您可以使用可用的语言。你不能禁止&#34;这样做是唯一的方法,但你仍然应该这种逻辑限制为纯粹的表现逻辑。

E.g。 C#,或者更确切地说是ASP.NET,鼓励使用code-behind model

  

ASP.NET的代码隐藏模型标志着与经典ASP的不同之处在于它鼓励开发人员在构建具有表示和内容分离的应用程序时。

因此,对于JSP来说,JSTL应该足够强大,可以为 presentation 做任何你需要的事情。所有其他逻辑应该处于动作处理程序中。因此,不应该(很少)需要编写scriptlet。