2011-10-15 38 views
6

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

+0

Vâng Apache HttpClient là mã nguồn mở ... sao chép và dán? –

+0

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

Trả lời

8

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.

1

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.

+0

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

+0

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. –

7

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); 
+0

Đ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

+0

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

+0

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

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