2010-08-18 35 views
6

Tôi đang gặp khó khăn trong việc xử lý các yêu cầu nhiều phần/dữ liệu biểu mẫu với máy chủ ứng dụng java của tôi. Từ những gì tôi đã tìm ra, đặc tả servlet 3.0 cung cấp các phương thức như HttpServletRequest.getParts(), đây là lý tưởng để xử lý dữ liệu biểu mẫu được tải lên servlet của tôi.Làm cách nào để xử lý các yêu cầu POST đa dữ liệu/biểu mẫu trong java servlet của tôi?

Tuy nhiên, phương pháp này là một phần của đặc tả servlet 3.0 và máy chủ ứng dụng của tôi (Tomcat 6) chưa hỗ trợ tính năng này. Ngay cả với một tập tin web.xml 3.0 hợp lệ và java EE 6 libs, tôi nhận được ngoại lệ sau khi cố gắng gọi getParts():

java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getParts()Ljava/util/Collection; 

Switching máy chủ ứng dụng là không thực sự là một lựa chọn khả thi cho dự án này. Có thư viện của bên thứ ba nào có sẵn để xử lý multipart/form-data trong các servlet java không?

+2

Bạn không thể chỉ biên dịch chống lại các libs Java EE 6 và hy vọng nó sẽ làm việc với Tomcat 6 - Java EE 6 libs chỉ cung cấp giao diện, bạn cần một máy chủ ứng dụng thực sự triển khai các giao diện đó. – Jesper

Trả lời

11

Khám phá Apache Commons Fileupload. Nó cung cấp cho bạn một API có lập trình để phân tích cú pháp một yêu cầu nhiều phần, và lặp qua các phần của nó một cách riêng lẻ.

Tôi đã sử dụng nó trong quá khứ để xử lý nhiều phần đơn giản và nó hoạt động tốt mà không bị quá phức tạp.

+0

Có! Đây chính xác là những gì tôi cần. –

5

Tomcat 6 does not and will not support Servlet Specification 3.0. Bạn nên thử làm điều này trên Tomcat 7, nhưng tôi không thực sự chắc chắn liệu chức năng này có trong bản phát hành beta hiện đang có sẵn hay không. Chức năng này dự kiến ​​sẽ có mặt trong bản phát hành sản phẩm.

Bạn có thể tiếp tục sử dụng Tệp tải lên Apache Commons như được đăng trong câu trả lời khác hoặc bạn có thể sử dụng Glassfish (tùy thuộc vào giai đoạn hiện tại và loại dự án của bạn).

1

khi chúng tôi sử dụng phương pháp bưu chính hơn dữ liệu được mã hóa, vì vậy chúng tôi phải sử dụng servletfileupload để nhận dữ liệu yêu cầu và sử dụng FileItemIterator chúng tôi có thể nhận được tất cả dữ liệu biểu mẫu.

tôi đã trả lời vào liên kết này How to process a form sent Google Web Toolkit in a servlet

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