Servlet 3.0的檔案上傳寫法

标签: 編程生涯 HTML Java | 发表时间:2012-06-19 10:08 | 作者:簡睿
出处:http://jdev.tw/blog

Servlet 3.0已經大幅簡化網頁檔案上傳的程式寫法,以下是撰寫的幾個重點。

HTML寫法

  • <form>的enctype要是"multipart/form-data"
  • 使用POST方法
  • <input type="file" >是主要使用的檔案瀏覽元素
  • 後端接收的Servlet寫在action屬性裡
<form name="Form1" id="Form1" method="POST" action="/xxx/servlet/com.xxx.test.UploadTest" 
      enctype="multipart/form-data">
  <input type="file" name="FILE" id="FILE" value=""/>
  <input type="hidden" name="DIR" id="DIR"/>
  <input name="btnUpload" id="btnUpload" type="submit" value="上傳檔案" />
</form>

Servlet寫法

  • 以@MultipartConfig(location = “c:/www/xxx/data/")指定寫檔路徑
  • 以request.getPart( )取出Part檔案物件
  • 中文檔名不同的Container系統或版本作法不同,要實際測試一下
 
/* $Id: UploadTest.java 104565 2012-06-15 06:29:48Z jerry $
 */
package com.xxx.test;

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;
import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import java.io.IOException;
import java.io.File;
import java.io.PrintWriter;

/**
 * Upload file from HTML form post.
 *
 * @version: jerry 2012/06/19
 */

@MultipartConfig(location = "c:/www/xxx/data/")
public class UploadTest extends HttpServlet {
  public void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    req.setCharacterEncoding("UTF-8"); // 為了處理中文檔名
    PrintWriter out = resp.getWriter();

    try {
      Part _oPart = req.getPart("FILE");
      String _sFilename = getFilename(_oPart);  // 檔名由Header取出
      // _sFilename = new String(_sFilename.getBytes("ISO8859_1"),"UTF-8");  // 在不同的code page啟動AP時有時需要轉碼
      System.out.println("Uploaded filename=" + _sFilename);  // debug

      File _oFile = new File("c:/www/xxx/data/" + _sFilename);
      if (_oFile.exists()) _oFile.delete();  // 檔案已存在時先刪除
      _oPart.write(_sFilename);  // saving the uploaded file.

      out.println("上傳成功");
    } catch (Exception e) {
      e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
      out.println("ERR:" + e.getMessage());
    } finally {
    }
  }

  private static String getFilename(Part part) {
    for (String cd : part.getHeader("content-disposition").split(";")) {
      if (cd.trim().startsWith("filename")) {
        String filename = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
        return filename.substring(filename.lastIndexOf('/') + 1).substring(filename.lastIndexOf('\\') + 1); // MSIE fix.
      }
    }
    return null;
  }
}

參考

##
您可能也會有興趣的類似文章

分享: PDF Plurk Facebook Twitter Google Bookmarks del.icio.us Live


相关 [servlet] 推荐:

Servlet Filter 学习

- - CSDN博客架构设计推荐文章
最近在研究CAS , CAS 中的Servlet Filter 不太熟悉, 所以花了点时间学下了下这部分的知识, 分成以下几部分 学习. Servlet Filter  的功能和用法. Servlet Filter 顺序的注意事项. A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both.

Servlet、Filter和Listener

- - Web前端 - ITeye博客
Java Servlet是与平台无关的服务器端组件,运行于Servlet容器中(如Tomcat),Servlet容器负责Servlet和客户端的通信以及调用Servlet的方法,Servlet和客户端的通信采用“请求/响应”的模式. Servlet可完成以下功能:. 1、创建并返回基于客户请求的动态HTML页面.

Servlet – 会话跟踪

- - ImportNew
HTTP本身是 “无状态”协议,它不保存连接交互信息,一次响应完成之后即连接断开,下一次请求需要重新建立连接,服务器不记录上次连接的内容.因此如果判断两次连接是否是同一用户, 就需要使用 会话跟踪技术来解决.常见的会话跟踪技术有如下几种:. URL重写: 在URL结尾附加. 会话ID标识,服务器通过会话ID识别不同用户..

servlet的四种响应

- - CSDN博客推荐文章
        在一个servlet的请求中,响应的方式的通常有四式,response.getWriter(),response.getOutputStream(),. request.getRequestDispatcher("ajax.jsp").forward(request, response) 和 response.sendRedirect("ajax.jsp").

Servlet是否线程安全

- - 研发管理 - ITeye博客
Servlet是线程安全吗. 要解决这个问题,首先要知道什么是线程安全:.   如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码. 如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的. 或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题.

Servlet 3.0的檔案上傳寫法

- - 簡睿隨筆
Servlet 3.0已經大幅簡化網頁檔案上傳的程式寫法,以下是撰寫的幾個重點.
的enctype要是"multipart/form-data". 是主要使用的檔案瀏覽元素. 後端接收的Servlet寫在action屬性裡. 以@MultipartConfig(location = “c:/www/xxx/data/")指定寫檔路徑.

jsp+servlet实现验证码功能

- - CSDN博客推荐文章
验证码的功能大多数人可能不都理解,但几乎每个安全网站都会有. 验证码是用来防止非人为因素操作的行为,例如一个黑客要黑一个网站,怎么弄呢. 最简单的思路当然是造成其网路拥堵直至系统瘫痪掉. 如果没有验证码,那么我就可以在注册页面,写一个程序,只有注册表单,不断更换主键或不可重复的内容,不停的提交. 那这样每秒可以注册几万次都有可能,这样服务器就大量负载,很容易就瘫痪并死掉.

基于uploadify上传和 servlet 的下载

- - CSDN博客推荐文章
由于工作需要 暂时快速的选定了uploadify作为文件上传插件. 至于下载就匆忙的用servlet来实现. 首先到uploadify官网下载需要的Js文件. 然后需要自己手写一个Js 来调用 uploadify.js 重点只说上传 其他辅助功能方法不细说.                         'buttonText' : '添加附件',.

【转】Servlet 和filter 执行顺序

- - 企业架构 - ITeye博客
一,servlet容器对url的匹配过程:. 当一个请求发送到servlet容器的时候,容器 先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test /aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做 servlet的映射匹配.

Servlet实现图形验证码

- - CSDN博客推荐文章
|-- 配置开发图形验证码Servlet. // 设置响应头 Content-type类型. // 以下三句是用于设置页面不缓存. // 建立指定宽、高和BufferedImage对象. Graphics g = image.getGraphics(); // 该画笔画在image上. Color c = g.getColor(); // 保存当前画笔的颜色,用完画笔后要回复现场.