Tomcat9 ,动态web 项目中web.index 的配置HTML页面【request & response】

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:

Tomcat9 ,动态web 项目中web.index 的配置HTML页面【request & response】

配置路径: 

<welcome-file-list>
        <welcome-file>down.html</welcome-file>
    </welcome-file-list>

 servlet注解template ,按照 setting  中这个路径 配置 template:

Tomcat9 ,动态web 项目中web.index 的配置HTML页面【request & response】

把以下代码直接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如下:

Tomcat9 ,动态web 项目中web.index 的配置HTML页面【request & response】