2010-01-07 22 views

Trả lời

13

Servlets được thiết kế để chạy bên trong một thùng chứa servlet (ví dụ: Apache Tomcat). Thực hiện một servlet xảy ra theo cách sau: Container servlet gọi phương thức GenericServlet.service() trên một servlet thường gọi phương thức doXxx() thích hợp, ví dụ: doGet(), doPost(), v.v. Phương pháp doXxx() chịu trách nhiệm giải thích yêu cầu HTTP và cung cấp phản hồi thích hợp. GenericServlet.service() là khoảng analagous để main() trong một lớp học java cũ đồng bằng.

+3

.. và khi khởi động thùng chứa servlet thì 'HttpServlet servletName = new ServletClass();' dựa trên 'web.xml' hoặc' @ WebServlet' và lưu trữ nó trong bộ nhớ. Bất cứ khi nào cấu hình 'url-pattern' khớp với servlet của servlet, thì phương thức' service() 'sẽ được gọi trên cá thể cụ thể. – BalusC

1

Servlet được triển khai trên máy chủ ứng dụng Java (thùng chứa servlet). Họ là loại 'thụ động'. Khi bạn viết servlet, mã servlet của bạn được gọi bởi vùng chứa bất cứ khi nào có yêu cầu hoặc cần. Vì vậy, bạn không thấy 'main' trong servlet của bạn (toàn bộ thứ không được bắt đầu từ servlet), bên trong máy chủ ứng dụng (bạn có thể tưởng tượng khởi động của máy chủ ứng dụng bắt đầu từ một số loại chính).

1

Nếu bạn đang tìm kiếm một khu vực trong một servlet để đặt mã chạy khi khởi động (tương tự như main()), hãy xem triển khai giao diện ServletContextListener.

Hai phương pháp của nó được gọi là khởi động và tắt ứng dụng.

+0

@jbruce - hầu như không tương đương với IMO chính. –

+0

@Stephen - Tôi cho rằng câu hỏi được yêu cầu với một số mã như bạn làm trong phương thức main() (như khởi tạo, kết nối, v.v.), tôi nhận ra câu trả lời của tôi không thực sự phản ánh điều này . – jbruce2112

0

Không có phương pháp chính trong một servlet Java nào hơn là một ActionListener trên Swing JButton có một phương thức chính. Những gì họ làm đều có là các phương thức mà bạn có thể móc vào khi một sự kiện nào đó xảy ra (một cú nhấp chuột vào JButton chẳng hạn, hoặc một yêu cầu HTTP PUT trên một HttpServlet). Và trong cả hai trường hợp, bạn được cung cấp thông tin về sự kiện đã kích hoạt cuộc gọi - ActionEvent cho JButton và ServletRequest cho một servlet.

Việc suy nghĩ về các servlet về xử lý sự kiện có thể hữu ích hơn là cố gắng nghĩ về chúng như một ứng dụng Java độc lập, nơi bạn chịu trách nhiệm cho toàn bộ luồng điều khiển.

2

Servlet chạy bên trong thùng chứa (ví dụ: tomcat). Thùng chứa này thực hiện công việc của mình theo jvm. Ở đây vùng chứa mất "sự vắng mặt của phương pháp chính". Trong phương thức chính của chương trình java simlple, hãy thông báo luồng điều khiển bắt đầu của việc thực hiện. Nhưng trong trường hợp của servlet cơ sở ứng dụng web jvm liều không cần phải tìm kiếm các phương pháp chính. Vùng chứa Servlet cho jvm biết về luồng kiểm soát bắt đầu .

+0

Servlet container tạo đối tượng của servlet cụ thể tùy thuộc vào url yêu cầu và khởi tạo nó bằng cách cung cấp các đối tượng config/context và sau đó thực thi phương thức dịch vụ (hoặc doXXX phụ thuộc vào phương thức HTTP) – Patriks

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