热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

javaweb中的servlet3upload上传文件实践

这篇文章主要介绍了servlet3upload上传文件实践,非常不错,具有参考借鉴价值,需要的朋友可以参考下

Servlet 3.0之前的版本中,文件上传是个挺让人头疼的问题,虽然有第三方框架来实现,但使用也还是比较麻烦,在Servlet 3.0中,这些问题将不复存在,Servlet 3.0对文件上传提供了直接支持,配合Servlet 3.0中基于Annotations的配置,大大简化上传件的操作。

一、javax.servlet.http中Part接口

public interface Part

要上传文件必须使用multipart/form-data作为request body。

版本:

Servlet 3.1 - Apache Tomcat 8.0.33

二、方法概述

方法 描述
void delete() 删除磁盘上关于此part对象的缓存文件
java.lang.String getContentType() 获取浏览器传递过来的ContentType
java.lang.String getHeader(java.lang.String name) 获取浏览器传递过来的特定的header,参数是header的名字
java.util.Collection getHeaderNames() 获取传递给这个part的所有header的名字
java.util.Collection getHeaders(java.lang.String name) 获取该name对应的所有的value
java.io.InputStream getInputStream() 获取InputStream对象,可以用于获取上传的文件的内容
java.lang.String getName() 获取对应于此part的multipart表单的名字
long getSize() 获取此part的大小,如果是上传文件的话,表示上传的文件大小
java.lang.String getSubmittedFileName() 如果此part表示上传文件的话,返回上传的文件的名字
void write(java.lang.String fileName) 一个比较方便的方法,将上传的文件写入磁盘中

三、@MultipartConfig注解

用于处理文件上传的servlet必须使用@MultipartConfig注解,@MultipartConfig注解有4个属性。

属性 类型 概述
fileSizeThreshold int 文件大小阀值,当文件大小大于此值时,文件将被写入磁盘
location String 服务器端目录,服务器把客户端上传的文件默认存入此目录下
maxFileSize long 允许上传的文件的最大大小,默认是-1,表示没有限制
maxRequestSize long 限制该multipart/form-data请求的最大数据量,默认是-1,表示没有限制

四、处理文件上传的servlet

//此处的@MultipartConfig注解给出了文件存放的地址和允许上传的文件最大值
@MultipartConfig(location="F:/", maxFileSize = 1024*1024*20)
@WebServlet(name="UploadFileTest", urlPatterns="/upload")
public class UploadFileTest extends HttpServlet{
 private static final long serialVersiOnUID= 1L;
 //使用了commons-logging和log4j来处理日志
 private static Log log = LogFactory.getLog(UploadFileTest.class);
 //获取注解中设置的值
 private static MultipartConfig cOnfig= UploadFileTest.class.getAnnotation(MultipartConfig.class);
 public UploadFileTest() {
 // TODO Auto-generated constructor stub
 }
 public void doPost(HttpServletRequest request,
  HttpServletResponse response) throws ServletException, IOException{
 request.setCharacterEncoding("UTF-8");
 Part part = null;
 try{
  part = request.getPart("file");//获取part用于处理上传的文件
 }catch(IllegalStateException ise){
 //上传的单个文件超出maxFileSize或者上传的总的数据量超出maxRequestSize时会抛出此异常
  if(config.maxRequestSize() == -1L)//如果注解中没设置此项,那就是单个文件超出限制
  log.error("单个文件超限");
  else if(config.maxFileSize() == -1L)//如果注解中没有设置单个文件最大限制,那就是总数据量超限。
  log.error("总数据量超限");
  else
  log.error("Error");
 }
 if(part == null)
  return;
 String fileName = part.getSubmittedFileName();//获得上传的文件名,没有判断用户没有选择文件直接提交的情况,没有判断上传文件失败的情况
 log.info("contentType : " + part.getContentType());
 log.info("fileName : " + fileName);
 log.info("fileSize : " + part.getSize());
 log.info("header names :");
 for(String headerName : part.getHeaderNames())
  log.info(headerName + " : " + part.getHeader(headerName));
 //为了避免文件重名,将时间组合到了文件名中。实际项目中可以考虑使用用户主键或者生成一个唯一的ID来组合文件名。
 String saveName = System.currentTimeMillis() + fileName;
 part.write(saveName);//将上传的文件保存到磁盘,默认是注解中location的相对地址,也可以传入一个绝对路径
 response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  String docType =
  "\n";
  out.println(docType +
   "\n" +
   "\n" +
   "\n" +
   "

Upload File

\n" + "

上传文件" + fileName+ "成功," + "可以到项目目录的F:\\下查看,保存的文件名是:"+ saveName+"

\n" + ""); } }

五、前端html页面









 
选择要上传的文件:

servlet使用了注解的方式注册,所以不再需要使用web.xml文件。新建一个web工程,就使用这两个文件就可以部署到tomcat了,要访问的url是http://localhost:8080/UploadFileTest/UploadFile.html

总结

以上所述是小编给大家介绍的servlet3 upload上传文件实践,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • 本文将详细介绍通过CAS(Central Authentication Service)实现单点登录的原理和步骤。CAS由耶鲁大学开发,旨在为多应用系统提供统一的身份认证服务。文中不仅涵盖了CAS的基本架构,还提供了具体的配置实例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 近期我们开发了一款包含天气预报功能的万年历应用,为了满足这一需求,团队花费数日时间精心打造并测试了一个稳定可靠的天气API接口,现正式对外开放。 ... [详细]
  • 深入解析:OpenShift Origin环境下的Kubernetes Spark Operator
    本文探讨了如何在OpenShift Origin平台上利用Kubernetes Spark Operator来管理和部署Apache Spark集群与应用。作为Radanalytics.io项目的一部分,这一开源工具为大数据处理提供了强大的支持。 ... [详细]
  • 深入解析BookKeeper的设计与应用场景
    本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ... [详细]
  • 本文详细介绍了如何正确安装Java EE SDK,并解决在安装过程中可能遇到的问题,特别是关于servlet代码在Apache Tomcat 10中无法运行的情况。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • Symfony是一个功能强大的PHP框架,以其依赖注入(DI)特性著称。许多流行的PHP框架如Drupal和Laravel的核心组件都基于Symfony构建。本文将详细介绍Symfony的安装方法及其基本使用。 ... [详细]
  • 深入解析ESFramework中的AgileTcp组件
    本文详细介绍了ESFramework框架中AgileTcp组件的设计与实现。AgileTcp是ESFramework提供的ITcp接口的高效实现,旨在优化TCP通信的性能和结构清晰度。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 本文探讨了如何在Hive(基于Hadoop)环境中编写类似SQL的语句,以去除字段中的空格。特别是在处理邮政编码等数据时,去除特定位置的空格是常见的需求。 ... [详细]
  • MySQL Debug 模式的实现与应用
    本文详细介绍了如何启用和使用 MySQL 的调试模式,包括编译选项、环境变量配置以及调试信息的解析。通过实际案例展示了如何利用调试模式解决客户端无法连接服务器的问题。 ... [详细]
author-avatar
lovely月夜静悄悄知_302
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有