这是一个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;@Overrideprotected 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();}
}

转载于:https://www.cnblogs.com/jiangu66/p/3155559.html

【Servlet3.0新特性】第03节_文件上传相关推荐

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

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

  2. servlet3.0新特性_查看Servlet 3.0的新增功能

    servlet3.0新特性 随着JEE6规范上市,在企业应用程序领域中如何开发应用程序方面发生了一些重大变化. 在本文中,我将介绍有关Web应用程序开发的一些更改. 首先,请告别web.xml部署描述 ...

  3. Java-Web 基础加强之泛型、注解和Servlet3.0新特性

    目录 一.泛型 1.泛型类 2.泛型方法 3.继承(实现)泛型类(接口) 4.通配符 (1)通配符概述 (2)通配符的缺点 (3)通配符的限制 (4)带有下边界的通配符 (5)带有下边界的通配符 (6 ...

  4. iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门

    iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门 文章目录 iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门 PDF报表入门 3 ...

  5. 利用mysql实现上传和下载_文件上传表单 上传文件的细节 文件上传下载和数据库结合...

    1 文件上传表单 1)上传文件的本质是文本复制的过程 2)技术层面,在Java中一定会用到IO操作,主要以二进制方式读写 3)传统方式下,对于上传文件字段不同的浏览器有着不同的解析方式,例如: IE6 ...

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

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

  7. Servlet3.0新特性全解

    tomcat 7以上的版本都支持Servlet 3.0 Servlet 3.0 新增特性 注解支持:Servlet.Filter.Listener无需在web.xml中进行配置,可以通过对应注解进行配 ...

  8. nginx 上传文件漏洞_文件上传及解析漏洞

    注:本文仅供学习参考 文件上传定义: 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等. 这种攻击方式是最为直接和有效的, ...

  9. Struts2_3_国际化处理_自定义拦截器_文件上传及下载_OGNL

    Struts2国际化处理 浏览器根据当前的语言环境自动查找对应的语言环境资源包, 使jsp显示合适的语言数据环境 Struts2实现国际化, 动作类必须继承ActionSupport 创建资源包 资源 ...

最新文章

  1. 深度学习两大基础Tricks:Dropout和BN详解
  2. cpu飙升 死循环_记一次CPU飙升BUG
  3. 0909 初识操作系统
  4. golang 多行字符串 字符串太长分行写
  5. c语言重定义不同的基类型_简述usb连接器输出类型定义和不同环境下的用法
  6. Nexys4DDR手写数字图像识别
  7. 图片动画效果html5,8个实用炫酷的HTML5图片动画应用
  8. php 系统找不到指定的路径.,PHP网站(windows2003服务器 IIS6)提示:系统找不到指定的路径。...
  9. 用1000W破解字典破解pdf文档(提供1000W破解字典)
  10. 【蓝桥杯】题目分类汇总
  11. 2018-1-24(转)游戏策划案也有“套路”?
  12. 永中集成Office:既是创新产品,也是战略储备
  13. Java8 stream toMap 解决 key 冲突
  14. 火狐浏览器下载网页视频
  15. 水星mw300r虚拟服务器,水星MW300R无线路由器如何设置【组图】
  16. Admob设置Android设备为测试设备(2020年5月7日亲测有效)
  17. 服务器dns被劫持如何修复,电脑DNS被劫持如何解决?电脑DNS被劫持的解决方法
  18. MySQL数据库实操教程(18)——数据库事务及其隔离级别
  19. busybox的编译使用及安装
  20. Nervos CKB初体验

热门文章

  1. 【阿里云MPS】MPS(原MTS)概述
  2. 【CentOS】EOF使用
  3. Java String.split() 特殊字符处理
  4. 【日期、时间】javascript字符串转日期类型
  5. 【ntp】虚拟机时间莫名异常
  6. linux decode函数,Oracle 中 decode 函数用法
  7. win10弹不出密码输入框_电脑互访提示输入网络密码,怎么办?
  8. 人工智能之语音识别技术(三)
  9. Windows 10全新界面要来了:焕然一新!
  10. 当你装不上Python外部包时,试试这个网站