博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件下载--getRequestDispatcher以及文件流输出的方式
阅读量:7105 次
发布时间:2019-06-28

本文共 2571 字,大约阅读时间需要 8 分钟。

来自于:

String path="/index.jsp";//这是当前应用中一个绝对路径的url   

servlet:
RequestDispatcher dispatcher=getServletContext().getRequestDispatcher(path);   
jsp:
RequestDispatcher dispatcher=application.getRequestDispatcher(path);   
    
all:
dispatcher.forward();//转到path这个页面(不可以在这之前或之后有其它输出)
dispatcher.include();//向浏览器输出path这个页面的执行结果(可以在这之前或之后有其它输出)

1、ServletRequest.getRequestDispatcher(String path)

path可是绝对路径也可以是相对路径
2、ServletContext.getRequestDispatcher(String path)
path必须以"/"开头,代表context root
3、另一个方法 ServletContext.getNameDispatcher(String name)
参数并不是路径,而是其名称,如果有多个Servlet名称一样的,在web.xml进行配置区别
4、以上方法回传一个RequestDispatcher对象,接着forward()或include()
5、forward()和include()区别在于include()方法将HTTP请求转送给其他Servlet或jsp后,这个Servlet或jsp虽然可以处理请求,但是主导权还是原来的Servlet或jsp,就是被调用的Servlet或jsp如果产生任何HTTP回应,将会并入原来的HttpResponse对象

 

<%@ page contentType="text/html; charset=utf-8" language="java"    import="java.sql.*" errorPage=""%><%@ page import="java.net.URLEncoder"%>
下载 <% response.setContentType("application/x-download"); String fileDownload = "/bgqb_radio_select.png"; String filedisplay = "bgqb_radio_select.png"; response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filedisplay, "UTF-8")); try { RequestDispatcher dis = application .getRequestDispatcher(fileDownload); if (dis != null) { dis.forward(request, response); } response.flushBuffer(); out.clear(); out = pageContext.pushBody(); } catch (Exception e) { e.printStackTrace(); } %>

 

 

void downLoaded(String fileName, HttpServletRequest request,            HttpServletResponse response) throws IOException {        response.setHeader("Content-Disposition", "attachment;filename="                + URLEncoder.encode(fileName, "UTF-8"));        response.setContentType("application/x-download;charset=UTF-8");        // response.setContentType("application/octet-stream;charset=UTF-8");        ServletOutputStream outputStream = response.getOutputStream();        BufferedInputStream inputStream = new BufferedInputStream(                new FileInputStream(fileName));        int size = 2048;        byte[] data = new byte[size];        while ((size = inputStream.read(data, 0, data.length)) != 0) {            outputStream.write(data, 0, size);            outputStream.flush();        }    }

 

补充:

问题getOutputStream() has already been called for this response,详见:

 

转载于:https://www.cnblogs.com/xiaoxian1369/archive/2013/05/24/3097295.html

你可能感兴趣的文章
不要再被骗了------QQ盗号原理大揭秘
查看>>
python list 中 remove 的骚操作/易错点
查看>>
UITabBarController 标签栏控制器
查看>>
以UIWebView的方式来播放网络多媒体档案
查看>>
UIView与CALayer的区别,很详细
查看>>
神经网络
查看>>
深入浅出多线程系列之一:简单的Thread(转)
查看>>
mysql优化学习(一)
查看>>
java 配置及Eclipse安装
查看>>
0427Python基础-运算符-编码
查看>>
linux + qt 环境搭建
查看>>
如何选择Html.RenderPartial和Html.RenderAction
查看>>
JS常用方法总结,及jquery异步调用后台方法实例
查看>>
JQuery获取input checkbox
查看>>
【PHP】Windows下配置用mail()发送邮件
查看>>
dig的用法
查看>>
组合数之和2
查看>>
Dubbo#编译动态扩展类
查看>>
ios 图片转换大小
查看>>
eclipse取消js验证
查看>>