方式一:采用RequestDispatcher进行

[java] view plaincopy
  1. package cn.jbit.download.servlet;
  2. import java.io.IOException;
  3. import javax.servlet.RequestDispatcher;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class DownloadServlet extends HttpServlet {
  9. private static final long serialVersionUID = 6765085208899952414L;
  10. public void doGet(HttpServletRequest request, HttpServletResponse response)
  11. throws ServletException, IOException {
  12. doPost(request, response);
  13. }
  14. public void doPost(HttpServletRequest request, HttpServletResponse response)
  15. throws ServletException, IOException {
  16. String filedownload = "/upload/helloworld.jar";//即将下载的文件的相对路径
  17. String filedisplay = "helloworld.jar";//下载文件时显示的文件保存名称
  18. response.setContentType("application/x-download");//设置为下载application/x-download
  19. //response.setContentType("application/x-msdownload");//设置为下载application/x-msdownload
  20. //response.setContentType("application/octet-stream");//设置为下载application/octet-stream
  21. response.addHeader("Content-Disposition", "attachment;filename="
  22. + filedisplay);
  23. try {
  24. RequestDispatcher rd = request.getRequestDispatcher(filedownload);
  25. if(rd != null)
  26. {
  27. rd.forward(request,response);
  28. }
  29. response.flushBuffer();
  30. } catch (Exception e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. }

方式二:采用文件流输出的方式下载

[java] view plaincopy
  1. package cn.jbit.download.servlet;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.http.HttpServlet;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. public class DownloadOfIOServlet extends HttpServlet {
  14. private static final long serialVersionUID = 6765085208899952414L;
  15. public void doGet(HttpServletRequest request, HttpServletResponse response)
  16. throws ServletException, IOException {
  17. doPost(request, response);
  18. }
  19. public void doPost(HttpServletRequest request, HttpServletResponse response)
  20. throws ServletException, IOException {
  21. String basePath = request.getSession().getServletContext().getRealPath("/upload");
  22. //System.out.println(basePath);
  23. String filedisplay = "helloworld.jar";
  24. String filedownload = basePath + File.separator + "helloworld.jar";
  25. System.out.println("----------------------"+filedownload);
  26. response.setContentType("applicaiton/x-download");
  27. response.addHeader("Content-Disposition", "attachment;filename="+filedisplay);
  28. InputStream is = null;
  29. OutputStream os = null;
  30. BufferedInputStream bis = null;
  31. BufferedOutputStream bos = null;
  32. is = new FileInputStream(new File(filedownload));
  33. bis = new BufferedInputStream(is);
  34. os = response.getOutputStream();
  35. bos = new BufferedOutputStream(os);
  36. byte[] b = new byte[1024];
  37. int len = 0;
  38. while((len = bis.read(b)) != -1){
  39. bos.write(b,0,len);
  40. }
  41. bis.close();
  42. is.close();
  43. bos.close();
  44. os.close();
  45. }
  46. }

方式三:网页上做超级链接(不推荐使用,样服务器上的目录资源会直接暴露给最终用户)

[html] view plaincopy
  1. <a href="/DownloadFile/upload/helloworld.jar">helloworld.jar</a>

jsp页面代码:

[html] view plaincopy
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  7. <html>
  8. <head>
  9. <base href="<%=basePath%>">
  10. <title>My JSP 'download.jsp' starting page</title>
  11. <meta http-equiv="pragma" content="no-cache">
  12. <meta http-equiv="cache-control" content="no-cache">
  13. <meta http-equiv="expires" content="0">
  14. </head>
  15. <body>
  16. 下载1<a href="/DownloadFile/upload/helloworld.jar">helloworld.jar</a><br/>
  17. 下载2<a href="/DownloadFile/servlet/downloadServlet">helloworld.jar</a><br/>
  18. 下载3<a href="/DownloadFile/servlet/downloadOfIOServlet">helloworld.jar</a><br/>
  19. 下载4<a href="/DownloadFile/download/filedownload.action">helloworld.jar</a><br/>
  20. </body>
  21. </html>

jsp中文件下载的实现相关推荐

  1. SpringMVC中文件下载

    3. SpringMVC中文件下载 3.1 文件下载的流程 # springmvc中文件下载1. 定义用户将服务器中文件下载到自己本地计算机中过程称之为文件下载2. 开发文件下载1). 定位系统中哪些 ...

  2. jsp中实现文件下载   两种方法

    jsp中实现文件下载             转自:http://aguu125.iteye.com/blog/352314 (一) 最简单的方式是在网页上做超级链接,如:<a href=&qu ...

  3. java做jsp问题_java/jsp中 中文问题详解

    java/jsp中 中文问题详解 更新时间:2006年10月13日 00:00:00   作者: 预备知识: 1.字节和unicode Java内核是unicode的,就连class文件也是,但是很多 ...

  4. JSP实现文件下载功能

    JSP实现文件下载功能 package top.canghe.downloadDemo;import java.io.FileInputStream; import java.io.IOExcepti ...

  5. SpringBoot中文件下载、拦截器、war包部署、jar包部署

    3. SpringBoot中文件下载 将可以被下载资源放在磁盘的 D:\springbootcodes\springboot_day6\download 路径 这里我们使用jsp开发 引入依赖使tom ...

  6. 如何在jsp中写一个java方法

    一般用<%!  %>在jsp中写java方法 代码如下: <%@ page language="java" import="java.util.*,ja ...

  7. JSP中是EL表达式与JSTL

    EL语法:${ } EL取值来自于作用域对象 1.如何从指定作用域取值(默认从最小作用域取值) pageScope.requestScope.sessionScope.applicationScope ...

  8. jsp mysql 图片路径,请教JSP中怎么向MySql中存入和取出图片

    当前位置:我的异常网» Java Web开发 » 请教JSP中怎么向MySql中存入和取出图片 请教JSP中怎么向MySql中存入和取出图片 www.myexceptions.net  网友分享于:2 ...

  9. JSP中的重定向和请求转发以及它们的区别

    我们先硬着头皮看一下重定向的定义: 重定向(Redirect): 客户端浏览器向Web应用服务器端发送一个请求,Web服务器端使用HttpServletResponse的sendRedirect()方 ...

最新文章

  1. redis api java 正则_java代码怎么正则删除redis的数据
  2. HTML5 开发APP
  3. c# 使用Autodesk design Review API
  4. C语言合并链表merge linked list(附完整源码)
  5. 原来Github上也有这么多的JavaScript学习资源!
  6. html 控制文字的标签,html里面有一个控制文字滚动的标签marquee,比较有用。
  7. 计算机键盘输入法基础知识,教程计算机基础知识-:认识输入法
  8. php订单日期分类,PHP订单即将到来的日期
  9. V神已抵京,倒计时4天!6大理由告诉你为什么要参加“2019以太坊技术及应用大会”...
  10. easyui下拉框,增加以及商品的上架,下架
  11. 阳明心学在敏捷开发中的应用
  12. b2b平台和b2b网站一样吗?B2B是什么意思?
  13. Android studio中使用百度地图
  14. 计算机学院考研动员大会,计算机学院2018年考研动员大会顺利召开
  15. Python 代码实现ArcGis 标注Label转注记Annotation
  16. php撤回一步,PS怎么撤回很多步
  17. 重复高斯勒让德法则(gauss-legendre)求积分(python,数值积分)
  18. java.lang.IllegalArgumentException错误,小记一下
  19. 如今,纽约正在掀起一股新的区块链潮流,证券类通证被视为下一个风口
  20. 地图可视化“一网打尽“

热门文章

  1. 【图】一只Android开发程序猿对IMの所有痴情,你会懂?
  2. Vue(五)Vue规范
  3. mac电脑简单好用的非主流程序
  4. 11.28 限定某个目录禁止解析php 11.29 限制user_agent 11.30/11.31 php相关配置
  5. CentOS 7 Root用户密码重置 2017-04-02
  6. xcart-子分类/语言不显示
  7. Supermemo背单词7周年纪念
  8. 推荐九种天然食物脑黄金
  9. 【vscode】python工作目录添加到环境中
  10. 【pycharm使用指南】pycharm 取消连按两下shift出现的全局搜索 | pycharm误触出搜索弹窗