`

Jsp上传文件(FileUpload+Servlet)

阅读更多
 

本教程以Apache组织的commons项目中的FileUpload项目做为jsp的文件上传组件,FileUpload项目完全尊守RFC1867规范中
关于在HTTP request 中通过Post方法提交文件的规范,该项目性能稳定快速,易于部署和使用.
本次教程以前端jsp + 后端 servlet的方式上传文件,你也可以完全在jsp中实现而不用servlet.
在开始之前你要准备以下几个东西:
1. commons-FileUpload 1.2 包
下载地址:
http://jakarta.apache.org/commons/fileupload/
2. commons-IO 1.3.1 包
下载地址:http://jakarta.apache.org/commons/io/
3. Commons-BeanUtils 1.7 包
下载地址:http://jakarta.apache.org/commons/beanutils/


有了上面这些东西我们就可以开始了
===============================================================================
1. 新建一个叫upload的WEB项目(我用的是Lomboz3.2开发环境)
2. 把上面下载下来的包分别解压并拷贝*.jar的文件到上面那个项目的WEB-INF/lib目录中
3.接下来我们要准备一份如下内容的upload.jsp文件,用来选择要上传的文件,
<html>
<head>
<title>Jsp+Servlet upload file</title>
</head>
<body>
<form name="upform" action="UploadServlet" method="POST" enctype="multipart/form-data">
<input type ="file" name="file1" id="file1"/><br/>
<input type ="file" name="file2" if="file2"/><br/>
<input type ="file" name="file3" id="file3"/><br/>
<input type="submit" value="Submit" /><br/>
<input type="reset" />
</form>
</body>
</html>

上面文件中有几个需要注意的地方就是
1. action="UploadServlet" 必须和后面的web.xml配置文件中对servlet映射必须保持一致.
2. method="POST" 这里必须为"POST"方式提交不能是"GET".
3. enctype="multipart/form-data" 这里是要提交的内容格式,表示你要提交的是数据流,而不是普通的表单文本.
4. file1,file2,file3表示你要3个文件一起上传,你也可以一次只上传一个文件.
===================================================================================

接下来我们要写一个与上面这个upload.jsp配套的servlet程序,就叫做UploadServlet.java吧
以下是该servlet的详细代码:
看上去有点长,不过并不复杂,很容易明白的.

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.DefaultFileItemFactory;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;

/**
* Servlet implementation class for Servlet: UploadServlet
*
*/
public class UploadServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
File tmpDir = null;//初始化上传文件的临时存放目录
File saveDir = null;//初始化上传文件后的保存目录
public UploadServlet() {
super();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
if(ServletFileUpload.isMultipartContent(request)){
DiskFileItemFactory dff = new DiskFileItemFactory();//创建该对象
dff.setRepository(tmpDir);//指定上传文件的临时目录
dff.setSizeThreshold(1024000);//指定在内存中缓存数据大小,单位为byte
ServletFileUpload sfu = new ServletFileUpload(dff);//创建该对象
sfu.setFileSizeMax(5000000);//指定单个上传文件的最大尺寸
sfu.setSizeMax(10000000);//指定一次上传多个文件的总尺寸
FileItemIterator fii = sfu.getItemIterator(request);//解析request 请求,并返回FileItemIterator集合
while(fii.hasNext()){
FileItemStream fis = fii.next();//从集合中获得一个文件流
if(!fis.isFormField() && fis.getName().length()>0){//过滤掉表单中非文件域
String fileName = fis.getName().substring(fis.getName().lastIndexOf("\\"));//获得上传文件的文件名
BufferedInputStream in = new BufferedInputStream(fis.openStream());//获得文件输入流
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+fileName)));//获得文件输出流
Streams.copy(in, out, true);//开始把文件写到你指定的上传文件夹
}
}
response.getWriter().println("File upload successfully!!!");//终于成功了,还不到你的上传文件中看看,你要的东西都到齐了吗
}
}catch(Exception e){
e.printStackTrace();
}
}

public void init() throws ServletException {
/* 对上传文件夹和临时文件夹进行初始化
*
*/
super.init();
String tmpPath = "c:\\tmpdir";
String savePath = "c:\\updir";
tmpDir = new File(tmpPath);
saveDir = new File(savePath);
if(!tmpDir.isDirectory())
tmpDir.mkdir();
if(!saveDir.isDirectory())
saveDir.mkdir();


}
}

========================================================================================================
upload.jsp文件有了,配套的servlet也有了,现在最后剩下的就是怎么让它们配合工作了,
接着我们把WEB-INF/web.xml文件请出来,并在该文件中加入以下内容:

<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>

写好以后再点击"保存"

==========================================================================================================
把你的upload项目整个拷贝到tomcat的webapps目录下,启动tomcat.
打开IE浏览器在地址栏中输入
http://localhost:8080/upload/upload.jsp
怎么样看到上传文件的输入框了吗? 什么,没有看到,出错了! 你仔细检查一下步骤有没有对.
好了,现在我们点击页面上的"浏览"按钮,找到我们要上传的文件,最后点击"Submit",太激动了,还不看一下你的c:\updir里面有没有你要的东西.

下一教程: <<FileUpload+
Struts 实现上传文件>>

分享到:
评论

相关推荐

    上传文件fileupload+解决enctype= multipart/form-data无法传递其他参数

    Apache Commons IO是处理IO操作的工具集,而Commons Fileupload则是专门用来处理文件上传的库,它可以方便地处理`multipart/form-data`编码的表单数据。 以下是关于这个话题的详细知识点: 1. **HTML表单与文件...

    jsp+servlet+fileupload文件上传

    "jsp+servlet+fileupload文件上传" 这个标题表明这是一个关于使用Java Web技术进行文件上传的教程。JSP (JavaServer Pages) 是一种动态网页技术,Servlet是Java EE中的一个核心组件,常用于处理HTTP请求。FileUpload...

    完整的Jsp+Servlet+SmartUpload工程实例

    本实例结合JSP、Servlet和SmartUpload,实现了用户登录和文件上传下载功能,充分展示了这些技术在实际开发中的应用。开发者可以通过学习这个实例,深入理解Web应用的开发流程,提升自己的技能水平。

    文件上传 JSP + Servlet

    总的来说,这个项目提供了一个基础的文件上传实现,可以帮助开发者理解JSP和Servlet在文件上传中的协作,以及如何使用第三方库如Apache Commons FileUpload处理多部分请求。在实际应用中,还需要考虑安全性问题,...

    jsp+servlet实现图片上传

    在本文中,我们将深入探讨如何使用Java的JSP(JavaServer Pages)和Servlet技术来实现一个图片上传功能。这是一个常见的Web开发任务,特别是在构建交互性强、动态内容丰富的网站时。以下是一些关键知识点: 1. **...

    纯jsp+servlet版的多文件上传与下载

    总结,这个项目展示了如何在传统的Java Web环境中使用JSP和Servlet实现文件上传和下载功能,同时利用Apache Commons FileUpload库简化了文件上传的复杂性。对于初学者,这是一个很好的实践案例,能够深入理解MVC模式...

    JSP+servlet文件上传简单案例

    在这个“JSP+servlet文件上传简单案例”中,我们将探讨如何利用这两种技术实现文件上传功能。文件上传是Web应用中常见的一种需求,例如用户可能需要上传个人头像、文档或者其他形式的数据。 首先,让我们了解一下...

    jsp+servlet实现文件上传和下载

    在这个主题中,“jsp+servlet实现文件上传和下载”是核心知识点,我们将深入探讨如何利用这两个组件以及Apache的`commons-fileupload`和`commons-io`库来完成这一任务。 1. **文件上传** 文件上传通常涉及用户通过...

    JSP+SERVLET的医疗管理系统

    照片上传功能,通常涉及到文件上传组件,如Apache Commons FileUpload库。用户可以通过选择本地文件,将其上传至服务器的指定目录,然后在数据库中保存文件路径。在医疗场景下,这可能是用于存储患者的影像资料或者...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    基于JSP+Servlet的提升项目

    综上所述,这个基于JSP+Servlet的网上书城项目涵盖了Web开发的多个重要知识点,包括MVC架构、JSP和Servlet的交互、数据库操作、文件上传、在线支付、验证码以及邮件服务等。对于初学者来说,这是一个很好的实践项目...

    物流信息网(jsp+sqlserver+servlet+strut)

    5. 文件上传与下载:系统提供了文件上传和下载功能,可能涉及到Apache Commons FileUpload库,用于处理用户上传的文件,如物流单据、合同等。文件存储可能采用文件系统或云存储服务,确保文件的安全和高效访问。 6....

    jsp+servlet+jdbc版的多文件上传与下载

    使用mvc模式设计,jsp+servlet+jdbc开发,包含数据库结构,jar包,数据库使用mysql,可以更改数据库,支持数据库记录上传文件的路径信息,...在Servlet中使用开源fileupload包实现文件上传下载功能Jsp+Servletfileupload

    jsp+servlet文件上传

    `JSP(JavaServer Pages)`和`Servlet`是Java EE平台上的两种核心技术,它们常用于构建动态Web项目,包括文件上传功能。本篇文章将深入讲解如何使用JSP和Servlet实现文件上传。 首先,我们需要了解`JSP`的基本概念...

    JSP+servlet上传文件有 进度条

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

    struts+上传下载+servlet+jsp

    在这个“struts+上传下载+servlet+jsp”项目中,我们将探讨这些技术如何协同工作以实现文件的上传和下载功能。 **Struts框架**: Struts是一个开源的MVC框架,它简化了Java Web应用的开发过程。在Struts中,...

    JSP+Servlet文件上传下载实例

    本实例将详细介绍如何利用JSP和Servlet来实现文件的上传与下载功能。 首先,我们需要了解JSP和Servlet的基本概念。JSP是一种服务器端脚本语言,它允许开发者在HTML页面中嵌入Java代码,使得动态内容的生成更加直观...

    JSP+servlet文件上传

    在Java Web开发中,JSP(JavaServer Pages)和Servlet是两种常见的技术,它们可以协同工作来处理用户请求,包括文件上传功能。本教程将详细讲解如何使用JSP和Servlet实现文件上传,以及相关的知识点。 一、JSP与...

    JSP+servlet实现文件上传

    在这个“JSP+servlet实现文件上传”的项目中,开发者提供了六个实例,涵盖了从用户选择文件到服务器接收并存储文件的整个过程。通过这个项目,我们可以学习到以下关键知识点: 1. **JSP基础知识**: JSP是一种基于...

    基于JSP+Servlet+JavaBean的图片或文件上传

    基于JSP+Servlet+JavaBean的图片或文件上传 一、概述 在当前的博客论坛或企业办公中,资源的共享是非常重要的。文件上传是实现资源共享的一种方式,通过文件上传,我们可以与他人分享资源,从而达到大众间的沟通和...

Global site tag (gtag.js) - Google Analytics