Tôi có một trường hợp mà tôi cần phải chuyển hướng đối tượng yêu cầu HTTP của tôi đến các bộ điều khiển/lớp khác để xử lý tiếp. Vấn đề là trong một số bộ điều khiển, tôi muốn kiểm soát tốt hơn các tham số mà tôi đang chuyển tiếp sang lớp tiếp theo: sửa đổi, chỉnh sửa, loại bỏ chúng. Vì vậy, tôi muốn biết nếu có một thực hành tốt/mô hình để đạt được điều khiển cơ bản này trên các tham số yêu cầu HTTP.cách tốt nhất để loại bỏ một tham số HttpServletRequest trong một bộ điều khiển/lớp học là gì?
Trả lời
Thực hành tốt là bọc đối tượng yêu cầu vào đối tượng khác bằng bộ lọc servlet. Kể từ HttpServletRequest là một giao diện, bạn có thể viết thực hiện của riêng bạn của nó. Việc triển khai của bạn có thể giữ yêu cầu bạn nhận được và ủy quyền bất kỳ và tất cả các phương thức riêng của nó cho đối tượng yêu cầu ban đầu, nhưng cũng sửa đổi các giá trị trả về khi bạn thấy phù hợp. Vì vậy, các phương thức getParameter() của bạn có thể gọi cùng một phương thức trên đối tượng yêu cầu ban đầu và sửa đổi kết quả khi bạn thấy phù hợp trước khi trả về nó.
class MyHttpServletRequestWrapper implements HttpServletRequest {
private HttpServletRequest originalRequest;
public MyHttpServletRequestWrapper(HttpServletRequest originalRequest) {
this.originalRequest = originalRequest;
public String getAuthType() {return originalRequest.getAuthType();}
public String getQueryString() {return originalRequest.getQueryString();}
// etc.
public Map getParameterMap() {
Map params = originalRequest.getParameterMap();
params.remove("parameter-to-remove");
params.put("parameter-to-add", "<a value>");
//etc.
}
}
lọc servlet của bạn:
class MyFilter implements Filter {
public void init(FilterConfig config) {
// perhaps you might want to initialize something here
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest originalRequest = (HttpServletRequest) request;
HttpServletRequest newRequest = new MyHttpServletRequest(originalRequest);
chain.doFilter(newRequest, response);
}
}
Bạn cũng có thể phân lớp javax.servlet.request.HttpServletRequestWrapper, mà bạn sẽ tiết kiệm được một loạt các công việc.
Xem điều này post để biết thêm.
Nếu bạn đang sau một đơn giản một-liner, regex kỹ thuật này làm việc cho tôi:
myURL = myURL.replaceAll("[&?]clear=([^&]$|[^&]*)", "");
Nếu bạn cần nó trong Javascript, nó rất giống thực sự - đó là tốt đẹp!
var myUrl = (""+window.location).replace(/&?clear=([^&]$|[^&]*)/i, "");
rõ ràng là tên của tham số phải được loại bỏ.
- 1. Cách tốt nhất để loại bỏ các bản sao trong một mảng trong Java là gì?
- 2. Một số tài nguyên tốt để học Grails là gì?
- 3. Cách tốt nhất để tăng một điều tra là gì?
- 4. Điều gì là tốt nhất cho một hồ sơ, một số hoặc một tên?
- 5. Cách tốt nhất để học CUDA là gì?
- 6. Cách tốt nhất để học Erlang là gì?
- 7. Cách tốt nhất để học Django 1.5 là gì?
- 8. Cách tốt nhất để học WCF là gì?
- 9. Một số tài nguyên tốt cho việc học tập nội bộ codebase của Rails là gì?
- 10. Cách tốt nhất để loại bỏ hàng trong bảng bằng jQuery là gì?
- 11. Cách tốt nhất để viết về cách viết một bộ x86 đơn giản là gì?
- 12. Cách tốt nhất để kiểm tra xem một Type là một bộ sưu tập
- 13. cách tốt nhất để học C++ và Qt cùng một lúc là gì?
- 14. Cách tốt nhất để trượt một bảng điều khiển trong WPF là gì?
- 15. Nơi tốt nhất để bắt đầu học Qt là gì?
- 16. Cách tốt nhất để lưu dữ liệu cục bộ trong một ứng dụng WPF là gì?
- 17. Cách tốt nhất để so sánh một số thuộc tính javabean là gì?
- 18. Các nguồn lực tốt nhất để học Ant là gì?
- 19. Cách tốt nhất để thực hiện tìm/thay thế trong một số tệp là gì?
- 20. Nguồn trực tuyến tốt nhất để học Perl là gì?
- 21. Một số tài nguyên để học Lambda Calculus là gì?
- 22. Cách tốt nhất để chuyển nhiều tham số đến phương thức gọi lại Threading.Timer là gì?
- 23. Cuốn sách tin sinh học tốt nhất cho một nhà khoa học máy tính là gì?
- 24. Bộ điều khiển Ribbon WPF tốt nhất là gì?
- 25. là phát hiện loại mime là cách tốt nhất để phát hiện một loại tệp?
- 26. Một số công cụ phát hiện bộ nhớ Javascript tốt nhất là gì?
- 27. Cách tốt nhất để kiểm tra RJS trong thông số kỹ thuật của Bộ điều khiển RSpec là gì?
- 28. Trong JavaScript/jQuery cách tốt nhất để chuyển đổi một số bằng dấu phẩy thành một số nguyên là gì?
- 29. Một số tài nguyên tốt để học lập trình mạng là gì?
- 30. Cách tốt nhất/nhanh nhất để học GLADE với C là gì?
Mặc dù bài đăng bạn liên kết chứa nhiều thông tin hơn, bạn nên xác định rằng điều này nên được thực hiện bằng bộ lọc (nếu đó là ý của bạn). – Vetle
cảm ơn rất nhiều. tôi sẽ sử dụng các bộ lọc và lớp trình bao bọc cho đối tượng HttpRequest. –