Java Servlet là gì?


276

Tôi đã đọc nhiều bài viết để hiểu java servlet nhưng tôi đã không thành công.

Bạn có thể vui lòng giới thiệu ngắn gọn về java servlets (bằng ngôn ngữ dễ dàng). Giống như thế nào là servlet? Các lợi thế là gì? Và tất cả những thứ đó.

Tôi không thể hiểu sự khác biệt giữa ngôn ngữ lập trình phía máy chủ (PHP, ASP) và các máy chủ.


38
Di chuột vào servletsthẻ bên dưới câu hỏi của bạn cho đến khi một hộp đen bật lên. Nhấp vào đó trong liên kết thông tin .
BalusC

1
Servlets Bạn có thể nhìn vào nó. Tôi nghĩ rằng đây là chi tiết và xác thực.
shohan

Câu trả lời:


335

Một servlet đơn giản là một lớp đáp ứng một loại yêu cầu mạng cụ thể - phổ biến nhất là một yêu cầu HTTP. Về cơ bản các servlet thường được sử dụng để triển khai các ứng dụng web - nhưng cũng có nhiều khung khác nhau hoạt động trên đầu các servlet (ví dụ Struts) để cung cấp một mức độ trừu tượng cao hơn mức "đây là một yêu cầu HTTP, ghi vào mức phản hồi HTTP" này. cung cấp.

Servlets chạy trong một thùng chứa servlet xử lý phía mạng (ví dụ: phân tích yêu cầu HTTP, xử lý kết nối, v.v.). Một trong những thùng chứa servlet mã nguồn mở nổi tiếng nhất là Tomcat .


16
Servlets là đoạn mã java được gọi bởi máy chủ web bên trong máy chủ web. Nếu bạn muốn một cái gì đó trông giống như PHP hoặc ASP, bạn cần có các tệp JSP (là một loại máy chủ đặc biệt)
Thorbjørn Ravn Andersen

3
Thanx cho câu trả lời nhưng tôi vẫn không thể sử dụng thực sự các servlet, sẽ tốt hơn nếu bạn có thể giải thích bằng ví dụ như bão hòa nơi chúng ta có thể sử dụng các servlet. tôi không hiểu việc sử dụng servlet như những gì mà servlet có thể làm mà các ngôn ngữ lập trình phía máy chủ khác không thể làm được.
hardik

4
@Hardik: không phải là họ có thể làm bất cứ điều gì không thể làm theo cách khác. Servlets chỉ là một công nghệ phổ biến cho công việc Java phía máy chủ. Servlets không phải là ngôn ngữ - và cũng không phải là ASPX. Cả hai đều là nền tảng bạn sử dụng kết hợp với ngôn ngữ khác - thường là Java trong trường hợp các máy chủ.
Jon Skeet

7
@Hardik: Như tôi đã viết trong bài viết của mình, các servlet là các lớp hoạt động bên trong một thùng chứa servlet. Container servlet có thể lưu trữ một số servlet cùng một lúc.
Jon Skeet

5
@Hardik: Vâng, chính xác. Servlet có thể cung cấp HTML để hiển thị biểu mẫu và cũng hành động khi gửi. Servlets cũng có thể được sử dụng để triển khai các dịch vụ web. Chúng có thể được sử dụng cho các giao thức khác ngoài HTTP, nhưng HTTP là phương tiện vận chuyển phổ biến nhất được xử lý bởi các servlet.
Jon Skeet

101

Một servlet ở chính cốt lõi của nó là một lớp java; có thể xử lý các yêu cầu HTTP. Thông thường, nitty-gritty nội bộ của việc đọc yêu cầu HTTP và phản hồi qua dây được chăm sóc bởi các container như Tomcat. Điều này được thực hiện để với tư cách là nhà phát triển phía máy chủ, bạn có thể tập trung vào những việc cần làm với yêu cầu và phản hồi HTTP và không bận tâm đến việc xử lý mã liên quan đến mạng, v.v. Container sẽ quan tâm đến mọi thứ như bọc toàn bộ trong một Đối tượng phản hồi HTTP và gửi nó đến máy khách (giả sử trình duyệt).

