Servlet和JSP中的文件上传示例

使用Servlet和JSP将文件上传到服务器是Java Web应用程序中的常见任务。 在对Servlet或JSP进行编码以处理文件上传请求之前,您需要了解一点有关HTML和HTTP协议中文件上传支持的知识。 如果要让用户从文件系统中选择文件并上传到服务器,则需要使用<input type =” file” />。 这将使您能够选择任何文件形式的文件系统并上传到服务器。 接下来的事情是,表单方法应该是HTTP POST ,其enctype为multipart / form-data ,这使得文件数据可在请求主体内的部分中使用。 现在,为了读取这些文件部分并在Servlet中创建文件,可以使用ServletOutputStream完成。 最好使用Apache commons FileUpload (一个开放源代码库)。 当您将表单方法的发布和内容类型设置为“ multipart / form-data”时,Apache FileUpload处理解析HTTP请求的所有低级细节,这些细节均会确认RFC 1867或“ HTML中基于表单的文件上传 ”。

重要事项:

JavaSparrow-med

  1. DiskFileItemFactory是FileItem的默认Factory类 。 当Apache Commons读取多部分内容并生成FileItem时,此实现将根据阈值大小将文件内容作为临时文件保留在内存或磁盘中。 默认情况下,DiskFileItemFactory的阈值为10KB,并在temp目录中生成临时文件,由System.getProperty(“ java.io.tmpdir”)返回。 这两个值都是可配置的,最好针对生产用途进行配置。 如果用于运行Server的用户帐户没有足够的权限将文件写入temp目录,则可能会遇到权限问题。
  2. 根据内存使用情况仔细选择阈值大小,将大量内容保留在内存中可能会导致java.lang.OutOfMemory ,而值太小则可能会导致大量临时文件。
  3. Apache commons文件上传还提供FileCleaningTracker来删除DiskFileItemFactory创建的临时文件。 一旦对相应的File实例进行垃圾回收,FileCleaningTracker就会删除临时文件。 它通过在加载FileCleaner时创建的清洁器线程来完成此操作。 如果使用此功能,请记住在Web应用程序结束时终止此线程。
  4. 在配置文件中保留可配置的详细信息,例如上载目录,最大文件大小,阈值大小等,并在未配置的情况下使用合理的默认值。
  5. 根据您的项目要求验证文件的大小,类型和其他详细信息是很好的,例如,您可能希望仅允许上传特定大小和特定类型的图像,例如JPEG,PNG等。

Java Servlet和JSP中的文件上传示例

这是使用Servlet和JSP在Java Web应用程序中上传文件的完整代码。 此文件上传示例需要四个文件:

  1. index.jsp包含HTML内容以设置表单,该表单允许用户选择文件并将其上传到服务器。
  2. FileUploader Servlet,处理文件上传请求并使用Apache FileUpload库解析多部分表单数据
  3. web.xml在Java Web应用程序中配置servlet和JSP。
  4. result.jsp,用于显示文件上传操作的结果。

FileUploadHandler.java

import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;/*** Servlet to handle File upload request from Client* @author Javin Paul*/
public class FileUploadHandler extends HttpServlet {private final String UPLOAD_DIRECTORY = "C:/uploads";@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//process only if its multipart contentif(ServletFileUpload.isMultipartContent(request)){try {List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);for(FileItem item : multiparts){if(!item.isFormField()){String name = new File(item.getName()).getName();item.write( new File(UPLOAD_DIRECTORY + File.separator + name));}}//File uploaded successfullyrequest.setAttribute("message", "File Uploaded Successfully");} catch (Exception ex) {request.setAttribute("message", "File Upload Failed due to " + ex);}          }else{request.setAttribute("message","Sorry this Servlet only handles file upload request");}request.getRequestDispatcher("/result.jsp").forward(request, response);}}

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>File Upload Example in JSP and Servlet - Java web application</title></head><body> <div><h3> Choose File to Upload in Server </h3><form action="upload" method="post" enctype="multipart/form-data"><input type="file" name="file" /><input type="submit" value="upload" /></form>          </div></body>
</html>

result.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>File Upload Example in JSP and Servlet - Java web application</title></head><body> <div id="result"><h3>${requestScope["message"]}</h3></div></body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><servlet><servlet-name>FileUploadHandler</servlet-name><servlet-class>FileUploadHandler</servlet-class></servlet><servlet-mapping><servlet-name>FileUploadHandler</servlet-name><url-pattern>/upload</url-pattern></servlet-mapping><session-config><session-timeout>30</session-timeout></session-config><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

总之,在使用Java Web应用程序上传文件时,请记住三件事

