2012-03-13 15 views
11

Tôi đã sử dụng JSP,Servlet cho đôi khi. Tôi biết rằng bất cứ khi nào chúng tôi thay đổi bất cứ điều gì trong Servlet chúng tôi cần phải khởi động lại Tomcat Server để có được những thay đổi. Trường hợp như trong trường hợp thay đổi JSP, tomcat không yêu cầu khởi động lại.lý do tại sao tomcat không yêu cầu khởi động lại khi jsp được thay đổi

Theo kiến ​​thức của tôi JSP trang được chuyển đổi thành Servlet chỉ khi được biên dịch. Vì vậy, sau khi tất cả của nó một Servlet. Làm thế nào để nó hoạt động mà không cần Tomcat khởi động lại.

tôi có kiến ​​thức về trường hợp khi một trang JSP được biên dịch như về tiếp cận lần đầu tiên sau khi khởi động lại máy chủ, vv

Trả lời

8

Bởi vì theo mặc định, tomcat được khởi động trong chế độ phát triển, có nghĩa là các servlet có nguồn gốc JSP được biên dịch lại khi phát hiện thay đổi. Đó là một câu hỏi hay về cách JVM tải lớp mới - có lẽ trình nạp lớp tomcat được cấu hình để làm như vậy.

Một vài lưu ý liên quan:

  • bạn có thể tắt tùy chọn phát triển cho sản xuất
  • bạn có thể đã servlets được nạp lại cũng - bạn phải bắt đầu tomcat với một JVM trong debug mode.
+0

'khi thay đổi được phát hiện' - làm thế nào để' tomcat' quyết định có thay đổi? –

11

Bởi vì khi Tomcat được yêu cầu thực hiện một JSP, là so sánh ngày sửa đổi của tập tin với JSP sửa đổi thời gian của lớp được biên dịch tương ứng với JSP này, và nếu gần đây hơn, nó biên dịch lại trước khi thực hiện nó.

Đây là tùy chọn BTW cần được tắt trong quá trình sản xuất, vì cần có thời gian để thực hiện kiểm tra này.

Xem http://tomcat.apache.org/tomcat-7.0-doc/jasper-howto.html để biết chi tiết.

+0

có, nhưng phải có cách nào đó mà JVM tải lớp mới. Theo mặc định nó không. Tôi nghĩ rằng đó là bộ nạp lớp tùy chỉnh của tomcat cho phép nó. – Bozho

+0

@: JB Cảm ơn .. Tôi biết rằng nó so sánh ngày sửa đổi cuối cùng của tệp JSP với lớp được biên dịch để quyết định có nên biên dịch lại hay không. –

0

Không chỉ JSP's some containers cũng hỗ trợ tải lại lớp servlet nếu nó được sửa đổi.

Đó là tối đa vùng chứa để quyết định thời điểm tải servlet. A servlet can be loaded at runtime on demand. Và đến với JSP, JSP translated to servlet can also be loaded at runtime.

Đến với câu hỏi của bạn,

Tại sao Tomcat không yêu cầu khởi động lại?

Đó là vì Tomcat is capable of adding/modifying classpath to Web Application classloader at runtime. Tomcat sẽ có custom Classloader implementation which allows them to add the classpaths at runtime của họ.

Trình tải lớp tùy chỉnh có thể hoạt động như thế nào?

Một cách để làm việc này là khi Servlet/JSP được sửa đổi, 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.

Các vấn đề liên quan