Bây giờ câu hỏi hợp lý tiếp theo cần đặt ra là ai quyết định container phải làm gì? Và câu trả lời là; Trong thế giới Java ít nhất Nó được hướng dẫn (lưu ý tôi không sử dụng từ được kiểm soát) theo thông số kỹ thuật. Ví dụ, thông số kỹ thuật của Servlet (Xem tài nguyên 2) chỉ ra những gì mà một servlet phải có thể làm. Vì vậy, nếu bạn có thể viết một triển khai cho đặc tả, xin chúc mừng bạn vừa tạo một thùng chứa (Về mặt kỹ thuật các thùng chứa như Tomcat cũng thực hiện các thông số kỹ thuật khác và thực hiện các công cụ khó khăn như trình tải lớp tùy chỉnh, v.v. nhưng bạn hiểu ý).

Giả sử bạn có một bộ chứa, các servlet của bạn bây giờ là các lớp java có vòng đời sẽ được duy trì bởi bộ chứa nhưng phản ứng của chúng đối với các yêu cầu HTTP đến sẽ do bạn quyết định. Bạn làm điều đó bằng cách viết những gì bạn muốn làm trong các phương thức được xác định trước như init (), doGet (), doPost (), v.v. Hãy nhìn vào Tài nguyên 3.

Đây là một bài tập thú vị cho bạn. Tạo một servlet đơn giản như trong Resource 3 và viết một vài câu lệnh System.out.println () trong phương thức constructor của nó (Có, bạn có thể có một hàm tạo của một servlet), init (), doGet (), doPost () và chạy các servlet trong tomcat. Xem nhật ký giao diện điều khiển và nhật ký tomcat.

Hy vọng điều này sẽ giúp, học tập hạnh phúc.

Tài nguyên

  1. Hãy xem giao diện HTTP trông như thế nào ở đây (ví dụ Tomcat).

  2. Đặc điểm kỹ thuật của Servlet .

  3. Ví dụ Servlet đơn giản .

  4. Bắt đầu đọc sách trực tuyến / PDF Nó cũng cung cấp cho bạn tải xuống toàn bộ cuốn sách. Có thể điều này sẽ giúp. nếu bạn chỉ mới bắt đầu các servlet thì có thể nên đọc tài liệu cùng với API của servlet. đó là một quá trình học tập chậm hơn, nhưng hữu ích hơn trong việc làm cho những điều cơ bản rõ ràng.


12
Các câu trả lời chỉ liên kết không được khuyến khích trên Stack Overflow, bởi vì các tài nguyên mà chúng liên kết đến có thể không khả dụng trong tương lai hoặc có thể thay đổi. Xem xét tóm tắt nội dung có liên quan của liên kết trong câu trả lời của bạn để cải thiện nó.

6
@Cupdding đánh giá cao phản hồi mang tính xây dựng của bạn. Tôi đã cố gắng để thêm một số thịt để trả lời. Cảm ơn đã làm cho cộng đồng tốt hơn.
Ayusman

34

Ngoài những điều trên, và chỉ để chỉ ra ...

Đối với nhiều người điều này là quá rõ ràng, nhưng với ai đó đã từng viết các ứng dụng chỉ chạy và sau đó kết thúc: một servlet dành phần lớn thời gian của mình để không làm gì cả ... chờ đợi để gửi một cái gì đó, một yêu cầu, và sau đó trả lời nó . Vì lý do này, một servlet có cả cuộc đời: nó bị vô hiệu hóa và sau đó chờ đợi, phản ứng với bất cứ thứ gì ném vào nó, và sau đó bị phá hủy. Điều này ngụ ý rằng nó phải được tạo ra (và sau đó bị phá hủy) bởi một thứ khác (một khung công tác), rằng nó chạy trong luồng hoặc tiến trình riêng của nó, và nó không làm gì trừ khi được yêu cầu. Và cũng bằng cách này hay cách khác, một cơ chế phải được thực hiện theo đó "thực thể" này có thể "lắng nghe" các yêu cầu.

