为什么我们可以看到刷新页面时对jsp所做的更改? 为什么我们必须重新启动服务器以防servlet中的任何更改? 两者有什么区别?
答案 0 :(得分:2)
Servlet是预编译的类文件,但jsp只能在运行时编译。我们有jsp的jasper监听器,它会在我们更改jsp时通知服务器然后服务器将用新的替换旧的类文件。这就是为什么jsp更改会立即反映出来的原因。
答案 1 :(得分:1)
Servlet是我们在WEB-INF下的某个地方编译的编译类,但它将它们复制到它的基本工作位置来运行它们。在这个位置更改它们之前,更改不会反映,只有在服务器重新启动时才会这样做。
在jsp页面的情况下当要求Tomcat执行JSP时,将JSP文件的修改日期与对应于此JSP的已编译类的修改时间进行比较,如果是更新的,则会在运行时重新编译在执行之前。
答案 2 :(得分:0)
其他答案都是正确的,但是您要求" 为什么我们必须重新启动服务器?"你不。您只需要服务器使用更新的文件而不是从缓存中提取。有多种方法可以做到这一点。对于Tomcat 8.0.21,似乎在web.xml中保存更改会导致服务器使用文件而不是缓存。
我发现这样做的最快方法是添加空格,保存,删除空格,再次保存。此外,我是在一个重要的区域内完成的,例如在url-pattern标签内。