Cơ bản về servlet, servlet container
Java
76
White

LinhPT viết ngày 01/07/2015

Sử dụng java một thời gian, mình vẫn không nắm rõ một vài khái niệm như là servlet, servlet container lắm, tranh thủ rỗi nên tìm hiểu rồi viết lại cho đỡ quên.

Servlet là gì?

Như chúng ta đã biết web server dựa trên giao thức http là một giao thức stateless. Tức là mỗi một lần có một user và trang web của chúng ta sẽ tương ứng với một cặp : request và response.

alt text

Để biết được nên response gì thì chúng ta cần biết thông tin của request.
Trong java để mô tả cặp thông tin này thì chúng ta được cung cấp một class gọi là Servlet.

Class này sẽ được implement các method tương ứng với http method như get hay post

public class HelloServlet extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response) { 
    //làm logic gì đó trong này
 }
}

Vậy tóm gọn lại thì servlet là

một class abstract lại quá trình tương tác http

Servlet Container là gì?

Đúng theo như tên, servlet container là một cái "thùng" để chứa rất nhiều servlet. Và như đã nói ở trên, servlet là một class tượng trưng cho một cặp http request và response.
alt text

Có thể hình dung là mỗi khi có request đến webserver sẽ phân tách url, http method, từ đó biết là nên giao request đó cho servlet nào. Sau đó request đó sẽ được giao cho servlet tương ứng để tiến hành logic.

Về cách mà servlet container tiến hành load các servlet nằm trong nó, cũng như trình tự load có thể tham khảo ở đây:
http://stackoverflow.com/questions/3106452/how-do-servlets-work-instantiation-session-variables-and-multithreading

Vòng đời của Servlet được mô tả như hình dưới đây:
alt text

Bước 1 và bước 2 trong 5 bước trên sẽ chỉ được execute một lần duy nhất khi container load nó lên.
Còn 3 bước 3,4,5 sẽ được gọi mỗi khi có request đến.

Có một điểm cần chú ý là servlet là không thread safe, tức là cùng một instance của servlet sẽ có thể được access bởi nhiều thread cùng một lúc. Do đó khi sử dụng biến static, hay các biến có thể thay đổi được chúng ta cần chú ý đến việc thread-safe.
Các bạn có thể tham khảo ở đây: http://tutorials.jenkov.com/java-servlets/servlet-concurrency.html

Sơ qua về tomcat

Tomcat gồm có 2 phần chính:

  • Catalina: Servlet container
  • Coyote: HTTP server

Thông thường thì người ta sẽ dùng apache http thay cho coyote. Tức là apache sẽ làm nhiệm vụ phân tách request và "chuyền" request cho catalina, sau đó nhận kết quả từ catalina trả về cho user, thay cho coyote.
Tuy nhiên có cách sử dụng khác là sử dụng nginx đứng trước, sau đó setup proxy_pass và pass request cho coyote thông qua port 8080 cũng hay được sử dụng

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

LinhPT

20 bài viết.
61 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
34 3
Mình thi thoảng phải quản lý linux server, mà trong đó có một số thao tác quản lý quan trong như quản lý đĩa cứng, quản lý mạng, quản lý đường truy...
LinhPT viết hơn 2 năm trước
34 3
White
25 2
(Ảnh) Tiêu đề chỉ là câu khách :v, thực ra là có một vài điểm về mysql explain mà chắc chưa nhiều bạn biết, tớ cũng hay quên nên note lại cho nhớ ...
LinhPT viết gần 3 năm trước
25 2
White
18 0
Bài viết được dịch từ http://qiita.com/sion_cojp/items/04a2aa76a1021fe77079 Điều cần nhớ trước khi đánh bất kì câu lệnh nào ①Để tránh làm nặng...
LinhPT viết 1 năm trước
18 0
Bài viết liên quan
White
0 0
Trong bài viết này, một số hình ảnh hoặc nọi dung có thể bị thiếu do quá trình chế bản. Vui lòng xem nội dung ở blog gốc sau: (Link) (Link), chúng...
programmerit viết gần 3 năm trước
0 0
Male avatar
9 5
Facade Design Patern Facade Patern thuộc vào họ mô hình cấu trúc (structural patern). Facade patern phát biểu rằng : "just provide a unified an...
DuongVanTien viết hơn 1 năm trước
9 5
White
0 2
(Link), mình đã nêu ra các phần mềm chính (portal, sdk và ide). Trong phần này, mình sẽ hướng dẫn cụ thể cài đặt môi trường máy chủ và môi trường l...
programmerit viết gần 3 năm trước
0 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
20 bài viết.
61 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!