`

Servlet3.0中HttpServletRequest增加了对文件上传的支持

    博客分类:
  • java
阅读更多

Servlet3.0还有一个改变是改进了部分API,这种改进很好的简化了的了JAVA WEB的开发,其中一个改进就是HttpServletRequest增加了进文件上传的支持。

 

HttpServletRequest提供了如下两个方法来处理文件上传
1、Part getPart(String name) :根据文件名来获取文件上传域;
2、Collection<Part> getParts():获取所有的文件上传域;

每个Part对象对应一个文件上传域,该对象提供了大量的方法来访问上传文件的文件类型、大小、输入流等,并提供一个write(String file)方法将文件文件写入服务器磁盘

 

上传文件一定要为表单设置enctype属性为multipart/form-data:表示以二进制流的方式处理表单

文件上传页面upload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
	文件名:<input type="text" id="name" name="name"/><br/>
	请选择文件:<input type="file" name="file"><br/>
	<input type="submit" value="上传"/>
</form>
</body>
</html>

 

 

UploadServlet.java

使用Servlet3.0特性,使用注解@WebServlet与@MultipartConfig(处理文件上传)

package aniyo.upload.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

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;

/**
 * Servlet 3.0增加对文件上传的支持
 * @author aniyo
 * blog:http://aniyo.iteye.com
 *
 */
@WebServlet(name="upload",urlPatterns={"/upload"})
@MultipartConfig
public class UploadServlet extends HttpServlet{

	/* (non-Javadoc)
	 * @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=GBK");
		PrintWriter out = response.getWriter();
		//fileName用于测试在界面上自己随便输入的一个名字,自己可以根据时间或其他规则来命名
		String fileName = request.getParameter("name");
		//获取文件上传域
		Part part = request.getPart("file");
		out.println("上传文件的类型为:"+part.getContentType()+"<br/>");
		out.println("上传文件的大小为:"+part.getSize());
		//获取该文件的上传域
		Collection<String> headerNames = part.getHeaderNames();
		for(String headerName : headerNames){
			out.println(headerName+"--->"+part.getHeader(headerName)+"<br/>");
		}
		//将上传的文件写入服务器
		part.write(getServletContext().getRealPath("/uploadFiles"+File.separator+fileName));
	}

	/* (non-Javadoc)
	 * @see javax.servlet.GenericServlet#destroy()
	 */
	@Override
	public void destroy() {
		super.destroy();
	}

	/* (non-Javadoc)
	 * @see javax.servlet.GenericServlet#init()
	 */
	@Override
	public void init() throws ServletException {
		super.init();
	}
	
}

 

分享到:
评论
1 楼 utopialxw 2014-09-12  
不明白 为什么要覆盖 service方法? 而不是post方法?

相关推荐

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

    4. **流处理**:Servlet 3.0的文件上传接口支持流处理,这意味着文件内容可以直接写入到输出流,而无需先全部加载到内存,这对于处理大文件非常有利。这降低了内存消耗,提高了系统的稳定性和性能。 5. **异步处理*...

    servlet3.0-demo

    在这个名为“servlet3.0-demo”的项目中,我们重点探讨的是如何利用Servlet 3.0的新特性进行文件上传操作,并且采用注解的方式来简化代码。 在Servlet 3.0之前,我们需要在web.xml中配置Servlet,然后通过继承...

    servlet 3.0 jar 包综合下载

    6. **多文件上传**:通过`Part`接口,Servlet 3.0支持多文件上传,处理大文件上传时可以设置更灵活的限制和进度反馈。 7. **WebSocket支持**:Servlet 3.0规范定义了WebSocket API,为基于TCP连接的双向通信提供了...

    java上传文件(servlet3.0)

    综上所述,Servlet 3.0简化了Java Web中文件上传的实现,通过`Part` API,我们可以方便地处理Multipart请求,实现安全、高效的文件上传功能。在实际应用中,结合最佳实践和安全策略,可以为用户提供更好的服务。

    Servlet3.0 Demo

    Servlet3.0引入了注解配置,允许开发者无需在web.xml文件中进行繁琐的配置,可以直接在Servlet类上使用`@WebServlet`注解来声明和映射Servlet。例如: ```java @WebServlet("/hello") public class ...

    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对文件上传的支持。在Servlet2.5及以前的版本中,文件上传通常需要依赖第三方库如Apache Commons FileUpload,因为标准的Servlet API并未提供内置的文件上传机制。然而,Servlet3.0引入了...

    Servlet3.0学习总结之基于Servlet3.0的文件上传实例

    Servlet3.0提供了对文件上传的原生支持,开发者可以直接使用Servlet3.0提供的API实现文件上传功能,不需要借助任何第三方上传组件。在这里,我们将介绍使用Servlet3.0实现文件上传的步骤和代码实现。 使用Servlet...

    servlet 3.0 规范提案

    - Servlet 3.0引入了对注解的全面支持,允许开发者在类或方法级别声明Servlet、过滤器和监听器,而无需在web.xml配置文件中进行繁琐的配置。例如,可以通过`@WebServlet`、`@WebFilter`和`@WebListener`注解来声明...

    servlet-api-3.0.jar包

    7. **MIME多部分解析**:Servlet 3.0引入了`Part`接口,用于处理MIME多部分请求,这在处理上传文件时非常有用。 8. **安全增强**:添加了新的安全相关API,如`HttpServletRequest.isUserInRole()`和`...

    Servlet3.0新特性解析01

    总结来说,Servlet3.0的新特性带来了更简洁的配置、更高效的异步处理、更灵活的过滤器和监听器注册,以及对文件上传的内置支持。这些改进都极大地推动了Java Web应用的开发效率和性能,使得开发人员能够更加专注于...

    Servlet3.0实现文件上传的方法

    Servlet3.0 实现文件上传的方法是通过利用其新特性,包括注解支持和HttpServletRequest对象对文件上传的内置处理,从而简化了以往依赖第三方库如Apache Commons FileUpload的复杂过程。在Servlet 3.0中,我们可以...

    servlet-api-3.0-alpha-1.jar

    在Servlet 3.0中,Servlet容器支持异步处理,这意味着Servlet可以在不阻塞线程的情况下执行长时间运行的操作。通过调用`HttpServletRequest.startAsync()`方法,开发者可以开启异步处理模式,这样主线程会立即返回...

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

    在 Servlet 3.0 中,我们可以使用改进的文件上传 API 来上传文件。这使得文件上传变得更加简单和高效。 五、非阻塞式 IO 读取流 在 Servlet 3.0 中,我们可以使用非阻塞式 IO 读取流来提高 Web 应用性能。非阻塞式...

    study-servlet3.0:学习servlet3.0

    Servlet3.0引入了对注解的强大支持,开发者可以使用`@WebServlet`、`@WebFilter`和`@WebListener`等注解来声明Servlet、过滤器和监听器,无需再在web.xml配置文件中进行繁琐的手动配置。这使得代码更加简洁,也更...

    servlet-3.0

    Servlet 3.0引入了对注解的广泛支持,使得开发者不再需要依赖web.xml来配置Servlet、Filter和Listener。例如,可以直接在类上使用`@WebServlet`, `@WebFilter`, 和 `@WebListener` 注解进行声明,简化了部署描述符...

    jsp+servlet+mysql实现文件上传功能

    在本文中,我们将深入探讨如何使用JSP、Servlet和MySQL实现文件上传功能,特别是基于Servlet 3.0的实现方式。文件上传是Web应用程序中常见的需求,它允许用户上传文件到服务器并存储在数据库中。这里我们将讲解关键...

    servlet 文件上传、下载

    总之,Servlet文件上传和下载是Web开发中的常见任务,理解并掌握其原理和实践方法对开发者来说至关重要。通过Servlet 3.0的新特性,我们可以更简洁地处理文件交互,同时配合前端库如AjaxFileUpload,提供流畅的用户...

    vue+servlet的文件上传案例.rar

    后端的Servlet3.0引入了非阻塞I/O和异步处理,使得文件上传更加高效。当Servlet接收到请求后,可以通过HttpServletRequest对象的getPart方法来获取上传的文件。需要注意的是,Servlet容器必须支持Servlet 3.0及以上...

    servlet3文件上传操作

    但是,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能。 二、使用Servlet3.0提供的API实现文件上传 1.1 编写上传页面 在实现...

Global site tag (gtag.js) - Google Analytics