Tôi đề nghị rằng việc đọc về các chủ đề, quy trình và ổ cắm sẽ làm sáng tỏ điều này: nó hoàn toàn khác với cách thức hoạt động của một ứng dụng "hello world" cơ bản.

Có thể lập luận rằng thuật ngữ "máy chủ" hoặc "servlet" là một chút quá mức cần thiết. Một cái tên hợp lý và đơn giản hơn có thể là "phản hồi". Lý do cho việc lựa chọn thuật ngữ "máy chủ" là lịch sử: sự sắp xếp đầu tiên như vậy là "máy chủ tệp", trong đó nhiều thiết bị đầu cuối người dùng / máy khách sẽ yêu cầu một tệp cụ thể từ một máy trung tâm và sau đó tệp này sẽ được "phục vụ "Giống như một cuốn sách hoặc một đĩa cá và khoai tây chiên.


1
Có phải là không chính xác khi xem servlet tương tự như "bộ điều khiển" trong khung MVC tiêu chuẩn không?
dùng2490003

Cá nhân tôi không thể thấy sự tương tự đó như thế nào. Tôi cũng có xu hướng nghĩ rằng những người nghĩ rằng câu trả lời của tôi là một câu hỏi hữu ích (giúp làm rõ mọi thứ cho họ) có thể bị nhầm lẫn bởi đề xuất của bạn.
mike gặm nhấm

Tôi nghĩ rằng câu trả lời này là hữu ích. Nhưng tôi cũng tự hỏi (độc lập với Câu trả lời này và trước khi đọc nó) cùng một câu hỏi mà @ user2490003 đặt ra ở trên. Sự khác biệt giữa Servlet và Bộ điều khiển khung MVC là gì? Tại sao tương tự bởi user2490003 không giữ?
cellepo

Một sự sắp xếp MVC phức tạp hơn và ít phức tạp hơn. Nó không nhất thiết liên quan đến việc chờ đợi đầu vào. Khi xác định ý tưởng cơ bản của thiết lập máy chủ-máy khách, đó là sự đơn giản mà tôi tìm cách nhấn mạnh. Nhìn vào sơ đồ MVC cơ bản ở đây: en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controll . Trong một thiết lập máy khách-máy chủ đơn giản, người dùng chỉ tương tác với máy khách, không phải với hai đối tượng, đó là chế độ xem và bộ điều khiển. Với MVC cũng có thể có nhiều khung nhìn, nhiều bộ điều khiển và nhiều mô hình. Và chờ đợi đầu vào không (nhất thiết) liên quan.
mike gặm nhấm

Ngoài những điều trên, một máy chủ có thể phục vụ nhiều người dùng, trong khi không có yêu cầu như vậy với thiết lập MVC. Một thiết lập MVC thuộc về thế giới điện toán cổ điển, tức là các ứng dụng độc lập. Với các máy chủ, chúng tôi thực hiện bước đầu tiên vào vũ trụ của điện toán tương tác. Không phải là sự tương tự là sai 100%, sai hơn 90% và trên hết là bất kỳ sự tương tự nào chỉ đơn giản là không có ích gì nếu nó không thực sự giúp được ai hay bất cứ điều gì theo bất kỳ cách nào. Một sự sắp xếp máy chủ-máy khách hoàn toàn đơn giản đến mức một ý tưởng không ai cần sự tương tự, dưới bất kỳ hình thức nào , để hiểu.
loài gặm nhấm mike

10

