Jsp+Servlet实现不同格式文件访问/下载
运行结果
实现过程
这里会用到response.setContentType(MIME)这个方法,该方法的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
Content-Type(Mime-Type) | 文件扩展名 |
---|---|
application/pdf | |
application/vnd.ms-excel | .xlsx |
application/msword | .doc |
text/html | .htm |
text/plain | .txt |
… | … |
更多请参考:response.setContentType()的作用及参数
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件访问</title>
</head>
<body>
<form action="TestServlet" method="post">
<label>请选择文件类型!</label><br>
<input type="radio" value="txt" name="type">.txt
<input type="radio" value="ppt" name="type">.pptx
<input type="radio" value="word" name="type">.doc
<input type="radio" value="xlsx" name="type">.xlsx
<input type="radio" value="pdf" name="type">.pdf
<input type="radio" value="zip" name="type">.zip
<br><br>
<input type="submit" value="确认">
</form>
</body>
</html>
servlet部分代码
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
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;
/**
* Servlet implementation class TestPDF
*/
@WebServlet("/Test")
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Test() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String type = request.getParameter("type");
if("txt".equals(type)) {
sendTXT(request, response);
}
else if("xlsx".equals(type)) {
sendXLSX(request, response);
}
else if ("word".equals(type)) {
sendDOC(request, response);
}
else if ("zip".equals(type)) {
sendZIP(request, response);
}
else if ("ppt".equals(type)) {
sendPPT(request, response);
}
else if("pdf".equals(type)){
sendPDF(request, response);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
//访问txt格式文件
public void sendTXT(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
//TXT格式文件的内容是可以在浏览器中直接显示的,以下是为了防止页面中出现中文乱码
response.setContentType("text/plain;charset=utf-8");
request.setCharacterEncoding("UTF-8");
ServletOutputStream sos = response.getOutputStream();
//该文件在WEB-INF目录下,由于在tomcat上部署后目录结构变了,所以常规的相对路径无效
String path = this.getServletContext().getRealPath("/WEB-INF/test.txt");
File txt = new File(path);
FileInputStream fis = null;
byte[] buffer = new byte[1024*1024];
response.setContentLength((int) txt.length());
fis = new FileInputStream(txt);
int readBytes = -1;
while((readBytes = fis.read(buffer, 0, 1024*1024)) != -1){
sos.write(buffer, 0, 1024*1024);
}
sos.close();
fis.close();
}
public void sendPDF(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
response.setContentType("application/pdf");
ServletOutputStream sos = response.getOutputStream();
String path = this.getServletContext().getRealPath("/WEB-INF/test.pdf");
File pdf = new File(path);
FileInputStream fis = null;
byte[] buffer = new byte[1024*1024];
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();
}
//省略。。。。
}
配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>Demo3</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
</web-app>
┌( ´_ゝ` )┐菜鸟一枚,如有问题,欢迎指出。。