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. unity, windows: Unhandled Exception: System.UnauthorizedAccessException: Access to the path "XXX\Temp\Assembly-CSharp.dll.mdb" is denied

    的windows上使用unity,修改过脚本或inspector中的数值后运行编辑器报错: Unhandled Exception: System.UnauthorizedAccessExceptio ...

  2. Codeforces Round #240 (Div. 1)B---Mashmokh and ACM(水dp)

    Mashmokh's boss, Bimokh, didn't like Mashmokh. So he fired him. Mashmokh decided to go to university ...

  3. atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29

    atitit.guice3 绑定方式打总结生成非单例对象toInstance toProvider区别 v2 pb29 1. 三 绑定方式的介绍1 2. To接口,链式绑定,用的最多的1 3. toC ...

  4. gitlab 把或名改成IP

    [root@GitLab assets]# cat /etc/gitlab/gitlab.rb # Change the external_url to the address your users ...

  5. 183.Wood Cut【hard】

    183.Wood Cut[hard] Given n pieces of wood with length L[i] (integer array). Cut them into small piec ...

  6. __attribute__系列之介绍篇

    1.什么是__attribute__? __attribute__机制是GNU C的一大特色,它可以设置函数属性.变量属性和类型属性等.可以通过它们向编译器提供更多数据,帮助编译器执行优化等. 2._ ...

  7. spring boot 多层级mapper

    mapper目录结构:   mapper ----dev -------produce   在 application.properties 文件中配置 mybatis.mapper-location ...

  8. Java联网技术之一TCP socket

    最近突然对java网络编程编程这一块非常感兴趣,于是找了很多资料,一点点的尝试,下面是自己的一点小见解,不喜勿喷,欢迎指正. 首先说说客户端和服务器端吧, 如果是网页的话,客户端通过网页的链接对服务器 ...

  9. mongodb更新器

    Name Description $inc Increments the value of the field by the specified amount. $mul Multiplies the ...

  10. 利用ascx输出knockoutjs的模板

    项目里面的UI模板在一个页面中有2K多行了.需要增加新的UI样式.问题来了.加上js代码,几乎是变成了不可维护的状态.增加和修改都需要用ctrl+f的方式找到对应的模板,然后进行处理.很容易出错.突然 ...