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 新特性之一 对上传表单的支持的更多相关文章

  1. android6.0、7.0、8.0新特性总结之开发应用时加以考虑的一些主要变更。

    android6.0 参考一:简书Android 6.0 新特性详解 参考二:关于Android6.0以上系统的权限问题 参考三:值得你关注的Android6.0上的重要变化(一) 参考四:值得你关注 ...

  2. 返璞归真 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 上传文件, ...

  3. 【Servlet3.0新特性】第03节_文件上传

    这是一个Web Project 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web- ...

  4. Servlet 3.0 新特性

    Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发 ...

  5. Servlet 3.0 新特性详解

    转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/#major3 Servlet 是 Java EE 规范体系的重要组成部分,也是 ...

  6. 【转帖】Servlet 3.0 新特性详解

    http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 ...

  7. Servlet 3.0 新特性详解 (转载)

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性概述 Servlet 3.0 作为 Jav ...

  8. Java Servlet 3.0 新特性

    Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若 ...

  9. Servlet 3.0 新特性概述

    Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若 ...

随机推荐

  1. 应用phpexcel导出excel文件后打不开的问题解决方法

    应用phpexcel导出excel文件后打不开,提示“文件格式或文件扩展名无效,请确定文件未损坏,并且文件扩展名与文件的格式匹配”. 试了以下方法: 1.首先区分文件格式是2003,还是2007. 参 ...

  2. 【精】iOS GCD 具体解释

    一.介绍 1.什么是GCD? Grand Central Dispatch.是苹果公司开发的一套多核编程的底层API. GCD首次公布在Mac OS X 10.6,iOS4及以上也可用.GCD存在于l ...

  3. 字符串算法之 AC自己主动机

    近期一直在学习字符串之类的算法,感觉BF算法,尽管非常easy理解,可是easy超时,全部就想学习其它的一些字符串算法来提高一下,近期学习了一下AC自己主动机.尽管感觉有所收获,可是还是有些朦胧的感觉 ...

  4. Centos RSA 登录

    创建密钥 ssh-keygen -t rsa 1.用户目录下新建.ssh/authorized_keys mkdir .ssh  #创建隐藏目录 #修改文件访问权限 chmod 700 .ssh cd ...

  5. 解决js下跳转无referer的方法

    HTTP Header referer这玩意主要是告诉人们我是从哪儿来的,就是告诉人家我是从哪个页面过来的,可以用于统计访问本网站的用户来源,也可以用来防盗链.获取这个东西最好的方式是js,如果在服务 ...

  6. 红茶一杯话Binder (传输机制篇_下)

    红茶一杯话Binder (传输机制篇_下) 侯 亮 1 事务的传递和处理 从IPCThreadState的角度看,它的transact()函数是通过向binder驱动发出BC_TRANSACTION语 ...

  7. 文件操作接口的系统调用分析---SYSCALL_DEFINEx

    linux/arch/arm/kernel/call.S ... CALL(sys_read) CALL(sys_write) CALL(sys_open) CALL(sys_close) ...   ...

  8. AES中几种加密模式的区别:ECB、CBC、CFB、OFB、CTR

    AES: aes是基于数据块的加密方式,也就是说,每次处理的数据时一块(16字节),当数据不是16字节的倍数时填充,这就是所谓的分组密码(区别于基于比特位的流密码),16字节是分组长度 分组加密的几种 ...

  9. 大端BigEndian、小端LittleEndian与字符集编码

    BigEndian(大端):低字节在高内存地址 LittleEndian(小端):低字节在低内存地址 也就是看低字节在高内存地址还是低内存地址,也就是看低字节在前还是高字节在前,低字节在前自然是小端, ...

  10. eclipse 打开的时候弹出 'Building workspace' has encountered a problem. Errors occurred during

    Eclipse 里面project->Build Automatically上的对勾去掉