`
阅读更多

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.copyFilejar 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见附件

0
2
分享到:
评论

相关推荐

    异步servlet上传文件,解决网速慢以及大文件,耗完线程问题

    假如一个场景,用户上传文件,某些用户网速较慢,同时存在100个这样的用户,如果BIO且最大线程设为100会导致线程用完。NIO怎么来解决这个问题? 本实例采用tomcat8作为容器,开启异步servlet读写事件,解决高并发IO...

    servlet 上传文件流保存到数据库

    以上就是使用Servlet上传文件流并保存到数据库的基本流程。实际应用中可能还需要处理一些额外的问题,比如错误处理、文件大小限制、文件类型检查等。同时,为了提高性能和安全性,可以考虑使用连接池管理数据库连接...

    Servlet上传文件并显示进度条

    "Servlet上传文件并显示进度条"这个主题涵盖了如何在用户上传大文件时提供实时进度反馈,以增强用户体验。在这个过程中,我们需要处理以下几个核心知识点: 1. **Multipart解析器**:Servlet 3.0及以上版本引入了...

    利用COS Servlet上传文件

    总的来说,利用COS Servlet上传文件涉及到客户端的表单提交和服务器端的Servlet处理,需要对HTTP协议、文件上传、MultipartRequest以及可能的业务逻辑有深入理解。同时,确保在实现过程中充分考虑安全性,以提供健壮...

    JSP+servlet上传文件有 进度条

    总结来说,实现"JSP+servlet上传文件有进度条"需要结合JSP、Servlet、文件上传库(如Commons-FileUpload)以及前端的AJAX和JavaScript技术。通过异步请求和实时的进度反馈,为用户提供流畅的文件上传体验。在实际...

    java实现利用HTTP基于servlet上传文件至服务器.pdf

    "Java 实现利用 HTTP 基于 Servlet 上传文件至服务器" 文件上传概述 文件上传是指客户端将文件传输到服务器端的过程。在 Web 开发中,文件上传是非常常见的操作,例如上传头像、上传文件等。在 Java 中,可以使用 ...

    servlet上传文件详细解析

    servlet上传文件详细解析 大家好好看

    java servlet上传文件 项目中用的.绝对能用

    上载文件.轻松搞定.java Servlet上传文件.

    servlet上传文件(后)

    "servlet上传文件(后)"这个标题暗示我们将探讨的是如何使用Servlet接收并处理客户端上传的文件。这篇博客可能详细解释了文件上传的后端处理过程,包括数据解析、文件保存以及异常处理等环节。 首先,我们需要了解...

    jsp与servlet 上传文件 javaBean上传文件

    在处理文件上传需求时,JSP通常作为前端界面,而Servlet则负责后端逻辑处理。本篇文章将深入探讨如何使用JSP与Servlet进行文件上传,并特别关注如何解决中文文件名乱码的问题。 首先,我们需要理解文件上传的基本...

    servlet上传文件demo

    自己写的servlet上传文件demo,有注释方便学习。 包含commons-io 和 commons-fileupload 架包 jdk大于等于1.6可直接用,如果jdk版本小于1.6请换一个低版本io的架包即可

    SERVLET 上传文件原理,Cache-Contro,java编码,jbpm原理

    Servlet上传文件原理: Servlet在Java Web开发中是服务器端处理HTTP请求的核心组件。在文件上传场景下,Servlet接收客户端通过POST请求发送的多部分/形式数据(multipart/form-data)。Servlet API提供`...

    JSP+Servlet实现文件上传到服务器功能

    本文实例为大家分享了JSP+Servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao、service、servlet 这三层是主要的结构,类似 MVC ...

    ajax异步文件上传,servlet处理

    在现代Web应用中,用户经常需要上传文件,如图片、文档等。为了提供更好的用户体验,开发者通常会采用AJAX(Asynchronous JavaScript and XML)技术实现异步文件上传,避免传统方式下页面刷新带来的中断感。AJAX允许...

    jsp servlet 上传文件

    - **文件大小限制**:设置上传文件的最大大小,防止恶意大文件上传导致服务器资源耗尽。 - **文件类型检查**:只允许特定类型的文件上传,例如只接受图片文件,防止恶意文件上传。 - **文件名处理**:避免使用原始...

    servlet实现文件上传下载

    本教程将详细讲解如何使用Servlet实现文件的上传和下载功能,其中涉及到的主要技术点包括Servlet API、Multipart解析以及文件流操作。 首先,我们需要了解Servlet在文件上传中的作用。Servlet在接收到客户端(通常...

    ftp、servlet上传文件

    Servlet在处理HTTP请求时,可以解析请求体中的multipart/form-data数据,这是上传文件通常使用的格式。你可以使用Commons FileUpload库来处理这个任务。首先,创建一个DiskFileItemFactory来配置临时存储和大小限制...

    servlet上传文件实现代码详解(四)

    servlet上传文件实现代码详解 servlet上传文件是指将客户端的文件上传到服务器端,服务器端使用servlet来处理上传的文件。下面是servlet上传文件的实现代码详解。 首先,需要了解上传文件的基本概念。上传文件时,...

    jsp servlet 上传文件显示进度

    在IT行业中,JSP(JavaServer Pages)和Servlet是用于...总的来说,通过结合JSP、Servlet和AJAX技术,我们可以构建出一个优雅的文件上传系统,它不仅可以处理文件上传,还能提供实时的进度反馈,极大地提升了用户体验。

    Servlet上传文件

    * 4)高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory); * 目的是调用 parseRequest(request)方法 获得 FileItem 集合list , * * 5)在 FileItem 对象中 获取信息, ...

Global site tag (gtag.js) - Google Analytics