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