Một Servlet là gì?

  • Một servlet đơn giản là một lớp đáp ứng một loại yêu cầu mạng cụ thể - phổ biến nhất là một yêu cầu HTTP.
  • Về cơ bản các servlet thường được sử dụng để triển khai các ứng dụng web - nhưng cũng có nhiều khung khác nhau hoạt động trên đầu các servlet (ví dụ Struts) để cung cấp một mức độ trừu tượng cao hơn mức "đây là một yêu cầu HTTP, ghi vào mức phản hồi HTTP" này. cung cấp.
  • Servlets chạy trong một thùng chứa servlet xử lý phía mạng (ví dụ: phân tích yêu cầu HTTP, xử lý kết nối, v.v.). Một trong những thùng chứa servlet mã nguồn mở nổi tiếng nhất là Tomcat.

  • Trong mô hình yêu cầu / phản hồi, máy chủ web chỉ có thể phục vụ các trang tĩnh cho máy khách

  • Để phục vụ các trang động, chúng tôi yêu cầu Servlets.
  • Servlet không là gì ngoài chương trình Java
  • Chương trình Java này không có phương thức chính. Nó chỉ có một số phương thức gọi lại.
  • Làm thế nào để máy chủ web giao tiếp với servlet? Thông qua động cơ container hoặc Servlet.
  • Servlet sống và chết trong một thùng chứa web.
  • Web container chịu trách nhiệm gọi các phương thức trong một servlets. Nó biết phương thức gọi lại mà Servlet có.

Luồng yêu cầu

  • Máy khách gửi yêu cầu HTTP đến máy chủ Web
  • Máy chủ web chuyển tiếp yêu cầu HTTP đến vùng chứa web.
  • Vì Servlet không thể hiểu HTTP, nó là một chương trình Java, nên nó chỉ hiểu các đối tượng, do đó, bộ chứa web chuyển đổi yêu cầu đó thành đối tượng yêu cầu hợp lệ
  • Web container quay một chuỗi cho mỗi yêu cầu
  • Tất cả logic nghiệp vụ nằm trong các phương thức gọi lại doGet () hoặc doPost () bên trong các servlet
  • Servlet xây dựng một đối tượng phản hồi Java và gửi nó đến vùng chứa. Nó chuyển đổi nó thành phản hồi HTTP một lần nữa để gửi nó đến máy khách

Làm thế nào để Container biết ứng dụng khách Servlet nào đã yêu cầu?

  • Có một tệp gọi là web.xml
  • Đây là tệp chủ cho bộ chứa web
  • Bạn có thông tin về servlet trong tệp này-

    • người phục vụ
      • Tên dịch vụ
      • Lớp nhân viên
    • ánh xạ dịch vụ - đường dẫn như / Đăng nhập hoặc / Thông báo được ánh xạ ở đây trong
      • Tên dịch vụ
      • mô hình url
    • và như thế
  • Mỗi servlet trong ứng dụng web nên có một mục vào tệp này

  • Vì vậy, việc tra cứu này xảy ra như- url-mẫu -> tên servlet -> lớp servlet

Làm cách nào để "cài đặt" Servlets? * Chà, các đối tượng servlet được kế thừa từ thư viện- javax.servlet. *. Tomcat và Spring có thể được sử dụng để sử dụng các đối tượng này để phù hợp với trường hợp sử dụng.

Tham khảo- Xem này trên 1,5 lần- https://www.youtube.com/watch?v=tkFRGdUgCsE . Điều này có một lời giải thích tuyệt vời.


1
Liên kết đến một giải pháp được hoan nghênh, nhưng vui lòng đảm bảo câu trả lời của bạn hữu ích mà không cần đến nó: thêm ngữ cảnh xung quanh liên kết để người dùng của bạn sẽ có ý tưởng về nó là gì và tại sao lại có, sau đó trích dẫn phần có liên quan nhất của trang bạn ' liên kết lại trong trường hợp trang đích không có sẵn. Câu trả lời ít hơn một liên kết có thể bị xóa.
Mogsdad

1
Lưu ý rằng thế giới đã chuyển sang. Năm 2020, chúng tôi sử dụng các chú thích trên mã thay vì tệp cấu hình dựa trên chuỗi trung tâm trong XML.
Thorbjørn Ravn Andersen

5

Servlet là công nghệ phía máy chủ được sử dụng để tạo trang web động trong ứng dụng web. Trên thực tế, servlet là một api bao gồm nhóm các lớp và giao diện, có một số chức năng. Khi chúng tôi sử dụng API của Servlet, chúng tôi có thể sử dụng chức năng được xác định trước của các lớp và giao diện của servlet.

