首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么理由我不应该预编译JSP页面吗?

有什么理由我不应该预编译JSP页面吗?
EN

Stack Overflow用户
提问于 2015-11-18 19:19:38
回答 3查看 4.2K关注 0票数 4

我对JSP技术的理解是,服务器必须将JSP转换为servlet,并在第一次请求JSP时编译它。我正在使用的服务器(IBM )在部署期间可以选择“预编译JSP页面”。默认情况下,此选项被禁用。

由于这个JSP编译无论如何都必须在某个时候执行,所以在部署时最好是在不影响用户交互(由于页面加载时间较长)时执行。当然,这种编译只对第一个访问页面的用户进行,但是.

难道我不应该在Websphere (或者任何Java服务器)上预编译JSP吗?为什么默认情况下会禁用它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-18 19:31:22

我对此不太确定。到目前为止,我并不是一个JBOSS大师,但我认为如果你考虑到原因,这可能是一个权衡的问题。我可以想象,如果你预编好你的页面,这个过程将需要一些时间。如果您只是在点击页面时编译它们,这会随着时间的推移而扩展,因为每个页面只有在被调用时才会被编译。

不同之处在于,并不是所有的页面都需要在一个场景中得到遵从,这样应用程序才能更快地运行,但是您想要的页面必须在生成响应之前进行编译。

最重要的地方可能是在开发中,因为只有在按需编译时才会编译实际要访问的页面。这样,应用程序编译的速度就会更快,部署的速度就会更快,复杂的调试重构周期就会加快。

在现实世界中,对于生产部署,您可能总是希望预编译所有jsp文件。

票数 3
EN

Stack Overflow用户

发布于 2018-09-10 22:54:00

由于这已经持续了三年,没有人提到安全,请允许我提一下安全问题。

预编译您的JSP,将类文件放入JAR中,对所有JAR进行签名,并制定安全策略,强制为应用程序逻辑进行代码签名。

按需编译JSP的web服务器对代码注入攻击是开放的.如果攻击者能够将JSP放到服务器上,服务器将编译JSP并将其逻辑添加到应用程序中。预先编译JSP和禁用生产服务器上的按需编译会阻止有人这样做.它还允许您拥有一个更安全的服务器,因为服务器不需要编译Java,只需运行它。您不能将开发工具放在服务器上。

现在,在有人跳进来说:“嘿,如果你能在目标服务器上放置一个JSP,是什么阻止你把恶意编译的代码放在那里呢?”让我来谈谈。

使用JSP作为攻击向量的一个好处是,通常有一种直接的方法来触发JSP中任何逻辑的执行。还可以将代码添加到现有的JSP中,以便将其用作执行挂钩。用JAR中的代码来做这件事是很困难的,但也不是不可能的。

使恶意JAR无法执行的是JAR签名。如果您的JVM配置为只运行签名的JAR (就应用程序代码而言),那么上传的类和JAR文件将不会在JVM中执行。

解决安全问题的最佳时机是在部署应用程序之前,而不是在泄露了1.43亿人的个人数据之后。只是说说而已。

*我至少从2003年起就指出了这一点,到目前为止,没有人真正听从这一建议。我还在把它放那**。

**自2011年以来,我的应用程序都没有使用JSP,因此对我来说,这是一个有一段时间没有讨论的问题。

票数 4
EN

Stack Overflow用户

发布于 2017-12-13 11:41:35

我提前预编译所有JSP页面的原因是为了捕捉任何编译错误。通常,IDE会告诉您页面中的错误,但是包含大量片段的大型项目可能会混淆或减慢IDE,从而导致关闭JSP验证。

为了获得错误检查,我更希望编译时间略有增加。如果您使用Maven或如果您喜欢Ant,我建议使用类似于jspc-maven-pluginjspc任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33788519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档