在html中单击锚点时调用文件下载servlet

Calling file download servlet on click of anchor in html?

本文关键字:调用 文件下载 servlet html 单击      更新时间:2023-09-26

我编写了一个文件下载servlet,并在web.xml中注册,如下所示。

<servlet>
    <servlet-name>downloadFile</servlet-name>
    <servlet-class>com.hibu.HibuProspector.FileDwonloadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>downloadFile</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

文件下载Servlet.java

public class FileDownloadServlet extends HttpServlet{
  private static final int BYTES_DOWNLOAD = 1024;
  public void doGet(HttpServletRequest request, 
   HttpServletResponse response) throws IOException{
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition",
                     "attachment;filename=SampleFile.xlsx");
    ServletContext ctx = getServletContext();
    InputStream is = ctx.getResourceAsStream("/SampleFile.xlsx");
    int read=0;
    byte[] bytes = new byte[BYTES_DOWNLOAD];
    OutputStream os = response.getOutputStream();
    while((read = is.read(bytes))!= -1){
        os.write(bytes, 0, read);
    }
    os.flush();
    os.close(); 
   }
}

我在html页面中有一个链接,如下所示。点击链接,我需要下载文件。

<a class="button right" target="_blank">Download</a>

现在,我如何将下载servlet与锚点链接起来
有什么建议吗?

给web应用程序的根映射来执行特定操作不是一个好的做法,因此使用正确的servlet映射更新web.xml,如下所示:-

  <servlet-mapping>
      <servlet-name>fileDownload</servlet-name>
      <url-pattern>/fileDownload</url-pattern>
 </servlet-mapping>

则如下用新映射更新锚标签。(您应该在锚标记的href属性中提到url模式。)

<a class="button right" target="_blank" href="/fileDownload">Download</a>

这应该有效!!!

在web.xml 中给出正确的映射

  <servlet-mapping>
                <servlet-name>downloadFile</servlet-name>
                <url-pattern>/downloadFile</url-pattern>
        </servlet-mapping>

您只需要通过锚调用servlet

<a href="/downloadFile"  class="button right" target="_blank">Download</a>

将映射更改为特定的:

<servlet-mapping>
   <servlet-name>downloadFile</servlet-name>
   <url-pattern>/download</url-pattern>
</servlet-mapping>

并指定a标签的href属性:

<a class="button right" target="_blank" href="/download">Download</a>

你可以阅读锚的规格#href标签:

该属性指定Web资源的位置,从而定义由该属性定义的当前元素(源锚点)和目标锚点之间的链接。

除href="/downloadFile"外,所有三个答案都是正确的省略'/'以生成-href="downloadFile"为我工作。