jsp多文件下载的400报错

具体代码如下:
jsp文件:
[code=html]<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.io.File"%>
<%@page import="java.util.*"%>
<!DOCTYPE html>



Insert title here

树形遍历

<%
// 1.创建一个队列:
Queue queue = new LinkedList();
// 2.先将跟节点入队:
File root = new File("E://upload");
queue.offer(root);
// 判断这个队列是否为空,不为空需要进行遍历:
while(!queue.isEmpty()){
// 将跟节点出队:
File file = queue.poll();
// 获得跟节点下的所有子节点:
File[] files = file.listFiles();
// 遍历所有子节点:
for(File f:files){
// 判断该节点是否为叶子节点:
if(f.isFile()){
%>

<%
}else{
queue.offer(f);
}
}
}
%>

[/code]
Servlet 代码如下
[code=java]package com.itheima.download;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itheima.utils.DownloadUtils;

/**

  • 树形的文件下载的代码实现
    */
    public class DownloadListServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 接收参数:
    String path = request.getParameter("filename");
    if(path != null){
    path = new String(path.getBytes("ISO-8859-1"),"UTF-8");
    }
    File file = new File(path);
    // 实现文件下载:设置两个头和一个流:
    // 获得文件名
    String filename = file.getName();
    response.setContentType(getServletContext().getMimeType(filename));
    // 设置另一个头:
    String agent = request.getHeader("User-Agent");
    if(agent.contains("Firefox")){
    filename = DownloadUtils.base64EncodeFileName(filename);
    }else{
    filename = URLEncoder.encode(filename, "UTF-8");
    filename = filename.replace("+", " ");
    }
    response.setHeader("Content-Disposition", "attachment;filename="+filename);
    // 设置输入流:
    InputStream is = new FileInputStream(file);
    OutputStream os = response.getOutputStream();
    int len = 0;
    byte[] b = new byte[1024];
    while((len = is.read(b))!=-1){
    os.write(b, 0, len);
    }
    is.close();

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
    doGet(request, response);
    }

}
[/code]
这是我在网上找到的jsp多文件的下载,大师运行时报错,具体错误为:
[img=https://img-bbs.csdn.net/upload/202008/08/1596878079_718697.png][/img]
以及控制台显示的错误:
信息: 解析 HTTP 请求 header 错误
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:503)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:502)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1627)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:832)
请问各位大佬这是怎么回事,该怎样处理,谢谢了

https://blog.csdn.net/zchunhe/article/details/13320605