热门标签 | 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上传文件实践,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
    在Java Web开发中,JSP(Java Server Pages)是一种重要的技术,用于构建动态网页。本文详细介绍了JSP的三大指令、九大隐式对象以及动作标签。三大指令包括页面指令、包含指令和标签库指令,它们分别用于设置页面属性、引入其他文件和定义自定义标签。九大隐式对象则涵盖了请求、响应、会话、应用上下文等关键组件,为开发者提供了便捷的操作接口。动作标签则通过预定义的动作来简化页面逻辑,提高开发效率。这些内容对于理解和掌握JSP技术具有重要意义。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • 利用Apache构建高效稳定的Web服务器环境
    本文详细介绍了如何利用Apache构建高效稳定的Web服务器环境。首先,概述了Apache服务器的基本概念及其安装步骤,并深入探讨了相关配置文件的设置方法。接着,通过具体的实验环境示例,展示了服务端(域名:zhangpp63.cn,IP地址:192.168.1.63)和客户端的配置过程,确保读者能够全面理解并实际应用这些技术。此外,还提供了一些优化建议,以提高服务器的性能和稳定性。 ... [详细]
  • 在Linux环境下,本文详细探讨了Apache服务器中CGI技术的应用与实现。首先,通过使用yum包管理器安装了必要的软件,如PHP。安装完成后,对Apache服务器进行了配置,确保CGI功能正常运行。此外,还介绍了如何编写和调试CGI脚本,以及如何在实际环境中部署这些脚本以提供动态网页内容。实验结果表明,通过合理的配置和优化,Apache服务器能够高效地支持CGI应用程序,为用户提供丰富的交互体验。 ... [详细]
  • HTTP协议作为互联网通信的基础,其重要性不言而喻。相比JDK自带的URLConnection,HttpClient不仅提升了易用性和灵活性,还在性能、稳定性和安全性方面进行了显著优化。本文将深入解析HttpClient的使用方法与技巧,帮助开发者更好地掌握这一强大的工具。 ... [详细]
  • 如何利用Apache与Nginx高效实现动静态内容分离
    如何利用Apache与Nginx高效实现动静态内容分离 ... [详细]
  • 【Linux】CentOS 7 远程连接指南:高效安全的远程管理方法
    在 CentOS 7 中实现高效且安全的远程管理,本文详细介绍了如何检查和安装配置 OpenSSH。首先,通过 `yum list installed` 命令检查系统是否已安装 OpenSSH,若未安装,则使用 `yum install openssh-server` 进行安装。随后,配置 SSH 服务以确保其安全性和稳定性,包括修改默认端口、禁用 root 登录等关键步骤。此外,还提供了常见问题的解决方案,帮助用户顺利进行远程连接。 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • Spring Boot 和 Spring Cloud 是 Spring 生态系统中的重要组成部分,各自具有独特的特性和应用场景。Spring Boot 通过简化配置和自动配置机制,显著提高了开发和部署效率,减少了传统 Spring 应用中繁琐的 XML 配置文件需求。而 Spring Cloud 则在此基础上进一步提供了分布式系统的解决方案,包括服务发现、配置管理、断路器等高级功能,适用于微服务架构的构建和管理。本文将深入探讨两者的核心差异,并分析其各自的最佳应用场景。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握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社区 版权所有