这是一个Web Project

首先是web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!-- Servlet3.0需要Tomcat7和JavaEE6,配置方法详见 -->
<!-- http://blog.csdn.net/jadyer/article/details/9164655 -->
<!-- http://blog.csdn.net/jadyer/article/details/9164737 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

下面是表单输入页index.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<form action="<%=request.getContextPath()%>/upload" method="POST" enctype="multipart/form-data">
<input name="uploadFile" type="file"><br/>
<input type="submit">
<form>

最后是用于处理文件上传的HelloServlet.java

package com.jadyer.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part; /**
* Servlet3.0新特性之便利的文件上传
* @see ------------------------------------------------------------------------------------------------------------------
* @see 注意要使用@MultipartConfig注解标明此Servlet支持文件上传
* @see 否则获取到的javax.servlet.http.Part就是空的,Part.getXxx()就会报告NullPointerException
* @see ------------------------------------------------------------------------------------------------------------------
* @see 关于@MultipartConfig的几个属性
* @see location--->指定存储所上传文件的目录....分以下两种情况
* @see 1)若part.write(fileName)传的参数只有上传的文件名,那么最后文件就会被上传到location目录中
* @see 若此时location所指定的目录不存在,则会报告下面的异常(Tomcat7.x启动时不会报)
* @see java.io.IOException: The temporary upload location [D:\\upload\22] is not valid
* @see 2)若part.write(savePath+"/"+fileName),则无论location是否指定目录,最后文件都会被上传到savePath
* @see 但是,如果此时location所指定的目录不存在,那么也会报告第一种情况中的异常,并导致上传文件失败
* @see 总结:API说location是储存文件的目录,但根据上面两种情况,我感觉location指的是临时文件目录,故不推荐使用
* @see 总结:随后我又查看了Oracle官方文档,发现该属性指的就是临时文件目录
* @see 总结:其官方文档的地址为http://docs.oracle.com/javaee/6/tutorial/doc/gmhal.html
* @see fileSizeThreshold-->设置阈值,达到阈值后会将所上传的文件从临时目录中写到磁盘..单位为byte,默认值是0
* @see maxFileSize-------->允许上传的单个文件最大值,即不限制文件总数及总大小,只限制单个文件..单位为byte,默认值是-1,即无限制
* @see maxRequestSize----->允许上传的文件的最大值,这里指的是一次性上传的所有文件的合计大小..单位也是byte,默认值是-1,即无限制
* @see ------------------------------------------------------------------------------------------------------------------
* @create Jun 24, 2013 3:19:12 PM
* @author 玄玉<http://blog.csdn.net/jadyer>
*/
@WebServlet(urlPatterns="/upload")
@MultipartConfig(fileSizeThreshold=1024*1024*2, maxFileSize=1024*1024*20, maxRequestSize=1024*1024*200)
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = -1812698941752545746L; @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决上传文件的中文乱码问题
req.setCharacterEncoding("UTF-8");
//解决应答给浏览器的中文乱码问题
resp.setCharacterEncoding("UTF-8"); //回显上传结果给浏览器
String uploadResult = null;
PrintWriter out = resp.getWriter();
resp.setContentType("text/html; charset=UTF-8");
try{
//获取上传的文件的Part,下面的操作都是以这个Part为中心的
Part part = req.getPart("uploadFile"); //本例中它的值是form-data; name="uploadFile"; filename="玄玉.png"
String _str = part.getHeader("content-disposition");
//获取上传的文件真实名字(含后缀)
String fileName = _str.substring(_str.lastIndexOf("=")+2, _str.lastIndexOf("\"")); //指定上传的文件的存储目录并确保其存在
String savePath = "D:/upload/";
File savePathFolder = new File(savePath);
if(!savePathFolder.exists()){
savePathFolder.mkdirs();
}
//上传文件(写入磁盘)
part.write(savePath + "/" + fileName);
uploadResult = "上传完毕<br/>上传的文件Part=" + part.getName() + "<br/>上传的文件名称=" + fileName
+ "<br/>上传的文件大小=" + part.getSize() + "<br/>上传的文件类型=" + part.getContentType();
}catch(IllegalStateException ise){
uploadResult = "上传失败,失败原因如下<br/>" + ise.getMessage();
}
out.print(uploadResult);
out.flush();
out.close();
}
}

