【问题标题】:Calling file download servlet on click of anchor in html?单击html中的锚点调用文件下载servlet?
【发布时间】:2013-07-02 11:00:38
【问题描述】:

我写了一个文件下载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>

FileDownloadServlet.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 与锚链接?
有什么建议吗?

【问题讨论】:

    标签: java javascript jquery html download


    【解决方案1】:

    给 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>
    

    这应该工作!!!

    【讨论】:

      【解决方案2】:

      在 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>
      

      【讨论】:

        【解决方案3】:

        将您的映射更改为特定的内容:

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

        您可以阅读anchor#href 标签的规范:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-03-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-08-18
            • 1970-01-01
            • 2013-01-15
            相关资源
            最近更新 更多