Servlet流操作——在浏览器中打开或者下载PDF文件

在Servlet与客户的请求应答的过程中,底层是通过输入/输出流来实现的。Servlet支持两种格式的输入/输出流。一个是字符输入/输出流。ServletResponse的getWriter()方法返回一个PrintWriter对象,Servlet可以利用PrintWriter来输出字符流形式的正文数据。另一种是字节输入/输出流。ServletResponse的getOutputStream()方法返回一个ServletOutputStream对象,Servlet可以利用ServletOutputStream来输出二进制的正文数据。

下面我们写一个返回PDF文件的Servlet来说明Servlet如何实现向客户端发送非HTML文档。示例代码如下:

package com.yl.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 以流的方式在网页中打开PDF文件
 *
 * @author LYYL
 *
 */
@WebServlet(name="servlet", urlPatterns={"/pdfShow"})
public class PDFServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		processRequest(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		processRequest(req, resp);
	}

	protected void processRequest(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException{

		//设置响应内容类型为PDF类型
		response.setContentType("application/pdf");

		ServletOutputStream sos = response.getOutputStream();

		//不在网页中打开,而是直接下载该文件,下载后的文件名为“Example.pdf”
		//response.setHeader("Content-disposition", "attachment;filename=Example.pdf");

		File pdf = null;
		FileInputStream fis = null;
		byte[] buffer = new byte[1024*1024];
		pdf = new File("D:\\test.pdf");
		response.setContentLength((int) pdf.length());
		fis = new FileInputStream(pdf);
		int readBytes = -1;
		while((readBytes = fis.read(buffer, 0, 1024*1024)) != -1){
			sos.write(buffer, 0, 1024*1024);
		}
		sos.close();
		fis.close();
	}
}

写好以后,我们打开浏览器,在地址栏输入:http://loaclhost:8080/Servlet/pdfShow即可打开我们的页面,页面效果就是读出PDF文件后的内容。在此说明一下Servlet是我的项目名称,pdfShow是我自己指定的urlPatterns。

大家也可以在我的代码中看到一句被注释掉的代码,如果没有注释掉,则不会在浏览器中打开该PDF文件而是通知你下载该文件,下载后的文件名为:Example.pdf。

时间: 2025-01-09 23:51:58

Servlet流操作——在浏览器中打开或者下载PDF文件的相关文章

微信/QQ打开网址弹出遮罩提示用户在外部浏览器中打开

使用微信打开网址时,无法在微信内打开app的下载链接.网上流传的各种微信打开下载链接,微信已更新基本失效,下面分享目前还可用的方案. 解决方案:弹出一个遮罩,提示用户在浏览器中打开进行下载或者是打开网页 在微信/QQ中打开链接,判断如果是在微信/QQ中打开的,直接弹出一个遮罩,提示用户在浏览器中打开,然后下载app应用.这样子再也不用管微信如何的更新,都可以实现微信中打开浏览器并下载app应用了. 需要微信遮罩,可加我的QQ: 1747006063 备注一下(微信遮罩) 文章转自熊猫源码:htt

微信/QQ打开网址弹出引导页引导在外部浏览器中打开

使用微信打开网址时,无法在微信内打开app的下载链接.网上流传的各种微信打开下载链接,微信已更新基本失效,下面分享目前还可用的方案. 解决方案:弹出一个遮罩,提示用户在浏览器中打开进行下载或者是打开网页 在微信/QQ中打开链接,判断如果是在微信/QQ中打开的,直接弹出一个遮罩,提示用户在浏览器中打开,然后下载app应用.这样子再也不用管微信如何的更新,都可以实现微信中打开浏览器并下载app应用了. 需要微信遮罩,可加我的QQ: 1747006063 备注一下(微信遮罩) 文章转自熊猫源码:htt

微信网页中打开网址弹出引导页引导在外部浏览器中打开

