发布于2026-07-04 阅读(0)
扫一扫,手机访问
在Debian环境下用JSP做文件上传,其实并没有想象中那么复杂,核心思路就是“Tomcat跑起来 → 引入上传组件 → 写个表单 → 后台Servlet收文件”。下面把完整的操作流程拆开细说,每一步都带着常见的坑和绕过方法。

确保Tomcat已就绪
不管是用apt install tomcat9还是手动解压,先把Tomcat跑起来。访问http://localhost:8080看到欢迎页面,这一步就算过关。
添加文件上传依赖
JSP本身不直接处理上传,得靠第三方库。最稳妥的是Apache Commons FileUpload + Commons IO这对组合。如果你用Ma ven,在pom.xml里塞进这两行就行:
commons-fileupload
commons-fileupload
1.4
commons-io
commons-io
2.8.0
如果不喜欢Ma ven,手动下载两个jar包丢到WEB-INF/lib下也是一样的效果。注意版本别太老,否则容易踩兼容性坑。
编写上传表单的JSP页面
一个最简的上传页面长这样——重点就是表单的enctype必须设为multipart/form-data,少了这个属性,后台收不到文件数据。
<%@ page contentType="text/html;charset=UTF-8" language="ja va" %>
File Upload
Upload File
写一个Servlet来接收文件
这是核心环节。用@WebServlet("/upload")注解挂载,省掉web.xml的配置。逻辑分三步:判断请求是否multipart → 用DiskFileItemFactory和ServletFileUpload解析 → 遍历FileItem写入磁盘。下面这个示例直接可用,但生产环境建议加上文件大小限制和类型校验。
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import ja vax.servlet.ServletException;
import ja vax.servlet.annotation.WebServlet;
import ja vax.servlet.http.HttpServlet;
import ja vax.servlet.http.HttpServletRequest;
import ja vax.servlet.http.HttpServletResponse;
import ja va.io.File;
import ja va.io.IOException;
import ja va.util.List;
@WebServlet("/upload")
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String UPLOAD_DIRECTORY = "uploads";
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 检查是否为multipart请求
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Not a multipart request");
return;
}
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List fileItems = null;
try {
fileItems = upload.parseRequest(request);
} catch (Exception ex) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error parsing multipart request");
return;
}
if (fileItems != null && !fileItems.isEmpty()) {
for (FileItem item : fileItems) {
if (!item.isFormField()) {
String fileName = new File(item.getName()).getName();
String filePath = getServletContext().getRealPath("") + File.separator
+ UPLOAD_DIRECTORY + File.separator + fileName;
File storeFile = new File(filePath);
try {
item.write(storeFile);
response.getWriter().println("File " + fileName + " has uploaded successfully!");
} catch (Exception e) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "File sa ve failed");
}
}
}
}
}
}
可选:web.xml配置(如果你不用注解)
如果偏好在web.xml里统一管理,可以这样写:
FileUploadServlet
com.example.FileUploadServlet
FileUploadServlet
/upload
但更推荐用注解,代码更简洁,配置也少一层。
部署测试
把项目打成war包扔进Tomcat的webapps目录,或者用IDE直接部署。访问JSP页面,选个文件点Upload,看到“successfully”就说明通了。如果报错,大概率是上传目录uploads没有写入权限——手动在Tomcat的部署目录下建好文件夹,并给chmod 755或更高权限。
最后提醒一点:生产环境一定要做安全防护,比如限制上传文件大小、校验文件类型、防路径穿越攻击等。基础功能跑通之后,这些细节才是真正决定能否上线的关键。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8