<url-pattern>/*</url-pattern>
Trên /*
một servlet ghi đè tất cả các servlet khác, bao gồm tất cả các servlet được cung cấp bởi servletcontainer, chẳng hạn như servlet mặc định và servlet JSP. Bất cứ yêu cầu nào bạn bắn, nó sẽ kết thúc trong servlet đó. Do đó, đây là một mẫu URL xấu cho các servlet. Thông thường, bạn chỉ muốn sử dụng /*
trên một Filter
. Nó có thể cho phép yêu cầu tiếp tục với bất kỳ servlet nào nghe trên một mẫu URL cụ thể hơn bằng cách gọi FilterChain#doFilter()
.
<url-pattern>/</url-pattern>
Các /
không ghi đè lên bất kỳ servlet khác. Nó chỉ thay thế servlet mặc định của servletcontain cho tất cả các yêu cầu không khớp với bất kỳ servlet đã đăng ký nào khác. Điều này thường chỉ được gọi trên các tài nguyên tĩnh (CSS / JS / image / etc) và danh sách thư mục. Servlet mặc định của servletcontainer cũng có khả năng xử lý các yêu cầu bộ đệm HTTP, truyền phát phương tiện (âm thanh / video) và tiếp tục tải xuống tệp. Thông thường, bạn không muốn ghi đè servlet mặc định vì nếu không bạn sẽ phải lo tất cả các tác vụ của nó, điều này không chính xác (thư viện tiện ích JSF OmniFaces có một ví dụ nguồn mở ). Do đó, đây cũng là một mẫu URL xấu cho các servlet. Về lý do tại sao các trang JSP không đánh vào servlet này, đó là bởi vì servlet JSP dựng sẵn của servlet sẽ được gọi, mặc định đã được ánh xạ trên mẫu URL cụ thể hơn *.jsp
.
<url-pattern></url-pattern>
Sau đó, cũng có mẫu URL chuỗi trống
. Điều này sẽ được gọi khi root ngữ cảnh được yêu cầu. Điều này khác với <welcome-file>
cách tiếp cận mà nó không được gọi khi bất kỳ thư mục con nào được yêu cầu. Đây rất có thể là mẫu URL mà bạn thực sự đang tìm kiếm trong trường hợp bạn muốn có một "dịch vụ trang chủ ". Tôi chỉ phải thừa nhận rằng tôi trực giác mong đợi mẫu URL chuỗi rỗng
và mẫu URL gạch chéo /
được xác định chính xác theo cách khác, vì vậy tôi có thể hiểu rằng rất nhiều người mới bắt đầu đã nhầm lẫn về điều này. Nhưng đó là những gì nó được.
Bộ điều khiển phía trước
Trong trường hợp bạn thực sự có ý định để có một servlet front controller, sau đó bạn muốn bản đồ tốt nhất nó trên một mẫu URL cụ thể hơn như *.html
, *.do
, /pages/*
, /app/*
, vv Bạn có thể ẩn đi phía trước mẫu URL điều khiển và bìa các tài nguyên tĩnh trên một mẫu URL chung như /resources/*
, /static/*
v.v với sự trợ giúp của bộ lọc servlet. Xem thêm Cách ngăn chặn tài nguyên tĩnh được xử lý bởi servlet bộ điều khiển phía trước được ánh xạ trên / * . Đáng chú ý là Spring MVC có một servlet tài nguyên tĩnh tích hợp, vì vậy đó là lý do tại sao bạn có thể ánh xạ bộ điều khiển phía trước của nó /
nếu bạn định cấu hình một mẫu URL phổ biến cho tài nguyên tĩnh trong Spring. Xem thêm Cách xử lý nội dung tĩnh trong Spring MVC?