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. Android startActivities()的使用

    startActivities()和startActivity类似,也是界面跳转: Intent[] intents = new Intent[2]; intents[0] = new Intent( ...

  2. Hive 正则匹配函数

    正则匹配字符解释: ^ 表示开头 $ 表示结尾 . 表示任意字符 * 表示任意多个 regexp_extract函数 语法:    regexp_extract(string subject,  st ...

  3. webpack-dev-server 无法通过ip访问的问题

    使用Vue-cli生成的webpack脚手架,之前一直是可以通过本地ip + 端口来访问的.今天忽然不可以,百度一下才知道缺少了host参数. 打开package.json.在.scripts.dev ...

  4. 一些移动端的ui框架

    一些移动端的ui框架 https://jqweui.cn/resource

  5. YUV格式详细解释与FFMPEG的关系

    YUV主要的采样格式 主要的采样格式有YCbCr 4:2:0.YCbCr 4:2:2.YCbCr 4:1:1和 YCbCr 4:4:4.其中YCbCr 4:1:1 比较常用,其含义为:每个点保存一个 ...

  6. C++语言基础(12)-虚函数

    一.虚函数使用的注意事项 1.只需要在虚函数的声明处加上 virtual 关键字,函数定义处可以加也可以不加. 2.为了方便,你可以只将基类中的函数声明为虚函数,这样所有子类中具有遮蔽(覆盖)关系的同 ...

  7. C++语言基础(9)-继承

    一.继承的基本语法 #include<iostream> using namespace std; //基类 Pelple class People{ public: void setna ...

  8. c++ 使用boost regex库 总结

    用java的时候觉得挺折腾,回头来弄c++才知道什么叫折腾...汗... 首先参考我写的这篇文章:http://www.cnblogs.com/qrlozte/p/4100892.html 我从sou ...

  9. Java并发编程(十三)同步容器类

    同步容器类 Vector.HashTable,我用的很少:Vecotr的实现和ArrayList挺接近的,不同的是Vector中很多的方法都用synchronized进行了同步.在不强调线程安全地时候 ...

  10. JAVA自定义注解 ------ Annotation

    日常开发工作中,合理的使用注解,可以简化代码编写以及使代码结构更加简单,下面记录下,JAVA自定义注解的开发过程. 定义注解声明类. 编写注解处理器(主要起作用部分). 使用注解. 相关知识点介绍, ...