Hãy phá vỡ toàn bộ URL mà một khách hàng sẽ gõ vào thanh địa chỉ của họ để đạt được servlet của bạn:
http://www.example.com:80/awesome-application/path/to/servlet/path/info?a=1&b=2#boo
Các bộ phận là:
- Đề án:
http
- tên máy chủ:
www.example.com
- cổng:
80
- đường dẫn ngữ cảnh:
awesome-application
- đường servlet:
path/to/servlet
- thông tin đường dẫn:
path/info
- truy vấn:
a=1&b=2
- đoạn:
boo
Yêu cầu URI (được trả về bởi getRequestURI) tương ứng với các phần 4, 5 và 6.
(bất ngờ, mặc dù bạn không yêu cầu điều này, phương pháp getRequestURL sẽ cung cấp cho bạn các phần 1, 2, 3, 4, 5 và 6).
Bây giờ là:
- từng phần 4 (con đường ngữ cảnh) được sử dụng để chọn ứng dụng cụ thể của bạn từ nhiều ứng dụng khác có thể được chạy trong máy chủ
- phần 5 (con đường servlet) được sử dụng để chọn một servlet cụ thể từ nhiều servlet khác có thể được đóng gói trong phần WAR
- phần 6 (thông tin đường dẫn) được giải thích bởi logic của servlet (ví dụ: nó có thể trỏ đến một số tài nguyên do servlet của bạn điều khiển).
- phần 7 (truy vấn) cũng được tạo sẵn cho servlet của bạn sử dụng getQueryString
- phần 8 (đoạn) thậm chí không được gửi đến máy chủ và có liên quan và chỉ được biết đến cho khách hàng
Các sau luôn giữ (trừ chênh lệch mã hóa URL):
requestURI = contextPath + servletPath + pathInfo
Ví dụ sau từ Servlet 3.0 specification là rất hữu ích:
Lưu ý: hình ảnh sau, tôi không có thời gian để tái tạo trong HTML:
Nguồn
2017-03-09 22:08:46
Bạn có thể tìm thấy [câu trả lời này] (http://stackoverflow.com/questions/3541077/design-patterns-web-based-applications/3542297 # 3542297) cũng hữu ích. – BalusC
@BalusC: cảm ơn, tôi đã sử dụng một số mẹo từ câu trả lời đó. – Roman