`
heshifk
  • 浏览: 10763 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Servlet 3.0 新特性 实现文件上传

阅读更多
     今天练习servlet的时候,接近servlet章节的末尾时,发现一个不需要另外添加组件就可以实现文件上传的方法,这也是servlet3.0的新特性。按着书上的代码,敲了一遍,已运行,报错,java.lang.NullPointerException。回过头来检查下代码,没发现有错误的地方。没办法,只要需求百度的帮助了。然后就发现了下面这篇文章。
http://www.nqwang.com/2014/0405/91956.html

在Servlet3.0之前,处理上传文件的操作一直是让开发者头疼的问题,因为Servlet本身没有对此提供直接的支持,需要使用第三方框架来实现,而且使用起来也不够简单。
Servlet3.0提供了对文件上传的支持,通过@MultipartConfig标注和HttpServletRequest的两个新方法getPart()和getParts(),开发者能够很容易实现文件的上传操作。
@MultipartConfig标注主要是为了辅助Servlet3.0中HttpServletRequest提供的对上传文件的支持。该标注写在Servlet类的声明之前,一表示该Servlet希望处理的请求时multipart/form-data类型的。另外,该标注还提供了若干属性用于简化对上传文件的处理。
@MultipartConfig标注属性
fileSizeThershold int型 是(可选) 描述:当前数据量大于该值时,内容将被写入文件。
location String型 是(可选) 描述:存放生成文件的地址
maxFileSize long型 是(可选) 描述:允许上传的文件最大值,默认为-1,表示没有限制
maxRequestSize long型 是(可选) 描述:针对 multipart/form-data 请求的最大数量,默认为-1,表示没有限制

<!--index.html文件部分代码--> <form action="/HelloWorld/UpLoad" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" name="upload" value="上传"> </form>
/*UpLoad.java为上传文件的Servlet类*/ package javaee.servlet; import ………… //设置访问活着调用这个Servlet的路径 @WebServlet("/UpLoad") //说明该Servlet处理的是multipart/form-data类型的请求 @MultipartConfig public class UpLoad extends HttpServlet{ private static final long serialVersionUID = 1L; public UpLoad(){ super(); } protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ this.doPost(request, response); } protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ //说明输入的请求信息采用UTF-8编码方式 request.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); //Servlet3.0中新引入的方法,用来处理multipart/form-data类型编码的表单 Part part = request.getPart("file"); //获取HTTP头信息headerInfo=(form-data; name="file" filename="文件名") String headerInfo = part.getHeader("content-disposition"); //从HTTP头信息中获取文件名fileName=(文件名) String fileName = headerInfo.substring(headerInfo.lastIndexOf("=") + 2, headerInfo.length() - 1); //获得存储上传文件的文件夹路径 String fileSavingFolder = this.getServletContext().getRealPath("/UpLoad"); //获得存储上传文件的完整路径(文件夹路径+文件名) //文件夹位置固定,文件夹采用与上传文件的原始名字相同 String fileSavingPath = fileSavingFolder + File.separator + fileName; //如果存储上传文件的文件夹不存在,则创建文件夹 File f = new File(fileSavingFolder + File.separator); if(!f.exists()){ f.mkdirs(); } //将上传的文件内容写入服务器文件中 part.write(fileSavingPath); //输出上传成功信息 out.println("文件上传成功~!"); } }
/DownLoadjava为下载文件的Servlet类*/ package javaee.servlet; import ………… @WebServlet("/DownLoad") public class DownLoad extends HttpServlet{ private static final long serialVersionUID = 1L; public DownLoad(){ super(); } protected void doGet(HttpServletRequest request ,HttpServletResponse response) throws ServletException,IOException{ this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ try{ //服务器相对路径 String filepath = "WEB-INF/web.xml"; //服务器绝对路径 String fullFilePath = getServletContext().getRealPath(filepath); System.out.println(fullFilePath); /*打开文件,创建File类型的文件对象*/ File file = new File(fullFilePath); /*如果文件存在*/ if(file.exists()){ System.out.println("文件存在"); /*获得文件名,并采用UTF-8编码方式进行编码,以解决中文问题*/ String filename = URLEncoder.encode(file.getName(), "UTF-8"); System.out.println(filename); /*重置response对象*/ response.reset(); //设置文件的类型,xml文件采用text/xml类型,详见MIME类型的说明 response.setContentType("text/xml"); //设置HTTP头信息中内容 response.addHeader("Content-Disposition","attachment:filename=\"" + filename + "\"" ); //设置文件的长度 int fileLength = (int)file.length(); System.out.println(fileLength); response.setContentLength(fileLength); /*如果文件长度大于0*/ if(fileLength!=0){ //创建输入流 InputStream inStream = new FileInputStream(file); byte[] buf = new byte[4096]; //创建输出流 ServletOutputStream servletOS = response.getOutputStream(); int readLength; //读取文件内容并写到response的输出流当中 while(((readLength = inStream.read(buf))!=-1)){ servletOS.write(buf, 0, readLength); } //关闭输入流 inStream.close(); //刷新输出缓冲 servletOS.flush(); //关闭输出流 servletOS.close(); } }else { System.out.println("文件不存在~!"); PrintWriter out = response.getWriter(); out.println("文件 \"" + fullFilePath + "\" 不存在"); } }catch(Exception e){ System.out.println(e); } } }
问题确实是没有添加@MultipartConfig,然后添加@MultipartConfig之后,在回过头来细细的看了下这篇文章。
分享到:
评论

相关推荐

    Servlet 3.0新特性——文件上传接口

    NULL 博文链接:https://pisces-java.iteye.com/blog/723125

    Servlet3.0新特性解析

    Servlet3.0新特性解析_03_Servlet3.0监听器、过滤器实现方式详解及Servlet的动态注册剖析

    servlet3.0新特性源代码

    * servlet3.0的文件上传 * @date:2012-5-21 *在创建项目的时候首先添加Tomcat7.x的支持,然后把apache-tomcat-7.0.27\conf\web.xml拷贝到项目WEB-INF目录下 *把之前的web.xml覆盖.. 配置留下 &lt;?xml version...

    Servlet3.0新特性

    Servlet3.0新特性解析_04_使用Servlet3.0实现文件上传及Part接口与MultiConfig注解深度解析

    Servlet3.0 新特性

    需要在tomcat下运行 博文链接:https://inotgaoshou.iteye.com/blog/975116

    Servlet3.0新特性解析01

    Servlet3.0新特性解析_01_Servlet3.0新特性深度解析、Servlet注解详解

    servlet 3.0新增功能详解

    Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础...本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为读者顺利向新版本过渡扫清障碍

    servlet3.0文件上传 01.zip

    本工程用于借助Servlet3.0实现文件上传 本工程编码方式:UTF-8 注意: 1、在上传文件前请在计算机C盘新建一个名为“upload”的文件夹,否则会出现如下异常:java.io.IOException: The temporary upload location [C...

    Servlet3.0

    Servlet3.0新特性解析_02_Servlet3.0的异步支持与反向Ajax深入详解Servlet3.0新特性解析_02_Servlet3.0的异步支持与反向Ajax深入详解

    Servlet3.0参考手册

    servlet3.0使用手册,这里面有详细的api参考,使用很方便

    Servlet3.0特性详解

    非常好的学习Servlet3.0资料。特此共享。

    Servlet 3.0 源码文件

    Servlet 3.0 源码文件,可以在myeclipse中查看servlet的代码,方便编程

    java上传文件(servlet3.0)

    java上传文件(servlet3.0)

    Servlet3.0_新特性

    Servlet3.0_新特性详解

    基于servlet3.0手写springmvc

    基于servlet3.0手写springmvc,实现了IOC和处理器映射器以及处理器映射器功能。

    servlet3.0.jar下载

    servlet3.0jar下载,非常好用的控制器工具类包,servlet3.0jar下载,非常好用的控制器工具类包,

    servlet3.0-demo

    servlet3.0-demo, 上传文件demo,基于注解开发

    JavaEE 6 Servlet 3.0 中的新特性

    JavaEE 6Servlet 3.0 中的新特性 • 易于开发和部署 • 模块化web.xml • 动态配置 • 异步Servlet • Servlet 3.0 — 易于开发 – 主要关注点 • 增强了API 以便使用SE 5 中新的语言特性 – 例如:批注、泛型...

    servlet3.0推送聊天室

    用servlet3.0异步技术,实现推送信息至客户端的聊天室

    servlet3.0实现文件上传——demo1.zip

    本工程用于借助Servlet3.0实现文件上传 本工程编码方式:UTF-8 注意: 1、在上传文件前请在计算机C盘新建一个名为“upload”的文件夹,否则会出现如下异常:java.io.IOException: The temporary upload location [C...

Global site tag (gtag.js) - Google Analytics