Tôi cần gọi một phương thức servlet POST từ một servlet khác và chuyển một blob trong các tham số servlet. Đây có phải là posible, nếu như vậy làm thế nào nó có thể được thực hiện. PS: Tôi không thể sử dụng Apache HttpClientGọi Servlet Post từ một Servlet khác
Trả lời
Bạn cần tự tạo và gửi yêu cầu HTTP. Bạn không thể sử dụng chuyển tiếp/chuyển hướng/bao gồm vì bạn muốn thay đổi phương thức từ GET thành POST và bạn muốn gửi yêu cầu multipart/form-data
.
Vì HttpClient (và thư viện bên thứ 3 khác) dường như không phải là một lựa chọn, tốt nhất bạn nên sử dụng API chuẩn Java SE được cung cấp java.net.URLConnection
. Dài câu chuyện ngắn: Using java.net.URLConnection to fire and handle HTTP requests Ở dưới cùng, bạn có thể tìm thấy ví dụ multipart/form-data
.
Xin lưu ý rằng sự cố này không dành riêng cho servlet. Nói cách khác, bạn phải có khả năng thực thi mã này trong một ứng dụng Java vani thuần túy với phương thức main()
. Điều này cho phép kiểm tra và finetuning dễ dàng hơn. Một khi bạn làm cho nó hoạt động, chỉ cần để servlet thực hiện cùng một đoạn mã.
Không liên quan cho vấn đề, tôi có ấn tượng rằng có một thất bại lớn thiết kế ở đâu đó, chắc chắn nếu servlets cả chạy trong bối cảnh webapplication cùng. Servlet khác mà bạn muốn gửi yêu cầu POST đến dường như quá chặt chẽ và phải được tái cấu trúc.
Bạn có nghĩa là cuộc gọi từ ứng dụng của bạn đến một dịch vụ web khác không? Nếu vậy, sau đó một cái gì đó như HttpClient là những gì bạn muốn. Nếu bạn có nghĩa là bạn muốn lập trình gọi một servlet khác trong ứng dụng của bạn, thì bạn đang tìm kiếm hoặc là forward to it hoặc include it.
Im tìm cách gọi một servlet khác trong ứng dụng của tôi, nhưng nó phải là phương thức POST. Những gì tôi thường làm là response.redirect (...) nhưng điều đó gọi phương thức GET ... Làm thế nào tôi có thể gọi POST? – fernandohur
Những gì tôi đã nói: chuyển tiếp hoặc bao gồm, tùy thuộc vào việc bạn đang cố gắng làm. Xem ["Gọi các tài nguyên web khác" trong hướng dẫn JEE] (http://download.oracle.com/javaee/6/tutorial/doc/bnagi.html) để biết thêm chi tiết. –
Bạn có thể nhận điều phối viên cho một servlet khác trong ứng dụng của bạn và chuyển tiếp nó hoặc bao gồm nó như @Ryan gợi ý. Mã phải giống như thế này bên trong servlet đầu tiên của bạn:
ServletContext context = this.getServletContext();
RequestDispatcher dispatcher = context.getRequestDispatcher("/otherurltoservlet");
// change your request and response accordingly
dispatcher.forward(request, response);
Điều tôi cần là gọi phương thức POST trên một servlet khác trong ứng dụng của tôi. Liệu nó có gọi phương thức POST của "otherurltoservlet" không? – fernandohur
Tôi tin rằng nếu servlet đầu tiên được gọi qua bài thứ hai sẽ được gọi qua bài đăng trong chuỗi dispatcher.forward. – rmarimon
Hãy xem xét câu hỏi liên quan đến GET để POST http://stackoverflow.com/questions/4374548/does-jspforward-or-requestdispatcher-forward-use-get-or-post – rmarimon
- 1. Gọi Java servlet từ Android
- 2. Cách gọi một servlet từ mã Java
- 3. Cách gọi lớp servlet từ dạng HTML
- 4. JasperReports: Gọi báo cáo từ servlet
- 5. Cách gọi hàm JavaScript từ servlet
- 6. Gọi một dịch vụ web bên ngoài từ một servlet
- 7. Truyền dữ liệu từ servlet đến một servlet khác bằng cách sử dụng RequestDispatcher
- 8. Gọi lỗi jQuery ajax callback từ bên trong servlet
- 9. Chúng ta có thể gọi một servlet mà không <servlet-mapping> trong mục web.xml
- 10. Xuất tệp hình ảnh từ một servlet
- 11. Cách gửi tham số từ một servlet
- 12. Làm thế nào để gọi một cookie javascript trong servlet?
- 13. Bạn có thể gọi một servlet có liên kết không?
- 14. chuyển hướng jsp từ servlet RequestDispatcher
- 15. Sự khác biệt giữa servlet/servlet-mapping và filter/filter-mapping?
- 16. liên lạc giữa các servlet từ xa
- 17. Servlet: SEVERE: Phân bổ ngoại lệ cho servlet
- 18. Tải một tệp jsp từ một servlet (Máy ứng dụng)
- 19. Gọi một Servlet từ một trang JSP bằng cách sử dụng jQuery Ajax
- 20. Chuyển biến từ servlet sang JSP
- 21. Cookie liên tục từ một servlet trong IE
- 22. Gốc URl của servlet
- 23. Nơi System.out viết trong một servlet?
- 24. cách sử dụng Servlet đơn với mẫu url khác nhau?
- 25. Tôi lấy servlet-api.jar từ đâu?
- 26. Servlet vs Bộ lọc
- 27. Bản đồ servlet SpringMVC
- 28. javabean vs servlet
- 29. Java servlet - Session cleanup (HttpServletRequest)
- 30. Sử dụng CDI Injection trong một Servlet
Vâng Apache HttpClient là mã nguồn mở ... sao chép và dán? –
Tôi không thể sử dụng vì tôi sử dụng Google App Engine và nó áp đặt các hạn chế đối với một số lớp có thể được sử dụng – fernandohur