Vòng đời của Servlet:

Web container duy trì vòng đời của cá thể servlet.

1. Đã tải lớp Servlet

2. Đã tạo phiên bản Servlet

3. phương thức init () được gọi

4 . phương thức service () được gọi

5. phương thức hủy () được gọi

Khi yêu cầu tăng bởi máy khách (trình duyệt) thì web-container sẽ kiểm tra xem servlet có chạy hay không nếu có thì nó gọi phương thức service () và đưa ra phản hồi cho trình duyệt ..

Khi servlet không chạy thì web-container thực hiện theo các bước sau ..

1. trình nạp lớp tải lớp servlet

2. Khởi tạo servlet

3. Khởi tạo servlet

4. đưa ra phương thức service ()

Sau khi phục vụ yêu cầu bộ chứa web chờ thời gian cụ thể, trong thời gian này nếu yêu cầu đến thì nó chỉ gọi phương thức service () nếu không nó gọi phương thức kill () ..


5

Nếu bạn là người mới bắt đầu, tôi nghĩ hướng dẫn này có thể đưa ra ý tưởng cơ bản về Servlet là gì ...

Một số điểm có giá trị dưới đây từ liên kết đã cho.

Công nghệ Servlet được sử dụng để tạo ứng dụng web nằm ở phía máy chủ và tạo trang web động.

Servlet có thể được mô tả theo nhiều cách, tùy thuộc vào ngữ cảnh.

  • Servlet là một công nghệ tức là được sử dụng để tạo ứng dụng web.
  • Servlet là một API cung cấp nhiều giao diện và các lớp bao gồm các tài liệu.
  • Servlet là một giao diện phải được triển khai để tạo bất kỳ servlet nào.
  • Servlet là một lớp mở rộng khả năng của các máy chủ và đáp ứng yêu cầu đến. Nó có thể đáp ứng với bất kỳ loại yêu cầu.
  • Servlet là một thành phần web được triển khai trên máy chủ để tạo trang web động. Tham khảo: Tại đây .

1
Đó là một hướng dẫn thực sự tốt giải thích các khái niệm từ cơ bản
Nikhil Sahu

3

Java Servlets là các mô-đun chương trình Java phía máy chủ xử lý và trả lời các nhu cầu của khách hàng và hiện thực hóa giao diện servlet. Nó giúp cải thiện tính hữu dụng của máy chủ Web với chi phí không đáng kể, bảo trì và hỗ trợ.

Một servlet đi như một trung gian hòa giải giữa khách hàng và máy chủ. Khi các mô-đun servlet tiếp tục chạy trên máy chủ, chúng có thể nhận và phản ứng với các yêu cầu của khách hàng. Các đối tượng nhu cầu và phản ứng của servlet cung cấp một phương thức hữu ích để đối phó với các yêu cầu HTTP và gửi thông tin nội dung lại cho khách hàng.

Do một servlet được phối hợp với phương ngữ Java, nên nó cũng có tất cả các điểm nổi bật của Java, ví dụ, tính di động cao, tự chủ giai đoạn, bảo mật và tính sẵn sàng của cơ sở dữ liệu Java.


2

Servlet là một lớp java để đáp ứng yêu cầu HTTP và tạo ra phản hồi HTTP ...... khi chúng ta tạo một trang có sử dụng HTML thì đó sẽ là một trang tĩnh để làm cho nó động, chúng ta sử dụng SERVLET {bằng những từ đơn giản mọi người có thể hiểu} Để sử dụng servlet bị quá tải bởi JSP, nó sử dụng cả mã và thẻ HTML cả ..


2

Servlets là các lớp Java chạy các chức năng nhất định khi người dùng trang web yêu cầu URL từ máy chủ. Các hàm này có thể hoàn thành các tác vụ như lưu dữ liệu vào cơ sở dữ liệu, thực thi logic và trả về thông tin (như dữ liệu JSON) cần thiết để tải trang.

