具體代碼如下:
jsp檔案:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.io.File"%>
<%@page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>樹形遍歷</h1>
<%
// 1.創建一個佇列:
Queue<File> queue = new LinkedList<File>();
// 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()){
%>
<h4><a href="https://bbs.csdn.net/topics/${ pageContext.request.contextPath }/DownloadListServlet?filename="><%= f.getName() %></a></h4>
<%
}else{
queue.offer(f);
}
}
}
%>
</body>
</html>
Servlet 代碼如下
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);
}
}
這是我在網上找到的jsp多檔案的下載,運行時報錯,具體錯誤為:

以及控制臺顯示的錯誤:
資訊: 決議 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)
請問各位大佬這是怎么回事,該怎樣處理,謝謝了
uj5u.com熱心網友回復:
你看一看E://upload目錄下是否有非英文的檔案名uj5u.com熱心網友回復:
沒有的,的檔案夾里的檔案按是通過jsp上傳上去的,我把中文檔案名的檔案洗掉了,還是報錯。uj5u.com熱心網友回復:
例外是說請求引數中有非法字符。或者你可以換一下別的實作思路
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/13704.html
標籤:其他
上一篇:使用NPOI進行資料匯出
