Tomcat 默认加载 index.jsp , index.html 等 index开头的文件【即使没有在WEB-INF/web.xml中配置路径】;
要让servlet 访问到页面有两种方式:
①把页面设置成 index 开头的;
②在web.xml 中配置 HTML 的路径:
动态web项目中,浏览器文件下载案例分析如下:
声明本人用的JDK9,Tomcat-9.0.10版本
①主要流程分2部分:浏览器页面【下载页面down.html】request Tomcat服务器 ,然后Tomcat服务器response ,使用IO流写出要下载的文件;
②浏览器请求,从请求 request 中获取 parameter【文件名字以及文件的 real-path】;
③响应response,在浏览器中浏览器本身带有解析功能,可以解析一些文本等浏览器能够识别的文件,给response设置头可以解决该问题,告诉浏览器以文件的形式读取;"Content-Disposition", "attachment;filename="+fileName;
动态工程的目录结构如下:
其中,down.html和index.html 2种方式,前者需在web.xml中配置路径,后者不需要;路径在下面贴出来:
servlet存放servlet 服务器,使用的注解方式开发,下面贴出 模板 template:
配置路径:
<welcome-file-list>
<welcome-file>down.html</welcome-file>
</welcome-file-list>
servlet注解template ,按照 setting 中这个路径 配置 template:
把以下代码直接copy进去 ,ok;
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
@javax.servlet.annotation.WebServlet(name="${Entity_Name}",urlPatterns="/${Entity_Name}")
public class ${Class_Name} extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
doGet(request,response);//
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {
}
}
下载文件自备,放download下;
down.html如下,其中 /Servlet3 是 servlet的 urlPattens路径【down.html在web.xml中配置在上面说过】:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件下载</title>
</head>
<body>
<a href="/Servlet3?fileName=001.jpg">下载01.jpg</a><br>
<a href="/Servlet3?fileName=002.jpg">下载02.jpg</a><br>
<a href="/Servlet3?fileName=demo.zip">下载demo.zip</a><br>
</body>
</html>
servlet 如下:
package com.baidu.servlet;
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;
import java.io.FileInputStream;
import java.io.IOException;
@WebServlet(name = "Servlet3", urlPatterns = "/Servlet3")
public class Servlet3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);//
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = request.getParameter("fileName");//获取request的文件名字
String realPath = getServletContext().getRealPath("download/"+fileName);
response.setHeader("Content-Disposition", "attachment;filename="+fileName);//给浏览器设置响应头
FileInputStream fis = new FileInputStream(realPath);
ServletOutputStream os = response.getOutputStream();//response写出
byte[] buf = new byte[1024];
int len = -1;
while ((len = fis.read(buf)) != -1) {//要写出就要读取
os.write(buf, 0, len);
}
//关闭流
os.close();
fis.close();
}
//ServletOutputStream getOutputStream()用于向浏览器输出二进制数据。【字节流--文件下载】
//java.io.PrintWriter getWriter() 用于向浏览器输出字符数据。【字符流--给浏览器响应数据】
}
点击运行Tomcat如下: