86 文件上传基础

87 使用 fileupload 组件

88 文件上传案例_需求

89 文件上传案例_JS代码

90 文件上传案例_约束的可配置性

91 文件上传案例_总体步骤分析

92 文件上传案例_构建 FileUploadBean 集合

93 文件上传案例_完成文件的上传

94 文件上传案例_复习

95 文件上传案例_校验及小结

96 文件下载

97 国际化之Locale

98 国际化之DateFormat

99 国际化之NumberFormat

100 国际化之MessageFormat

101 国际化之ResourceBundle

102 国际化之 fmt 标签及小结

86 文件上传基础

1. 进行文件上传时,表单需要做的准备:

1) 请求方式为post:<form action="uploadServlet" method="post" ...>

2) 使用file的表单域:<input type="file" name="file">

3) 使用multipart/form-data的请求编码方式:<form action="uploadServlet" method="post" enctype="multipart/form-data">

<form action="uploadServlet" method="post" enctype="multipart/form-data">
上传文件:<input type="file" name="file">
<input type="submit" value="submit">
</form>

4) 关于enctype:

 > application/x-www-form-urlencoded:表单enctype 属性的默认值。这种编码方案使用有限的字符集,当使用了非字母和数字时,必须用“%HH”(H代表十六进制数字)。对于大容量的二进制数据或包含非ASCII字符的文本来说,这种编码不能满足要求

 > multipart/form-data:form设定了enctype="multipart/form-data"属性后,表示表单以二进制传输数据

2. 服务端:

1)不能再使用request.getParameter()等方式获取请求信息。获取不到,因为请求的编码方式已经改为multipart/form-data,以二进制的方式来提交请求信息

2)可以使用输入流的方式来获取,但不建议这样做

@WebServlet("/uploadServlet")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
InputStream in = request.getInputStream();
Reader reader = new InputStreamReader(in);
BufferedReader bufferedReader = new BufferedReader(reader); String str = null;
while((str = bufferedReader.readLine()) != null){
System.out.println(str);
}
} }

输入流这样处理

3)具体使用commons-fileupload组件来完成文件的上传操作

87 使用 fileupload 组件

I. 搭建环境:加入

commons-io-2.0.jar

commons-fileupload-1.2.2.jar

II. 基本思想:

  > commons-fileupload 可以解析请求,得到1个FileItem对象组成的list

  > commons-fileupload 把所有的请求信息都解析为FileItem对象,无论是一个一般的文本域还是一个文件于

  > 可以调用FileItem 的isFormField() 方法来判断是一个表单域 或不是表单域(则是一个文件域)

  > 再来进一步获取信息

// Process a regular form field
if (item.isFormField()) {
    String name = item.getFieldName();
    String value = item.getString();
    ...
}
// Process a file upload
if (!item.isFormField()) {
    String fieldName = item.getFieldName();
    String fileName = item.getName();
    String contentType = item.getContentType();
    boolean isInMemory = item.isInMemory();
    long sizeInBytes = item.getSize();
    ...
}
InputStream uploadedStream = item.getInputStream();
    ...
uploadedStream.close();
 

88 文件上传案例_需求

89 文件上传案例_JS代码

90 文件上传案例_约束的可配置性

91 文件上传案例_总体步骤分析

92 文件上传案例_构建 FileUploadBean 集合

93 文件上传案例_完成文件的上传

94 文件上传案例_复习

95 文件上传案例_校验及小结

96 文件下载

97 国际化之Locale

98 国际化之DateFormat

99 国际化之NumberFormat

100 国际化之MessageFormat

101 国际化之ResourceBundle

102 国际化之 ft 标签及小结

java学习笔记-JavaWeb篇四的更多相关文章

  1. java学习笔记-JavaWeb篇一

    JavaWEB篇一 1 Tomcat的安装和配置 2 JavaWeb开发的目录结构 3 使用Eclipse开发JavaWeb项目 4 第一个Servlet程序 5 Servlet 的配置及生命周期方法 ...

  2. java学习笔记-JavaWeb篇二

    JavaWEB篇二 45 HttpSession概述46 HttpSession的生命周期 47 HttpSession常用方法示例48 HttpSessionURL重写 49 HttpSession ...

  3. java学习笔记-JavaWeb篇三

    63 JSTL_表达式操作64 JSTL_流程控制操作 65 JSTL_迭代操作 66 JSTL_URL操作67 JSTL_改写MVC案例68 Filter概述 69 创建HttpFilter 70 ...

  4. Java学习笔记——基础篇

    Tips1:eclipse中会经常用到System.out.println方法,可以先输入syso,然后eclipse就会自动联想出这个语句了!! 学习笔记: *包.权限控制 1.包(package) ...

  5. 【Java学习笔记之三十四】超详解Java多线程基础

    前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...

  6. Java 学习笔记提高篇

    Java笔记(提高篇)整理   主要内容: 面向对象 异常 数组 常用类 集合 IO流 线程 反射 Socket编程 1.  面向对象 1.1包 用来管理Java中的类, 类似文件夹管理文件一样. 因 ...

  7. Java学习笔记(十四)——Java静态工厂

    [前面的话] 每天过的还行,对我来说,只要让自己充实,生活就会是好的. 学习Java工场方法的原因是最近在使用Spring框架做一个系统,其中有一个注入的方法是使用静态工场方法注入,所以学习一下,基础 ...

  8. java学习笔记-基础篇

    Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...

  9. Redis 学习笔记(篇四):整数集合和压缩列表

    整数集合 Redis 中当一个集合(set)中只包含整数,并且元素不多时,底层使用整数集合实现,否则使用字典实现. 那么: 为什么会出现整数集合呢?都使用字典存储不行吗? 整数集合在 Redis 中的 ...

随机推荐

  1. 一步一步实现web程序信息管理系统之一----登陆界面实现

    一步一步实现web程序信息管理系统 在web程序中特别是信息管理系统,登陆功能必须有而且特别重要.每一个学习程序开发或以后工作中,都会遇到实现登陆功能的需求.而登陆功能最终提供给客户或展现给客户的最基 ...

  2. 使用 RamMap 清理内存 How to Use RamMap to Empty System Working Set

    使用 RamMap 清理内存 In this post I want to introduce RamMap by Microsoft. It’s a free tool you can use to ...

  3. create alter rename desc select update delete insert

    conn scott/root;create table student (id number(3), name varchar2(10), sex char(2), sno number(3));a ...

  4. jsonp promise封装

    npm 安装jsonp import originJSONP from 'jsonp' export default function jsonp(url, data, option){ url += ...

  5. C#代码实现在控制台输入密码显示星号

    在控制台输入的内容C#默认按照字符串进行处理,如果直接让用户一次输入完毕就很难实现 显示星号的功能.但是如果让用户一次只能输入一个字符就,在将用户输入的字符替换为星号就可以实现了! 首先,C#中能让用 ...

  6. linux安装memcached

    一:为什么要使用memcached 瓶颈:互联网发展,特别在web2.0兴起之后,传统数据库开始出现瓶颈 1:对数据库的高并发读写 2:对海量数据库的处理(海量数据查找)memcache 是高性能的分 ...

  7. Jquery 保留N位小数,且千位以上用","号隔开

    s:数据Value n:保留小数位数 function jinEFmoney(s, n) { if (s == '' || s == null) return '0.00'; n = n > 0 ...

  8. .Oracle固定执行计划之SQL PROFILE概要文件

    1.  引子Oracle系统为了合理分配和使用系统的资源提出了概要文件的概念.所谓概要文件,就是一份描述如何使用系统的资源(主要是CPU资源)的配置文件.将概要文件赋予某个数据库用户,在用户连接并访问 ...

  9. 关于UIScrollView有些你很难知晓的崩溃情形

    关于UIScrollView有些你很难知晓的崩溃情形 为了实现以下的功能(按钮之间的切换效果): 简短的代码如下: // // RootViewController.m // BUG // // Co ...

  10. oracle 复制表结构 复制表数据 sql 语句

    1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: create table ta ...