2012-03-13 36 views
11

我一直在使用JSP,Servlet已經有一段時間了。我知道,只要我們在Servlet中更改了任何內容,我們就需要重新啓動Tomcat服務器以獲取更改。在JSP更改的情況下,tomcat不需要重新啓動。爲什麼tomcat在jsp變更時不需要重啓

根據我的知識JSP只有在編譯時纔將頁面轉換爲Servlet。因此,畢竟它的一個Servlet。所以,它是如何工作,而不需要Tomcat重新啓動。

我的案件時認識一個JSP頁面被服務器重新啓動後第一次訪問編譯像等

回答

8

因爲默認情況下,tomcat以開發模式啓動,這意味着在檢測到更改時重新編譯JSP衍生的servlet。這是一個很好的問題,JVM如何加載新類 - 可能是tomcat classloader被配置爲這樣做。

一些相關的注意事項:

  • 您可以關閉生產
  • 你可以有servlet的重新加載以及
  • 發展選項 - 你必須在debug mode一個JVM啓動tomcat。
+0

'當檢測到變化時' - tomcat如何決定有變化? – 2016-09-13 08:36:01

11

因爲當Tomcat要求執行JSP,是比較與JSP文件的修改日期與此JSP相對應的已編譯類的修改時間,如果更新,則會在執行它之前即時重新編譯。

這是BTW應該在生產中關閉的選項,因爲執行此檢查需要時間。

查看http://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html瞭解詳情。

+0

是的,但應該有一些JVM加載新類的方法。默認情況下它沒有。我認爲這是允許它的tomcat的自定義類加載器。 – Bozho 2012-03-13 09:57:48

+0

@:JB謝謝..我知道它比較了JSP文件的最後修改日期和編譯後的類,以決定是否重新編譯。 – 2012-03-13 11:41:14

0

不只是JSP的一些容器也支持重新加載servlet類如果它被修改。

由容器決定何時加載servlet。 A servlet can be loaded at runtime on demand。並來到JSP,JSP translated to servlet can also be loaded at runtime

來到你的問題,

爲什麼Tomcat不要求重新啓動?

這是因爲Tomcat is capable of adding/modifying classpath to Web Application classloader at runtime。雄貓將擁有他們的custom Classloader implementation which allows them to add the classpaths at runtime

自定義類加載器如何工作?

一個方法得到這個工作是當Servlet/JSP被修改時,a new classloader is created for the Servlet/JSP with Application classloader as parent classloader . And the new classloader will load the modified class again

相關問題