【Servlet3.0新特性】第03节_文件上传的更多相关文章

  1. Servlet3.0新特性(从注解配置到websocket编程)

    Servlet3.0的出现是servlet史上最大的变革,其中的许多新特性大大的简化了web应用的开发,为广大劳苦的程序员减轻了压力,提高了web开发的效率.主要新特性有以下几个: 引入注解配置 支持 ...

  2. Java基础加强-(注解,动态代理,类加载器,servlet3.0新特性)

    1.   Annotation注解 1.1.  Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annota ...

  3. Servlet3.0新特性

    1 Servlet3.0新特性概述 使用要求:MyEclipse10.0或以上版本,发布到Tomcat7.0或以上版本,创建JavaEE6.0应用! Servlete3.0的主要新特性如下三部分: 使 ...

  4. 【servlet3.0新特性】Annotation注解配置

    servlet3.0新特性Servlet3.0引入的若干重要新特性,包括异步处理.新增的注解支持.可插性支持等等,为读者顺利向新版本过渡扫清障碍.Servlet3.0新特性概述Servlet3.0作为 ...

  5. 使用Servlet3.0新特性asyncSupported=true时抛异常java.lang.IllegalStateException: Not supported

    最近在运用Servlet3.0新特性:异步处理功能的时候出现以下了2个问题: 运行时会抛出以下两种异常: 一月 19, 2014 3:07:07 下午 org.apache.catalina.core ...

  6. Java自学手记——servlet3.0新特性

    servlet3.0出来已经很久了,但市场上尚未普遍应用,servlet3.0有三个比较重要的新特性:使用注解来代替配置文件,异步处理以及上传组件支持. 支持servlet3.0的要求:MyEclip ...

  7. Servlet3.0新特性使用详解

    可插拔的Web框架 几乎所有基于Java的web框架都建立在servlet之上.现今大多数web框架要么通过servlet.要么通过Web.xml插入.利用标注(Annotation)来定义servl ...

  8. Servlet3.0 新特性

    Servlet3.0 的注解 Servlet 允许开发人员采用注解的方式来配置 Servlet.Filter.Listener. Servlet3.0 规范在 javax.servlet.annota ...

  9. javaEE(14)_文件上传下载

    一.文件上传概述 1.实现web开发中的文件上传功能,需完成如下二步操作: •在web页面中添加上传输入项•在servlet中读取上传文件的数据,并保存到本地硬盘中. 2.如何在web页面中添加上传输 ...

随机推荐

  1. Floodlight controller 线程池模型

         官方文档对于ThreadPool的描写叙述是:ThreadPool is a Floodlight module wrapper for a Java's ScheduledExecutor ...

  2. (UML两个汇总)九种图。

    最后总结UML关系,有明确的关系,现在让我们总结一下UML九图..图往往比文字要直观,因此,当我们开发软件.文件必须是不可或缺的人物,. 以下我将这九种图分了一下: 我们还能够将这九种图分为静态图和动 ...

  3. CruiseControl.Net全面实现持续集成

    使用CruiseControl.Net全面实现持续集成   持续集成想必大家很多人都听说过,甚至都实践过,最近我又一次亲历了一次持续集成,现将我的经验分享给大家.关于持续集成的理论在本文概不涉及,本文 ...

  4. WinFrom打开一个窗体关闭另一个窗体

    在写Winform程序的时候,经常会遇到“打开一个新的窗体然后关闭本窗体”之类的问题.最常见的就是登陆界面和主窗体了.而最常见的处理方法就是表单判断正确后 new MainForm().Show(); ...

  5. Function.prototype.toString

    语法:fn.toString(indentation) 改方法返回当前函数源代码的字符串,而且还可对此字符串进行操作,比如: function num(){ }; var str = num.toSt ...

  6. asp.net mvc上传图片案例

    1.放在ajax.BeginForm里,不好使,同asp.net 表单中 fileupload控件不支持ajax差不多吧,如果异步的话可以借助jquery.form.js,很方便 2. //上传文件  ...

  7. {{angular.js 使用技巧}} - 基于验证框架的扩展(w5cValidator)

    开场白: angular.js 是谷歌出的前端js MV*框架,我也是今年做 worktile 的时候才开始接触的,起初技术选型的时候还准备使用 backbone(毕竟很多大公司在使用他,而且也是比较 ...

  8. ASP.NET MVC路由(5)

    ASP.NET MVC路由(五) 前言 前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述.思维导图没法让您看到路由的实 ...

  9. DropDownList和GridView用法

    DropDownList和GridView用法   DropDownList控件和GridView控件在Asp.net中相当常用,以下是控件的解释,有些是常用的,有些是偶尔的,查找.使用.记录,仅此而 ...

  10. Day4:T1小技巧(类似于指针操作)T2搜索+小细节

    Day4:其中有很多小技巧get T1 一直没有听到过像这样的小技巧的略专业名词,有点类似于指针操作,之前有碰到过很多这样的题目 每次都是以不同的形式出现,但是感觉思想还是有点接近的吧(就比如某天有一 ...