servle 3.0 新特性之一 对上传表单的支持
1. 上传
* 上传对表单的要求:
> method="post"
> enctype="multipart/form-data",它的默认值是:application/x-www-form-urlencoded
> <input type="file" name="必须给"/>
* 上传Servlet的使用:
> request.getParameter()不能再用
> request.getInputStream()使用它来获取整个表单的数据!
使用 commons-fileupload 上传文件的步骤:
* commons-fileupload
> 创建工厂
> 解析器
> 使用解析器来解析request对象,得到List<FileItem>
Servlet3.0对上传提供了支持:
* 表单不变
* 在Servlet中不需要再使用commons-fileupload,而是使用Servlet3.0提供的上传组件接口!
上传的步骤:
* 使用request.getPart("字段名"),得到Part实例,
* Part:
> String getContentType():获取上传文件的MIME类型
> String getName():获取表单项的名称,不是文件名称
> String getHeader(String header):获取指定头的值
> long getSize():获取上传文件的大小
> InputStream getInputStream():获取上传文件的内容
> void write(String fileName):把上传文件保存到指定路径下
* 默认Servlet是不支持使用上传组件:需要给Servlet添加一个注解: @MultipartConfig
它没有提供获取上传文件名称的方法:
* 这需要我们自己从Content-Disposition头中截取!
例如:
前端 form上传表单页面:form.jsp
<body> <h1>注册</h1> <form action="<c:url value='/AServlet'/>" method="post" enctype="multipart/form-data"> 用户名: <input type="text" name="username" /> <br /> 简历: <input type="file" name="resume" /> <br /> <input type="submit" value="注册" /> </form> </body> |
服务器端: Aservlet.java
import javax.servlet.http.Part; /* * 默认Servlet是不支持使用上传组件:需要给Servlet添加一个注解: @MultipartConfig */ @WebServlet(urlPatterns="/AServlet") @MultipartConfig public class AServlet extends HttpServlet { @Override public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); /* * 1. getParameter()方法可以使用了!!! */ String username = req.getParameter("username");//可以使用了!!! /* * 2. 获取文件表单字段,对应的Part对象 */ Part part = req.getPart("resume"); /* * 3. 从Part中获取需要的数据 */ // 获取上传文件的MIME类型 System.out.println(part.getContentType()); // 获取上传文件的字节数 System.out.println(part.getSize()); // 获取文件字段名称 System.out.println(part.getName()); // 获取头,这个头中包含了上传文件的名称 System.out.println(part.getHeader("Content-Disposition")); // 保存上传文件 part.write("C:/xxx.jpg"); // 截取上传文件名称 String filename = part.getHeader("Content-Disposition"); int start = filename.lastIndexOf("filename=\"") + 10; int end = filename.length() - 1; filename = filename.substring(start, end); System.out.println(filename); } } |
servle 3.0 新特性之一 对上传表单的支持的更多相关文章
- android6.0、7.0、8.0新特性总结之开发应用时加以考虑的一些主要变更。
android6.0 参考一:简书Android 6.0 新特性详解 参考二:关于Android6.0以上系统的权限问题 参考三:值得你关注的Android6.0上的重要变化(一) 参考四:值得你关注 ...
- 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作
原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...
- 【Servlet3.0新特性】第03节_文件上传
这是一个Web Project 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web- ...
- Servlet 3.0 新特性
Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发 ...
- Servlet 3.0 新特性详解
转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/#major3 Servlet 是 Java EE 规范体系的重要组成部分,也是 ...
- 【转帖】Servlet 3.0 新特性详解
http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 ...
- Servlet 3.0 新特性详解 (转载)
原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Jav ...
- Java Servlet 3.0 新特性
Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若 ...
- Servlet 3.0 新特性概述
Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若 ...
随机推荐
- VS2017、netcore版本更新升级
VS2017 剩下的就是下一步了. netcore 访问:https://www.microsoft.com/net/download/archives 找到对应版本(最新版本) 下载安装就可以了 装 ...
- 没有博士学位,照样玩转TensorFlow深度学习
教程 | 没有博士学位,照样玩转TensorFlow深度学习 机器之心2017-01-24 12:32:22 程序设计 谷歌 操作系统 阅读(362)评论(0) 选自Codelabs 机器之心编译 参 ...
- [na]esxi6.5的vmware安装
安装exsi6.5(最新的软件见评论区) ,安装 ,激活(可选) ,浏览器登录(.5好像没客户端了,所以就用浏览器,挺方便的) 安装包和key包在网盘里: 链接:https://pan.baidu.c ...
- Android开发系列之创建自定义控件
Android开发过程中我们经常需要定义自己的控件,一方面基于复用的角度考虑,一方面也是基于逻辑处理思维的角度考虑.在这篇博客里面,笔者想要介绍.总结几种Android自定义控件的方法,如果有什么不对 ...
- CONFIG_*头文件的配置
通常在kernel或uboot中, 有很多以CONFIG_*开头的宏配置选项,并且保存在相应的头文件中,那么这些CONFIG_*是怎么生成的呢? 在uboot的顶层Makefile中,有这么一项: 此 ...
- maven项目工程报错:cannot be resolved to a type
1.在本地仓库中,搜索“_maven.repositories”所有匹配项,并彻底删除 2.然后再删除“.lastUpdated”所有匹配项 3.最后再重新在eclipse中执行操作:update d ...
- (转载)Unity中解析ini配置文件----INIParser
大家好,我是孙广东. 转载请注明出处:http://blog.csdn.net/u010019717 更全的内容请看我的游戏蛮牛地址:http://www.unitymanual.com/spac ...
- caffe net 可视化工具,,层特征可视化
1.只用网络在线结构绘制可视化网络模型 http://ethereon.github.io/netscope/#/editor 将对应的网络输入到里面,然后按shift+enter即可查看对应的网络结 ...
- android JNI常用添加log方法
android JNI 打log方法 添加库支持 LOCAL_LDLIBS :=-llog -landroid 包含头文件 #include <android/log.h> #define ...
- Android无线测试之—UiAutomator UiDevice API介绍四
拖拽与滑动 一.概念介绍: 1)拖拽:将组建从一个坐标移动到另一个坐标 2)移动:从一二坐标点移动到另一个坐标点 3)步长:从一点滑动到另一点使用的时间 二.拖拽与滑动的相关API: 返回值 方法名 ...