Hầu hết các chương trình Java sử dụng một main()phương thức thực thi mã khi chương trình đang chạy. Các máy chủ Java chứa doGet()doPost()các phương thức hoạt động giống như main()phương thức. Các hàm này được thực thi khi người dùng thực hiện GEThoặc POSTyêu cầu URL được ánh xạ tới servlet đó. Vì vậy, người dùng có thể tải một trang cho một GETyêu cầu hoặc lưu trữ dữ liệu từ mộtPOST yêu cầu.

Khi người dùng gửi một GEThoặc POSTyêu cầu, máy chủ sẽ đọc @WebServletở đầu mỗi lớp servlet trong thư mục của bạn để quyết định lớp servlet nào sẽ gọi. Ví dụ: giả sử bạn có một lớp ChatBox và có thứ này ở trên cùng:

@WebServlet("/chat")
public class ChatBox extends HttpServlet {

Khi người dùng yêu cầu /chatURL, ChatBoxlớp của bạn sẽ được thực thi.


0

Như bài viết này mô tả, Servlet là một cách tiêu chuẩn hóa để mở rộng máy chủ Java và truy cập các khả năng của nó.

Mỗi Servlet có thể được xem như một máy chủ nhỏ (do đó là tên), có quyền truy cập vào yêu cầu và phản hồi được mô hình hóa trong mã Java, cùng với dữ liệu ngữ cảnh khác, như Phiên.

Với những thứ này, mã Java của servlet có thể giao tiếp với bất cứ thứ gì nó cần để hiển thị một phản hồi, bao gồm cả việc chuyển sang một trang JSP để tạo ra một khung nhìn HTML.


-1

Tôi nghĩ rằng về cơ bản, servlet là một lớp java hoạt động như một cách trung gian giữa yêu cầu HTTP và phản hồi HTTP.Servlet cũng được sử dụng để làm cho trang web của bạn động. Ví dụ, nếu bạn muốn chuyển hướng đến một trang web khác trên máy chủ thì bạn phải sử dụng các máy chủ. Một điều quan trọng khác là servlet có thể chạy trên localhost cũng như trình duyệt web.


-2

Bạn vừa nhận được câu trả lời cho một servlet bình thường. Tuy nhiên, tôi muốn chia sẻ với bạn về vài điều về Servlet 3.0

Đầu tiên là một Servlet là gì?

Một servlet là một thành phần Web được quản lý bởi một thùng chứa và tạo ra nội dung động. Các máy chủ là các lớp Java được biên dịch thành mã byte có thể được tải động và chạy bởi máy chủ Web hỗ trợ công nghệ Java hoặc thùng chứa Servlet.

Servlet 3.0 là bản cập nhật cho đặc tả Servlet 2.5 hiện có. API yêu cầu của Servlet 3.0 của Nền tảng Java, Phiên bản doanh nghiệp 6. Servlet 3.0 tập trung vào khả năng mở rộng và khả năng mở rộng khung web. Servlet 3.0 mang đến cho bạn một số tiện ích mở rộng như Dễ phát triển (EoD), Khả năng cắm, Hỗ trợ Async và Cải tiến bảo mật

Dễ phát triển

Bạn có thể khai báo Servlets, Filter, Listener, init Params và hầu hết mọi thứ đều có thể được cấu hình bằng cách sử dụng các chú thích

Khả năng cắm

Bạn có thể tạo một dự án con hoặc một mô-đun với một tệp web-Fragment.xml. Nó có nghĩa là nó cho phép thực hiện các yêu cầu chức năng có thể cắm một cách độc lập.

Hỗ trợ Async

Servlet 3.0 cung cấp khả năng xử lý không đồng bộ, ví dụ: Chờ tài nguyên sẵn sàng, Tạo phản hồi không đồng bộ.

Cải tiến bảo mật

Hỗ trợ các phương thức bảo mật xác thực, đăng nhập và đăng xuất

Tôi đã tìm thấy nó từ Hướng dẫn Java Servlet

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.