使用微信打开网址时,无法在微信内打开app的下载链接.网上流传的各种微信打开下载链接,微信已更新基本失效,下面分享目前还可用的方案. 解决方案:弹出一个遮罩,提示用户在浏览器中打开进行下载或者是打开网页 在微信/QQ中打开链接,判断如果是在微信/QQ中打开的,直接弹出一个遮罩,提示用户在浏览器中打开,然后下载app应用.这样子再也不用管微信如何的更新,都可以实现微信中打开浏览器并下载app应用了. 需要微信遮罩,可加我的QQ: 1747006063 备注一下(微信遮罩) 文章转自熊猫源码:htt

微信打开网址添加在浏览器中打开提示 http://caibaojian.com/weixin-tip.html

原文链接:http://caibaojian.com/weixin-tip.html#t2 使用微信打开网址时,无法在微信内打开常用下载软件,手机APP等.网上流传的各种微信打开下载链接,微信已更新基本失效,最新的一个是使用链接跳转方式: http://mp.weixin.qq.com/mp/redirect?url=http://caibaojian.com/test.apk#weixin.qq.com#wechat_redirect. 将链接文本中的http://caibaojian.com

jsWindow 对象 Window 对象 Window 对象表示浏览器中打开的窗口。 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。 注释:没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。 Window 对象集合 集合 描述 frames[] 返回窗口中所有命

一.JSX简介 JSX就是Javascript和XML结合的一种格式.React发明了JSX,利用HTML语法来创建虚拟DOM.当遇到<,JSX就当HTML解析,遇到{就当JavaScript解析. 如下(JS写法) var child1 = React.createElement('li', null, 'First Text Content'); var child2 = React.createElement('li', null, 'Second Text Content'); var

浏览器中打开摄像头

本文是讲述如何在浏览器中打开摄像头,并且实时显示在页面上.想要实现这一功能,需要依赖WebRTC (Web Real-Time Communications) 这一实时通讯技术,它允许浏览器之间视频流和音频流或者其他任意数据的传输,当然其中包含了大量的API和协议,这些在这里都不做介绍,具体的标准还在完善之中,所以使用的方法有时候也需要考虑到兼容问题,那么回到主题,怎样使用webRTC获取视频流. 首先对于html,我们需要一个video标签来播放视频(JS中添加也可以),当然画布也是能够实现的

微信打开网址添加在浏览器中打开提示遮罩

微信打开网址添加在浏览器中打开提示遮罩 网传方案(已失效): 使用微信打开网址时,无法在微信内打开常用下载软件,手机APP等.网上流传的各种微信打开下载链接,微信已更新基本失效,最新的一个是使用链接跳转方式:· http://mp.weixin.qq.com/mp/redirect?url=http://baidu.com#weixin.qq.com#wechat_redirect. 将链接文本中的http://baidu.com换成你的下载链接地址.本人已经测试可行.欢迎打开微信扫码测试.已经

微信打开网址添加在浏览器中打开提示

今天要加的是一个终极解决方法:弹出一个遮罩提示用户在新的浏览器窗口打开. 再也不用管微信如何的更新,直接判断微信的ua,然后弹出一个遮罩提示用户在浏览器中打开下载.并且不加关闭的按钮.类似于下面这样子: 这样子用户就只能在浏览器中打开,并且可以直接下载应用了.欢迎打开微信扫描查看(其他扫描没有效果). 演示二维码: 源码: <!DOCTYPE html> <html lang="zh_CN"> <head> <meta http-equiv=&

报表XML导出rtf格式,结果在浏览器中打开XML文件。用360浏览器下载rtf文件打开后出现Authentication failed 问题

报表XML导出rtf格式,结果在浏览器中打开XML文件.用360浏览器下载rtf文件打开后出现Authentication failed 问题 直接上问题图: 问题描述:在Oracle EBS中执行"资源事务处理 XML"请求,选择输出rtf格式,完成后查看输出,却在浏览器中打开了XML文件.        提示:需要检查一下是否有对应的模板文件和模板定义有效时间.        解决方案:1. 查看日志. 从中可以看出出错原因,以及模板代码.2. 添加Oracle XML Publi