Tôi đã viết mã tạo tệp Excel bằng cách sử dụng REST JAX-RS và tôi đã xác nhận rằng tệp Excel đã tạo nằm trong thư mục máy chủ GlassFish.Làm cách nào để đặt tiêu đề phản hồi trong JAX-RS để người dùng thấy cửa sổ bật lên tải xuống cho Excel?
Nhưng mục tiêu của tôi là khi người dùng nhấp vào nút (tạo Excel .xls), tôi muốn tải xuống popup để hiển thị yêu cầu người dùng lưu hoặc mở tệp .xls giống như bất kỳ dịch vụ web nào khác để tải xuống bất kỳ loại tệp.
Theo tìm kiếm của tôi, bước là:
tạo Excel .xls (DONE)
viết excel để dòng
trong tập tin JAX-RS, thiết lập phản ứng tiêu đề cho một cái gì đó như,
String fileName = "Blah_Report.xls"; response.setHeader ("Nội dung-Bố trí", "tệp đính kèm; tên tệp =" + tên tệp);
Câu hỏi của tôi là tôi đang làm tất cả điều này trong tệp JAX-RS và tôi không có đối tượng HttpServletResponse.
Theo câu trả lời từ Add Response Header to JAX-RS Webservice
Ông nói:
Bạn có thể tiêm một tham chiếu đến thực tế HttpServletResponse qua chú thích @Context trong webservice của bạn và sử dụng addHeader() vv để thêm tiêu đề của bạn.
tôi có thể không thực sự tìm những gì chính xác điều đó có nghĩa là không có mã mẫu ..
@GarretWilson Tại sao không? Điều gì làm bạn bối rối? Đó là một tiêu đề đơn giản. – Tarlog
Bởi vì một singleton 'MyResource' sẽ có' myMethod() 'được gọi bởi nhiều chủ đề cùng một lúc. Mỗi luồng sẽ có một phiên bản 'HttpServletResponse' khác nhau, nhưng biến thành viên' anotherServletResponse' đơn lẻ chỉ có thể chứa một giá trị duy nhất tại một thời điểm. Cách duy nhất này sẽ hoạt động là nếu 'anotherServletResponse' được tiêm một số proxy an toàn thread sử dụng một luồng cục bộ hoặc một số để xác định thực thể' HttpServletResponse' thực của luồng hiện tại. –
Theo như tôi nhớ HttpServletRequestWrapper được tiêm; việc thực hiện của nó lấy HttpServletRequest thực từ TLS. Vì vậy, đoán của bạn là nhiều hơn hoặc ít hơn chính xác. – Tarlog