使用Java Servlet上传文件时出现资源未找到问题
回答:
嘿,你自己找到的问题点完全正确!我帮你拆解下为什么会出现这种看似奇怪的错误提示:
Servlet根本没被服务器加载
Java Web项目有严格的目录规范:你的Servlet类必须放在WEB-INF/src(如果是Maven/Gradle项目则是src/main/java)目录下,这样构建工具才会把编译后的.class文件放到WEB-INF/classes目录里——这是服务器默认扫描加载Servlet的位置。你把Java文件直接放在根src目录,编译后的文件根本不在服务器能识别的路径里,导致@WebServlet配置的urlPatterns = "upload"完全没生效。错误路径的由来
当表单提交到action="upload"时,服务器找不到对应的Servlet映射,就会把这个请求当成静态资源请求,自动去你的项目上下文路径(也就是/proj/publ/)下找名为uploads的资源,自然就会抛出“资源不可用”的错误——这就是那个不存在的/proj/publ/uploads路径的来源!
另外给你提个小优化建议:就算Servlet部署正确了,你代码里的serverPath = "/fileuploads"也有隐患,这是服务器的绝对路径,不是你项目的专属目录。如果要指定到项目相关的/proj/publ/fileuploads,可以用ServletContext获取真实路径,还能提前创建目录避免报错:
// 获取项目部署后的实际磁盘路径 String realPath = getServletContext().getRealPath("/fileuploads"); // 确保目录存在,避免FileNotFoundException File uploadDir = new File(realPath); if (!uploadDir.exists()) { uploadDir.mkdirs(); }
内容的提问来源于stack exchange,提问作者Viking
相关产品推荐
相关产品推荐

