具体代码如下:
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>
<%
// 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)
请问各位大佬这是怎么回事,该怎样处理,谢谢了