1. Khung bất khả tri: Tải xuống tệp Servlet dưới dạng tệp đính kèm
<!-- with JS -->
<a href="javascript:window.location='downloadServlet?param1=value1'">
download
</a>
<!-- without JS -->
<a href="downloadServlet?param1=value1" >download</a>
2. Struts2 Framework: Tệp tải xuống hành động dưới dạng tệp đính kèm
<!-- with JS -->
<a href="javascript:window.location='downloadAction.action?param1=value1'">
download
</a>
<!-- without JS -->
<a href="downloadAction.action?param1=value1" >download</a>
Sẽ tốt hơn nếu sử dụng <s:a>
thẻ trỏ bằng OGNL đến một URL được tạo bằng <s:url>
thẻ:
<!-- without JS, with Struts tags: THE RIGHT WAY -->
<s:url action="downloadAction.action" var="url">
<s:param name="param1">value1</s:param>
</s:ulr>
<s:a href="%{url}" >download</s:a>
Trong các trường hợp trên, bạn cần viết tiêu đề Xử lý nội dung cho phản hồi , chỉ định rằng tệp cần được tải xuống ( attachment
) và không được mở bởi trình duyệt ( inline
). Bạn cũng cần chỉ định Loại Nội dung và bạn có thể muốn thêm tên và độ dài của tệp (để giúp trình duyệt vẽ một thanh tiến trình thực tế).
Ví dụ: khi tải xuống ZIP:
response.setContentType("application/zip");
response.addHeader("Content-Disposition",
"attachment; filename=\"name of my file.zip\"");
response.setHeader("Content-Length", myFile.length()); // or myByte[].length...
Với Struts2 (trừ khi bạn đang sử dụng Action as a Servlet, ví dụ như hack để phát trực tiếp ), bạn không cần phải viết trực tiếp bất cứ điều gì vào phản hồi; chỉ cần sử dụng loại kết quả Luồng và định cấu hình nó trong struts.xml sẽ hoạt động: VÍ DỤ
<result name="success" type="stream">
<param name="contentType">application/zip</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="contentLength">${fileLength}</param>
</result>
3. Khung bất khả tri (khung Struts2): Mở tệp Servlet (/ Action) bên trong trình duyệt
Nếu bạn muốn mở tệp bên trong trình duyệt, thay vì tải xuống tệp, bố trí Nội dung phải được đặt thành nội tuyến , nhưng mục tiêu không thể là vị trí cửa sổ hiện tại; bạn phải nhắm mục tiêu một cửa sổ mới được tạo bởi javascript, một <iframe>
trong trang hoặc một cửa sổ mới được tạo khi đang di chuyển với mục tiêu "đã thảo luận" = "_ blank":
<!-- From a parent page into an IFrame without javascript -->
<a href="downloadServlet?param1=value1" target="iFrameName">
download
</a>
<!-- In a new window without javascript -->
<a href="downloadServlet?param1=value1" target="_blank">
download
</a>
<!-- In a new window with javascript -->
<a href="javascript:window.open('downloadServlet?param1=value1');" >
download
</a>