【Jsp】把Java写到Respond输出流里面供用户下载

把Java中的内容输出到文件大家都会了,输入输出流是每一个Java程序猿的必须课。在《【Java】打印流与缓冲区读者完成输入与输出到文件操作》(点击打开链接)与《【Java】输入与输出与JDK1.5之后的新型字符串StringBuilder》(点击打开链接)之中,我都说过这个问题。但是在Jsp上,怎么把Java内容直接把文件写到网页上给用户下载呢?一般一些导出功能实现,就需要这样弄。

具体如下图:

用户访问download这个Servlet,就直接提供一个“中文是没有问题.txt”的文件给用户下载。里面的内容是在Java中直接写到Respond输出流的,在服务器上根本没有这个文件。中文是没有问题.txt中的“呵呵”是在用户访问download这个Servlet才构造出来的。

你可以写如下的Servlet,无须任何插件,,构造一个Respond输出流给打印流PrintWriter打印内容就行了。

其余什么插件输出到文件同理,你可以改一改它的write方法就OK了。

以下的Servlet采用了Servlet3.0写法,指明此Servlet的访问地址是/download,测试是不要写成localhost:8080/工程名/download/,这样是不行的,后面没有斜杠,service方法是原来doPost与doGet方法的集合,一般不这样写:

import java.io.*;import java.net.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.annotation.*;@SuppressWarnings("serial")@WebServlet(name = "download", urlPatterns = { "/download" })public class download extends HttpServlet {protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {//在SSH框架中,可以通过HttpServletResponse response=ServletActionContext.getResponse();取出Respond对象//清空一下response对象,否则出现缓存什么的response.reset();//指明这是一个下载的respondresponse.setContentType("application/x-download");//这里是提供给用户默认的文件名String filename = "中文是没有问题的.txt";//双重解码、防止乱码filename = URLEncoder.encode(filename,"UTF-8");response.setCharacterEncoding("UTF-8");response.addHeader("Content-Disposition","attachment;filename=" + filename);/* * 这里是最关键的一步。 * 直接把这个东西写到response输出流里面,给用户下载。 * 如果输出到c:\b.txt就是: * PrintWriter printwriter = new PrintWriter(new FileWriter("c:\\b.txt",true)); * 现在写好respond头,就写成: * PrintWriter printwriter = new PrintWriter(response.getOutputStream()); * 把PrintWriter的输出点改一下 */PrintWriter printwriter = new PrintWriter(response.getOutputStream());printwriter.println("呵呵!");//打印流的所有输出内容,必须关闭这个打印流才有效printwriter.close();}}

一直觉得人应该去旅行,在年轻的时候,

【Jsp】把Java写到Respond输出流里面供用户下载

相关文章:

你感兴趣的文章:

标签云: