Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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中存在Scriptlet?_Java_Jsp_Jakarta Ee_Scriptlet - Fatal编程技术网

Java 为什么JSP中存在Scriptlet?

Java 为什么JSP中存在Scriptlet?,java,jsp,jakarta-ee,scriptlet,Java,Jsp,Jakarta Ee,Scriptlet,我已经听说过无数次了,在JSP中使用Scriptlet(那些php喜欢的东西)是多么可怕 已经证明,Scriptlet打破了代码设计模式,通常是 许多J2EE框架(如)已经禁用了Scriptlet的使用 既然Scriptlet不需要用于任何用途,并且可以用JSTL、其他标记库和EL(表达式语言)替换,为什么它们仍然存在?Oracle为什么还没有将这些Scriptlet从JSP技术中删除?它们仍然是为了向后兼容而存在的。这是三年前的问题,但我想谈谈我个人的看法。我在大型项目(CRM系统)中使用

我已经听说过无数次了,在JSP中使用Scriptlet(那些php喜欢的
东西)是多么可怕

  • 已经证明,Scriptlet打破了代码设计模式,通常是
  • 许多J2EE框架(如)已经禁用了Scriptlet的使用

既然Scriptlet不需要用于任何用途,并且可以用JSTL、其他标记库和EL(表达式语言)替换,为什么它们仍然存在?Oracle为什么还没有将这些Scriptlet从JSP技术中删除?

它们仍然是为了向后兼容而存在的。

这是三年前的问题,但我想谈谈我个人的看法。我在大型项目(CRM系统)中使用JSP和Scriptlet已经超过15年,以下是我的经验:

  • Scriptlet只有在您允许的情况下才会打破MVC模式。我不明白为什么要比
    好一些。很多时候情况实际上更糟。它更为冗长,您可能会丢失类型信息。属性是
    priceVat
    BigDecimal还是用货币格式化的字符串?在EL的情况下,您有时不知道(取决于使用的IDE)
  • 自动化重构对我们的项目有很大帮助。如果一个开发人员将
    getPriceVat
    方法重命名为
    getPriceTax
    ,那么它必须反映在所有代码库中。IntelliJ IDEA在处理Scriptlet方面非常出色。不确定它是否自动将
    ${product.priceVat}
    重命名为
    ${product.priceTax}
    (编辑:确实如此,很酷)。Netbeans或Eclipse不能很好地处理JSP sefactoring
  • Scriptlet的性能优于EL/JSTL组合。如果你从引擎盖下面看的话,他们一定会的。后者产生更大的代码(ApacheJasper),我们在64kB代码限制下运行了几次Java方法,并被迫用Scriptlet替换一些标记
  • 原型设计。我们经常使用scriptlet(type code-refresh-page-type code-refresh…)创建JSP原型。稍后,我们将增强标记库并清理页面
  • 热修复程序。我们通过直接更改生产服务器上的一个JSP脚本来防止服务器重新启动几次。如果需要更改类内部的编译代码并需要重新生成整个WAR文件,则不可能。我知道这很恶心
  • 代码缩进是Scriptlet的噩梦。这是使用scriptlet的明显缺点
  • 我希望对Scriptlet的支持永远不会被弃用。在web.xml中禁用scriptlet的功能对于干净的代码纯化者来说应该足够好了

它们没有被删除的主要原因是向后兼容性,但正如您所说,它们现在已经被弃用了。我喜欢Scriptlet。我一直在用它们。它们非常方便。@rickz为什么您更喜欢使用Scriptlet而不是JSP标记库和表达式语言?我都使用它们。但是,你不能因为scriptlets做得又快又脏而打败它。我将一些java放入scriptlet,并使用浏览器调用它。我对我的代码做了一些更改,然后点击刷新按钮。我一遍又一遍地这样做,直到我对结果感到满意。你不能只是从产品中删除一些东西。自1.1版本和AWT事件模型更改以来,Java中没有任何内容被删除。如果是的话。