2011-09-26 38 views
14

Là một phần của việc khám phá/học Struts2, JSP và Servlets, tôi thấy từ herethere rằng servlet và servlet-mapping có thể được sử dụng trong web.xml. Tuy nhiên, Struts2 cũng đề cập đến bộ lọc và ánh xạ bộ lọc cho web.xml.Sự khác biệt giữa servlet/servlet-mapping và filter/filter-mapping?

Sự khác biệt giữa cả hai là gì? Các loại này có độc quyền lẫn nhau không? Khi nào tôi nên sử dụng cái nào và tại sao? Ai đó có thể làm rõ các khái niệm? Cảm ơn.

Làm rõ

Tôi chỉ có hiểu rằng tôi cần phải hiểu làm thế nào struts2 và Servlets có liên quan: http://www.coderanch.com/t/57899/Struts/Difference-between-servlet-struts

+0

bạn đã đọc về bộ lọc servlet và servlet chưa?Bất kỳ bộ lọc bao phủ tài nguyên nào cần xóa mọi thứ cho bạn – Bozho

+0

@Bozho Tôi đã làm, nhưng tôi đoán tôi cần http://www.coderanch.com/t/57899/Struts/Difference-between-servlet-struts để hiểu những gì tôi không biết Tôi không hiểu (...) – JVerstry

Trả lời

9

Bộ lọc Servlet triển khai intercepting filter mẫu. Trong khi servlet là mục tiêu cuối cùng của yêu cầu web, mỗi yêu cầu đi qua một loạt các bộ lọc. Mỗi bộ lọc có thể sửa đổi yêu cầu trước khi vượt qua nó hoặc phản hồi sau khi nhận lại nó từ servlet. Nó thậm chí có thể bỏ qua việc yêu cầu thêm và xử lý nó hoàn toàn giống như servlet (không phổ biến). Ví dụ bộ lọc đệm có thể trả về kết quả mà không cần gọi servlet thực.

6

Các bộ lọc được sử dụng như bộ lọc Servlet. Ví dụ: nếu bạn cần thực hiện kiểm tra bảo mật trên một số URL nhất định thì bạn có thể thêm bộ lọc cho các trang đó. Ví dụ: bạn có thể nói /secure/pages/*.do cần được chặn bởi securityFilter. Sau đó, phương thức doFilter() của lớp SecurityFilter (một lớp thực hiện giao diện Bộ lọc) sẽ xử lý kiểm tra bảo mật trước khi chuyển tiếp nó tới servlet yêu cầu thực tế.

Servlets là khá nhiều công cụ tiêu chuẩn. Bạn định nghĩa một servlet và sau đó để cho thùng chứa servlet biết loại yêu cầu nào cần được ánh xạ tới servlet đó.

Chúng không loại trừ lẫn nhau. Cả hai đều có thể được sử dụng cùng một lúc. Hãy suy nghĩ về bộ lọc như cách từ có nghĩa là - nó "lọc" mọi thứ (ghi nhật ký, bảo mật, vv) trước khi tiếp tục đến servlet/hành động tiếp theo.

3

Vòng đời yêu cầu theo đặc tả servlet đi qua một chuỗi các bộ lọc trước khi được thực thi bởi một servlet.

này là khá trực quan khi bạn nhìn vào chữ ký cho phương pháp doFilter trong giao diện Filter

doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 

Đó là, trong bộ lọc mà bạn có quyền truy cập vào các request và response và chuỗi. Hợp đồng là bạn, với tư cách là người triển khai, nên gọi số chain trước hoặc sau các thao tác bạn thực hiện trong bộ lọc hoặc hoàn toàn không muốn thực hiện. Gọi chain.doFilter(...) sẽ khiến bộ lọc tiếp theo trong chuỗi bộ lọc có ánh xạ khớp với URL được yêu cầu sẽ được thực thi. Thành viên cuối cùng của chuỗi là servlet có ánh xạ khớp với URL được yêu cầu.

Về mặt kỹ thuật, bạn có thể thực hiện mọi thứ trong bộ lọc mà bạn có thể thực hiện trong servlet. Bạn có thể xây dựng ứng dụng của mình để thực hiện tất cả việc xử lý và hiển thị trong một bộ lọc và có một servlet trống không làm gì cả. Điểm khác biệt chính là nếu không có servlet được ánh xạ đối với một URL đã cho, vùng chứa phải trả lời với lỗi 404 do đó luôn phải có một servlet được ánh xạ với bất kỳ URL nào bạn muốn phân phát. Bạn cũng có thể chỉ có một servlet được ánh xạ với một URL, nhưng bạn có thể có bất kỳ số lượng bộ lọc nào.

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