Java 为什么我们可以在刷新页面时看到jsp上所做的更改?为什么不使用servlet呢?

Java 为什么我们可以在刷新页面时看到jsp上所做的更改?为什么不使用servlet呢?,java,jsp,jakarta-ee,servlets,Java,Jsp,Jakarta Ee,Servlets,为什么我们可以在刷新页面时看到jsp上所做的更改? 如果servlet发生任何更改,为什么我们必须重新启动服务器? 两者之间的区别是什么?servlet是预编译的类文件,但jsp将仅在运行时编译。我们有jasper listener for jsp,当我们更改jsp时,它将通知服务器,然后服务器将用新的类文件替换旧的类文件。这就是jsp更改会立即反映出来的原因。servlet是我们在WEB-INF下隐藏的编译类,但它会将它们复制到其基本工作位置以运行它们。在该位置更改之前,更改不会反映出来,只有

为什么我们可以在刷新页面时看到jsp上所做的更改? 如果servlet发生任何更改,为什么我们必须重新启动服务器?
两者之间的区别是什么?

servlet是预编译的类文件,但jsp将仅在运行时编译。我们有jasper listener for jsp,当我们更改jsp时,它将通知服务器,然后服务器将用新的类文件替换旧的类文件。这就是jsp更改会立即反映出来的原因。

servlet是我们在WEB-INF下隐藏的编译类,但它会将它们复制到其基本工作位置以运行它们。在该位置更改之前,更改不会反映出来,只有在服务器重新启动时才会反映出来


对于要求Tomcat执行jsp的jsp页面,is会将jsp文件的修改日期与对应于此jsp的编译类的修改时间进行比较,如果是最近的,则会在执行之前动态重新编译。

其他答案是正确的,不管您怎么问“为什么我们必须重新启动服务器?”您不需要。您只需要服务器利用更新的文件,而不是从缓存中提取。有多种方法可以做到这一点。对于Tomcat 8.0.21,保存web.xml中的更改似乎会导致服务器使用文件而不是缓存


我发现最快的方法是添加一个空格,保存,删除空格,然后再次保存。此外,我在一个重要的区域内,如url模式标记内进行了此操作。

如果使用eclipse,可以使用调试模式。此外,这只适用于方法内部的更改,而不适用于任何新的方法定义或参数更改