`

RequestDispatcher实现文件下载

 
阅读更多
本来我使用的是文件流下载的方式,在Tomcat下可行,但是在WebLogic下使用文件流下载下来的文件总是乱码,最终我妥协了,选择了RequestDispatcher方式。
1.文件流方式
js中的文件请求:window.location.href = "download.jsp?filepath="+encodeURI(responseArray.path);//filepath中含有中文
实现下载的download.jsp文件如下:
<%@ page language="java" pageEncoding="utf-8" %>
<%@ page contentType="application/x-msdownload" %>
<%@ page language="java" import="java.io.*"%>
<%@ page language="java" import="java.net.URLEncoder"%>
<%@ page language="java" import="java.util.*"%>
<%
      String file=request.getParameter("filepath");
      String filepath=new String(file.getBytes("ISO8859-1"),"utf-8" );
      response.setContentType("application/x-msdownload; CHARSET=utf-8");
      String displaypath=filepath.substring(filepath.lastIndexOf("/")+1);
      response.addHeader("Content-Disposition","attachment;filename=" + new String(displaypath.getBytes("gb2312"), "ISO8859-1" ));
      String filepathdownload=this.getServletConfig.getServletContext().getRealPath(filepath);
      OutputStream outputStream=null;
      FileInputStream inputStream =null;
      try{
               outputStream = response.getOutputStream();
               inputStream = new FileInputStream(filepathdownload);
               byte[] buffer = new byte[1024];
               int i = -1;
               while ((i =inputStream.read(buffer)) != -1)
               {
                     outputStream.write(buffer, 0, i);
               }
               outputStream.flush();
               //下面这两句在Tomcat下需要,在Weblogic下要去掉,否则出错
               out.clear();
               out = pageContext.pushBody();
      }catch(Exception e)
      {
               System.out.println("Error!");
               e.printStackTrace();
      }
      finally{
               if(inputStream!=null)
               {
                   inputStream.close();
                   inputStream=null;
               }
              if(outputStream!=null)
              {
                   outputStream.close();
                   outputStream=null;
              }
      }
%>
2.RequestDispatcher实现文件下载
<%@page language="java" import="java.net.*" pageEncoding="gb2312"%>
<%
    //如果是从前台传过来的参数就这样写
    //String filePath = "/"+request.getParameter("path");前面红字标识的“/”不能没有  
    //String fileName = request.getParameter("name"); 
    response.setContentType("application/x-download");//设置为下载application/x-download
    String filenamedownload = "/Word/作文.doc";//即将下载的文件的相对路径
    String filenamedisplay = "作文.doc";//下载文件时显示的文件保存名称
    filenamedisplay = URLEncoder.encode(filenamedisplay,"UTF-8");
    response.addHeader("Content-Disposition","attachment;filename=" + filenamedisplay);   
    try
    {
        RequestDispatcher dispatcher = application.getRequestDispatcher(filenamedownload);
        if(dispatcher != null)
        {
            dispatcher.forward(request,response);
        }
        response.flushBuffer();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }   
%>
注意:
1.String filenamedownload = "/Word/作文.doc";指的是即将下载的文件的相对路径,表示作文.doc文件放在工程下的Word文件夹内,一定要注意"/Word/作文.doc",Word前面一定要有“/”,不能写成String filenamedownload = "Word/作文.doc";
2.RequestDispatcher下载方式更为简单,但是缺点在于:下载的文件必须放在工程的内部,application.getRequestDispatcher()方法的参数也必须是相对路径
分享到:
评论

相关推荐

    jsp实现文件下载功能

    ### JSP实现文件下载功能详解 #### 一、引言 在Web开发中,文件下载是一项常见的需求。Java Server Pages(JSP)作为一种强大的服务器端技术,被广泛应用于构建动态网页。本文将详细介绍如何利用JSP实现文件下载...

    js下载文件的实现方法一.pdf

    在JavaScript中,实现文件下载的方法有多种,这里主要讨论两种常见的方式:使用`RequestDispatcher`和通过文件流输出。这两种方法都是在服务器端处理,以避免直接暴露服务器资源给用户,从而提高安全性。 1. **使用...

    JSP文件下载的解决方法

    3. **读取文件并写入响应**:使用`InputStream`读取文件,然后通过`ServletOutputStream`将数据写入HTTP响应,从而实现文件下载: ```jsp ! String filenameDownload = this.getClass().getClassLoader().get...

    JavaWeb开发技术-RequestDispatcher对象.pptx

    需要注意的是,WEB-INF 目录中的内容对 RequestDispatcher 对象也是可见的,因此,传递给 getRequestDispatcher() 方法的资源可以是 WEB-INF 目录中的文件。 三、RequestDispatcher 对象的主要方法 ...

    jsp文件下载功能实现代码

    本文将介绍如何使用JSP实现文件下载,具体包括两种主要的方法:转发和通过输出流。 ### 第一种:采用转发的方式 在第一种方法中,我们使用`RequestDispatcher`的`forward()`方法来实现文件的下载。这种方法实际上...

    jsp+java类+servlet实现文件读取、写入的功能.rar

    9. **文件上传下载**:除了读写本地文件,JSP和Servlet也可以实现文件的上传和下载功能,涉及的类有`java.io.InputStream`和`java.io.OutputStream`。 10. **Web应用部署**:在实际环境中,这些Java代码需要被打包...

    Servlet读取XML文件实现JSP分页

    在本场景中,我们关注的是如何利用Servlet读取XML文件来实现JSP的分页功能。分页是一种优化用户体验的方式,尤其是在数据量庞大的情况下,它可以将大量数据分批次展示,避免一次性加载过多数据导致页面响应慢或资源...

    JavaWeb文件上传下载功能示例解析

    文件下载通常通过HTTP响应的`OutputStream`来实现。以下是一个基本的下载Servlet的框架: ```java public void doGet(HttpServletRequest request, HttpServletResponse response) { try { // 设置响应头,包括...

    struts+上传下载+servlet+jsp

    在这个“struts+上传下载+servlet+jsp”项目中,我们将探讨这些技术如何协同工作以实现文件的上传和下载功能。 **Struts框架**: Struts是一个开源的MVC框架,它简化了Java Web应用的开发过程。在Struts中,...

    Servlet读取XML文件实现JSP简单分页

    这可以通过`RequestDispatcher`的`forward()`方法实现请求转发,或者使用`response.sendRedirect()`进行重定向。 10. **优化与性能**: 对于大型数据集,一次性加载所有数据到内存中可能不实际。可以考虑使用流式...

    jsp页面下载的方式

    在JSP(JavaServer Pages)中,实现页面下载通常有两种主要方法:一种是使用`RequestDispatcher`,另一种是通过文件流输出。这两种方式都可以有效地将服务器上的文件发送到客户端,供用户下载。 1. **采用`...

    JSP文件生成静态页面

    过滤器通过实现javax.servlet.Filter接口并配置在web.xml文件中来定义其行为。 要为JSP文件生成静态页面,我们需要创建一个自定义过滤器,这个过滤器将在每次对JSP页面发起请求时被调用。以下是创建这样一个过滤器...

    struts_文件上传

    在Struts中实现文件上传涉及多个知识点,包括ActionForm、RequestDispatcher、Servlet API以及对文件处理的理解。 1. **Struts框架基础**:Struts是一个基于MVC(Model-View-Controller)设计模式的框架,它简化了...

    用servlet将jsp文件内容转为html

    - 要实现将JSP文件的内容转换为HTML并保存的功能,可以通过以下步骤进行: 1. 创建一个Servlet类,继承自`HttpServlet`。 2. 在`doGet`或`doPost`方法中处理请求。 3. 使用`RequestDispatcher`接口的`include`...

    javaweb中实现页面功能

    在JavaWeb开发中,"页面功能"通常是指与用户交互的部分,这主要通过Servlet和JSP(JavaServer Pages)技术来实现。...通过分析这些文件,我们可以深入理解如何在实际项目中应用上述概念和技巧来实现JavaWeb的页面功能。

    jsp+servlet+javaBean实现MVC

    在提供的文件列表中,"www.knowsky.com.txt"、"源码下载.txt"、"www.pudn.com.txt"可能是记录了相关教程或资源链接的文本文件,而"动态网站制作指南.url"可能是指向一个关于动态网站开发的在线教程。"jsp+servlet+...

    购物车实现

    完成后,Servlet将结果以RequestDispatcher的形式转发给JSP页面,页面再根据数据渲染视图。 在`shoppingcart`这个项目中,你可能会找到以下文件结构和组件: - `jsp`目录:包含了购物车相关的前端展示页面,如`add_...

    JSP实现-购物车(SQLserver版)

    JSP文件会被服务器转换成Servlet,然后由Servlet引擎执行。 ### 2. SQL Server数据库 SQL Server是微软公司推出的关系型数据库管理系统,广泛应用于企业级数据存储和管理。在这个项目中,SQL Server用于存储商品...

Global site tag (gtag.js) - Google Analytics