  1. 使用HTML表单输入类型作为文件浏览要上传的文件
  2. 使用表单方法作为发布,使用enctype作为multipart / form-data
  3. 在Servlet中使用Apache commons FileUpload来处理包含多部分数据的HTTP请求。

相依性

为了在任何Web服务器(例如Tomcat)中编译并运行此Java Web应用程序,您需要在WEB-INF lib文件夹中包括以下依赖项JAR。

commons-fileupload-1.2.2.jar

commons-io-2.4.jar

如果您正在使用Maven,则还可以使用以下依赖项:

<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version>
</dependency>
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version>
</dependency>

这就是如何在Java Web应用程序中使用Servlet和JSP上传文件的全部内容。 可以使用JSP,Filter或Servlet编写此文件上载示例,因为这三个都是Java Web应用程序中请求的入口点。 为了简单起见,我已经使用Servlet处理文件上传请求。 通过Servlet 3.0 API,Servlet支持多部分表单数据,您可以使用HttpServletRequest的getPart()方法来处理文件上传。

参考: Servlet和JSP中的文件上传示例– Java Web应用程序教程示例,来自我们JCG合作伙伴 Javin Paul在Javarevisited博客上。

翻译自: https://www.javacodegeeks.com/2013/08/file-upload-example-in-servlet-and-jsp.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20165312-第4周-课上内容补做以及知识点总结

20165312-第4周-课上内容补做以及知识点总结 1、课上内容补做 教材代码完成情况测试p45这题很快就做完了&#xff0c;然后忘记提交了。。就开始做递归。想起来的时候已经过了时间。 public class Example3_7 {public static void main(String args[]) {int sum0,i,j;for(i1;i&l…

JavaScript实现表单的全选,反选,获取值

构思 通过for循环和for in循环来实现&#xff0c;界面效果如下 步骤 全选&#xff1a; 循环给所有的表单设置checked 反选&#xff1a; 循环内判断checked是否为true&#xff0c;如果为true则改为false否则改为true 获取值&#xff1a; 最开始用for取&#xff0c;但是只打印最后…

EJB钝化和激活示例

在本教程中&#xff0c;我们将了解状态Java企业会话Bean中激活和钝化的工作方式。 1.简介 有状态会话Bean通常保存有关特定客户端的信息&#xff0c;并在整个会话中保存该信息。 但是&#xff0c;事实是&#xff0c;客户端会话往往会在相当长的时间内保持活动状态&#xff0c;…

命令模式详解

原文链接:https://www.cnblogs.com/java-my-life/archive/2012/06/01/2526972.html 在阎宏博士的《JAVA与模式》一书中开头是这样描述命令&#xff08;Command&#xff09;模式的&#xff1a; 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Transaction)模…

c mysql5.7_CentOS7下MySQL5.7的三种安装方式详解

操作系统环境&#xff1a;CentOS 7.4最小化安装[rootnode3 src]# cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core)[rootnode3 ~]# uname -r3.10.0-693.5.2.el7.x86_64[rootnode3 ~]#安装版本为&#xff1a;MySQL 5.7.20一、编译安装MySQL5.71、下载源码包[rootno…

Struts2 学习之小白开始

Struts2 基础知识学习总结 Struts2 概述&#xff1a;Struts2 是一个用来开发 MVC 应用程序的框架&#xff0c;他提供了 Web 应用程序开发过程中的一些常见问题的解决方案&#xff0c;比如对于用户输入信息合法性的验证&#xff0c;统一的布局&#xff0c;国际化等&#xff0c;既…

机器学习的数学基础 - 信息论

机器学习的数学基础 - 信息论 信息论 信息论本来是通信中的概念&#xff0c;但是其核心思想“熵”在机器学习中也得到了广泛的应用。比如决策树模型ID3&#xff0c;C4.5中是利用信息增益来划分特征而生成一颗决策树的&#xff0c;而信息增益就是基于这里所说的熵。所以它的重要…

了解ElasticSearch分析器

令人遗憾的是&#xff0c;许多早期的互联网啤酒配方不一定采用易于消化的格式。 也就是说&#xff0c;这些食谱是通常在电子邮件或论坛帖子中最初组成的非结构化的方向和成分混合列表。 因此&#xff0c;尽管很难轻松地将这些配方放入传统的数据存储中&#xff08;表面上看是为…

c++简单程序设计-2

1.验证性实验部分①函数声明和函数定义各自的作用及二者的区别&#xff1a;函数声明就是调用函数之前提示一下有这个函数函数定义就是写一个函数②什么是形参&#xff1f;什么是实参&#xff1f;函数参数和返回值在函数中起到什么作用&#xff1f;函数定义时写的参数叫做形参&a…

Linux虚机安装配置Tomcat

d第一步&#xff1a;下载Tomcat包&#xff0c;网址http://tomcat.apache.org/ 选择tar.gz包下载&#xff0c;并传到虚机中 第二步&#xff1a;解压下载好的Tomcat包 命令&#xff1a;tar -zxvf apache-tomcat-8.0.53.tar.gz 第三步&#xff1a;配置环境变量 进入到Tomcat下bin包…

Nginx安装及配置详解

nginx概述 nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器&#xff1b;同时也是一个IMAP、POP3、SMTP代理服务器&#xff1b;nginx可以作为一个HTTP服务器进行网站的发布处理&#xff0c;另外nginx可以作为反向代理进行负载均衡的实现。 这里主要通过三个方面…

servlet简单概括总结

最近在看java web的相关内容&#xff0c;不管是整体还是细节&#xff0c;要学习的知识有很多&#xff0c;所以有一个好的学习体系非常重要。在阅读学习一些博客和教程中关于servlet的内容后&#xff0c;现将知识体系和自己的总结体会进行梳理&#xff0c;希望在更深入理解的同时…

php超强后门在任意位置创建文件,php大马:.user.ini文件构成的超强PHP后门

这个估计很多同学看了不屑&#xff0c;认为是烂大街的东西了&#xff1a;那么我来个新的吧&#xff1a;。它比用的更广&#xff0c;不管是nginx/apache/IIS&#xff0c;只要是以fastcgi运行的php都可以用这个方法。我的nginx服务器全部是fpm/fastcgi&#xff0c;我的IIS php5.3…

Restlet框架– Hello World示例

Restlet是用于Java平台的轻量级&#xff0c;全面的开源REST框架。 Restlet适用于服务器和客户端Web应用程序。 它支持主要的Internet传输&#xff0c;数据格式和服务描述标准&#xff0c;例如HTTP和HTTPS&#xff0c;SMTP&#xff0c;XML&#xff0c;JSON&#xff0c;Atom和WAD…

Servlet 3的异步Servlet功能

在深入了解什么是异步Servlet之前&#xff0c;让我们尝试了解为什么需要它。 假设我们有一个Servlet&#xff0c;处理时间很长&#xff0c;如下所示。 LongRunningServlet.java package com.journaldev.servlet;import java.io.IOException; import java.io.PrintWriter;impo…

excel的宏与VBA入门——代码调试

直接介绍重点&#xff1a; 常用的操作是导航栏的逐句与断点&#xff1a; 添加断点&#xff1a;调试->切换断点 单步运行&#xff1a;调试->逐句 查看变量的窗口&#xff1a;视图->本地窗口 转载于:https://www.cnblogs.com/jiangbei/p/9561352.html

php访问服务器文件路径,PHP与服务器文件系统的简单交互

1、php.ini中关于文件上传的设置指令2、文件上传过程(1)上传文件提交表单html代码&#xff1a;Adminstration - upoload new filesUpload new filesUpload a file(2)php处理上传文件代码①在php脚本中&#xff0c;需要处理的数据保存在超级变量数组$_FILES中&#xff0c;开启re…

django F和Q 关键字使用

F 的使用&#xff1a; 想给表里每个价格加上一百就要用上F&#xff0c;直接加是不行的。 转载于:https://www.cnblogs.com/wuheng-123/p/9561422.html

【刷题】BZOJ 4176 Lucas的数论

Description 去年的Lucas非常喜欢数论题&#xff0c;但是一年以后的Lucas却不那么喜欢了。 在整理以前的试题时&#xff0c;发现了这样一道题目“求Sigma(f(i)),其中1<i<N”&#xff0c;其中 表示i的约数个数。他现在长大了&#xff0c;题目也变难了。 求如下表达式的值&…

Java 8的新增功能(第I部分-JavaFX)

免责声明&#xff1a;我不为Oracle工作&#xff0c;也不以任何方式代表Oracle。 此功能列表不是官方的。 作为“局外人”&#xff0c;这只是我研究的一部分。 Java 8已在大约两个月前完成功能&#xff0c;并且开发者预览版即将来临&#xff08;两周后&#xff09;。 这篇博客文…