java web中在不使用第三方jar的情况下如何使用servlet 上传文件呢?
(1)上传表单,文件名为upload_servlet.jsp,内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>servlet upload file</title> </head> <body> <center> <form action="<%=basePath %>servlet/upload.servlet" enctype="multipart/form-data" method="post" > <input type="file" name="file2" /> <br /> <input type="submit" value="上传" /> </form> <br /> <a href="../index.jsp">index</a> </center> </body> </html>
注意:上传文件表单必须指定 enctype="multipart/form-data" 和method="post"
(2)后台servlet,名称是UploadFileServlet,代码如下:
package com.shop.jn.web.servlet; import java.io.File; import java.io.IOException; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper; import com.common.util.SystemHWUtil; import com.common.web.servlet.upload.SUploadServlet; /** * Servlet implementation class UploadFileServlet */ public class UploadFileServlet extends SUploadServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("UploadFileServlet"); if(request instanceof MultiPartRequestWrapper){ MultiPartRequestWrapper mp=(MultiPartRequestWrapper)request; Enumeration<String> multi=mp.getFileParameterNames(); String formFileTagName=null;//"file2" for( ;multi.hasMoreElements();){ String element=multi.nextElement(); formFileTagName=element;//表单中标签的名称:file标签的名称 break; } String fileName=mp.getFileNames(formFileTagName)[0];//上传的文件名 //保存到哪儿 File savedFile=super.getUploadedFilePath(request, "upload", fileName);//D:\eclipse\workspace\shop_goods\ upload File[]files=mp.getFiles(formFileTagName); File uploadFile=files[0];//上传的文件 SystemHWUtil.copyFile(uploadFile, savedFile/*new File("D:\\Temp\\a\\a\\c.zip")*/); uploadFile.delete(); } response.sendRedirect("../upload_download/upload_servlet.jsp"); } }
说明:上传的文件保存到项目根目录下的upload文件夹中。
注意:上述servlet只能处理单文件上传。
servlet在web.xml中的配置如下:
<servlet> <servlet-name>UploadFileServlet</servlet-name> <servlet-class>com.shop.jn.web.servlet.UploadFileServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadFileServlet</servlet-name> <url-pattern>/servlet/upload.servlet</url-pattern> </servlet-mapping>
UploadFileServlet 中使用的方法的源码
SystemHWUtil.copyFile(jar io0007-find_progess_中的类com.common.util.SystemHWUtil):
/** * * @param srcFile * :must be regular file,can not be folder; * @param targetFile * :must be regular file,can not be folder; * @throws IOException */ public static void copyFile(File srcFile, File targetFile) throws IOException { FileInputStream in = new FileInputStream(srcFile); FileOutputStream out = new FileOutputStream(targetFile); copyFile(in, out); } public static void copyFile(InputStream in, FileOutputStream target) throws IOException { // File targetFile = new File(targetFileName); // FileOutputStream target = null; // if (targetFile.isDirectory()) // { // targetFile = new File(targetFile, simpleName); // } try { // target = new FileOutputStream(targetFile); byte[] buffer = new byte[BUFF_SIZE]; int byteNum; while ((byteNum = in.read(buffer)) != NEGATIVE_ONE) { target.write(buffer, 0, byteNum); } System.out.println("[SystemUtil:copyFile]:file copy successfully!"); } catch (Exception e) { e.printStackTrace(); } finally { if (in != null) { in.close(); in = null; } if (target != null) { target.close(); target = null; } } }
WebServletUtil.getUploadedPath(jar io0007-find_progess_中的类com.common.util.WebServletUtil):
/*** * java web // * D:\xxx\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server * .core\tmp0\wtpwebapps\shop_goods\images // * D:\xxx\eclipse\workspace\shop_goods\ upload * * @param uploadFolderName * @param projectName * @param sContext * @return */ public static String getUploadedPath(String uploadFolderName, String projectName, ServletContext sContext) { String uploadFolder_tmp = null; if (uploadFolderName.startsWith("/")) { uploadFolder_tmp = uploadFolderName; } else { uploadFolder_tmp = "/" + uploadFolderName;// "/upload" } String realpath = sContext.getRealPath(uploadFolder_tmp); // project name ,eg.shop_goods projectName = SystemHWUtil.deleteFrontSlash(projectName); realpath = SystemHWUtil.getRealPath(realpath, projectName); return realpath; }
注意:
(1)使用的容器是tomcat,不是jetty;
(2)没有使用第三方上传jar包
依赖的jar见附件
相关推荐
假如一个场景,用户上传文件,某些用户网速较慢,同时存在100个这样的用户,如果BIO且最大线程设为100会导致线程用完。NIO怎么来解决这个问题? 本实例采用tomcat8作为容器,开启异步servlet读写事件,解决高并发IO...
以上就是使用Servlet上传文件流并保存到数据库的基本流程。实际应用中可能还需要处理一些额外的问题,比如错误处理、文件大小限制、文件类型检查等。同时,为了提高性能和安全性,可以考虑使用连接池管理数据库连接...
"Servlet上传文件并显示进度条"这个主题涵盖了如何在用户上传大文件时提供实时进度反馈,以增强用户体验。在这个过程中,我们需要处理以下几个核心知识点: 1. **Multipart解析器**:Servlet 3.0及以上版本引入了...
总的来说,利用COS Servlet上传文件涉及到客户端的表单提交和服务器端的Servlet处理,需要对HTTP协议、文件上传、MultipartRequest以及可能的业务逻辑有深入理解。同时,确保在实现过程中充分考虑安全性,以提供健壮...
总结来说,实现"JSP+servlet上传文件有进度条"需要结合JSP、Servlet、文件上传库(如Commons-FileUpload)以及前端的AJAX和JavaScript技术。通过异步请求和实时的进度反馈,为用户提供流畅的文件上传体验。在实际...
"Java 实现利用 HTTP 基于 Servlet 上传文件至服务器" 文件上传概述 文件上传是指客户端将文件传输到服务器端的过程。在 Web 开发中,文件上传是非常常见的操作,例如上传头像、上传文件等。在 Java 中,可以使用 ...
servlet上传文件详细解析 大家好好看
上载文件.轻松搞定.java Servlet上传文件.
"servlet上传文件(后)"这个标题暗示我们将探讨的是如何使用Servlet接收并处理客户端上传的文件。这篇博客可能详细解释了文件上传的后端处理过程,包括数据解析、文件保存以及异常处理等环节。 首先,我们需要了解...
在处理文件上传需求时,JSP通常作为前端界面,而Servlet则负责后端逻辑处理。本篇文章将深入探讨如何使用JSP与Servlet进行文件上传,并特别关注如何解决中文文件名乱码的问题。 首先,我们需要理解文件上传的基本...
自己写的servlet上传文件demo,有注释方便学习。 包含commons-io 和 commons-fileupload 架包 jdk大于等于1.6可直接用,如果jdk版本小于1.6请换一个低版本io的架包即可
Servlet上传文件原理: Servlet在Java Web开发中是服务器端处理HTTP请求的核心组件。在文件上传场景下,Servlet接收客户端通过POST请求发送的多部分/形式数据(multipart/form-data)。Servlet API提供`...
本文实例为大家分享了JSP+Servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao、service、servlet 这三层是主要的结构,类似 MVC ...
在现代Web应用中,用户经常需要上传文件,如图片、文档等。为了提供更好的用户体验,开发者通常会采用AJAX(Asynchronous JavaScript and XML)技术实现异步文件上传,避免传统方式下页面刷新带来的中断感。AJAX允许...
- **文件大小限制**:设置上传文件的最大大小,防止恶意大文件上传导致服务器资源耗尽。 - **文件类型检查**:只允许特定类型的文件上传,例如只接受图片文件,防止恶意文件上传。 - **文件名处理**:避免使用原始...
本教程将详细讲解如何使用Servlet实现文件的上传和下载功能,其中涉及到的主要技术点包括Servlet API、Multipart解析以及文件流操作。 首先,我们需要了解Servlet在文件上传中的作用。Servlet在接收到客户端(通常...
Servlet在处理HTTP请求时,可以解析请求体中的multipart/form-data数据,这是上传文件通常使用的格式。你可以使用Commons FileUpload库来处理这个任务。首先,创建一个DiskFileItemFactory来配置临时存储和大小限制...
servlet上传文件实现代码详解 servlet上传文件是指将客户端的文件上传到服务器端,服务器端使用servlet来处理上传的文件。下面是servlet上传文件的实现代码详解。 首先,需要了解上传文件的基本概念。上传文件时,...
在IT行业中,JSP(JavaServer Pages)和Servlet是用于...总的来说,通过结合JSP、Servlet和AJAX技术,我们可以构建出一个优雅的文件上传系统,它不仅可以处理文件上传,还能提供实时的进度反馈,极大地提升了用户体验。
* 4)高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory); * 目的是调用 parseRequest(request)方法 获得 FileItem 集合list , * * 5)在 FileItem 对象中 获取信息, ...