异步上传
import com.google.common.io.Files; import javax.servlet.AsyncContext; 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; import java.io.IOException; import java.io.PrintWriter; @WebServlet(urlPatterns = "/upload", loadOnStartup = 2, asyncSupported = true) @MultipartConfig() public class UploadWordCountServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (request.isAsyncSupported()) { AsyncContext actx = request.startAsync(); actx.start(new Task(actx)); } else { throw new RuntimeException("Do not support asynchronous request"); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<h3>Hello</h3>"); out.println("</body>"); out.println("</html>"); out.flush(); } class WordCountTask implements Runnable { private AsyncContext context; private HttpServletRequest request; private HttpServletResponse response; public WordCountTask(AsyncContext context) { this.context = context; this.request = (HttpServletRequest) context.getRequest(); this.response = (HttpServletResponse) context.getResponse(); } @Override public void run() { try { response.setContentType("application/json;charset=UTF-8"); // Result all=new Result(); for (Part part : request.getParts()) { .... response.getWriter().write("...."); } } catch (Exception e) { e.printStackTrace(); } finally { context.complete(); } } } //part.getSubmittedFileName() 在servlet 3.1中才支持,但是tomcat8才支持3.1规范 public static String getPartSubmittedFileName(Part part) { String cd = part.getHeader("content-disposition"); if (cd != null) { String[] cds = cd.split(";"); for (String kv : cds) { if (kv.trim().startsWith("filename=")) { return kv.split("=")[1].replace("\"", ""); } } } return ""; } }
相关推荐
本工程用于借助Servlet3.0实现文件上传 本工程编码方式:UTF-8 注意: 1、在上传文件前请在计算机C盘新建一个名为“upload”的文件夹,否则会出现如下异常:java.io.IOException: The temporary upload location [C...
下载的`servlet3.0jar综合`压缩包包含了实现这些特性的关键库,对于进行Java EE 3.0开发的程序员来说是必不可少的工具。在实际开发中,结合相关的框架(如Spring MVC)和其他Java EE组件,可以构建出功能强大、易...
4. **流处理**:Servlet 3.0的文件上传接口支持流处理,这意味着文件内容可以直接写入到输出流,而无需先全部加载到内存,这对于处理大文件非常有利。这降低了内存消耗,提高了系统的稳定性和性能。 5. **异步处理*...
在这个名为“servlet3.0-demo”的项目中,我们重点探讨的是如何利用Servlet 3.0的新特性进行文件上传操作,并且采用注解的方式来简化代码。 在Servlet 3.0之前,我们需要在web.xml中配置Servlet,然后通过继承...
Servlet 3.0是Java EE的一部分,它引入了许多改进,使得文件上传变得更加简单和高效。本篇文章将深入讲解如何使用Servlet 3.0实现文件上传功能。 一、Servlet 3.0新特性 Servlet 3.0标准放宽了对web.xml的依赖,...
Servlet3.0是Java EE平台中的一个重要组成部分,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。以下是对Servlet3.0主要特性的详细解释: 1. **注解配置**: 在Servlet3.0中,我们可以...
这个规范PDF文件是开发人员深入理解Servlet 3.0的核心资源,同时包含的javadoc为开发者提供了API的详细文档,便于在实际开发中查阅和使用。 1. **异步处理**:Servlet 3.0引入了异步处理能力,允许Servlet在请求...
Servlet3.0文件上传实例学习总结 Servlet3.0提供了对文件上传的原生支持,开发者可以直接使用Servlet3.0提供的API实现文件上传功能,不需要借助任何第三方上传组件。在这里,我们将介绍使用Servlet3.0实现文件上传...
Servlet3.0引入了注解配置,允许开发者无需在web.xml文件中进行繁琐的配置,可以直接在Servlet类上使用`@WebServlet`注解来声明和映射Servlet。例如: ```java @WebServlet("/hello") public class ...
* servlet3.0的文件上传 * @date:2012-5-21 *在创建项目的时候首先添加Tomcat7.x的支持,然后把apache-tomcat-7.0.27\conf\web.xml拷贝到项目WEB-INF目录下 *把之前的web.xml覆盖.. 配置留下 <?xml version...
本工程用于借助Servlet3.0实现文件上传 本工程编码方式:UTF-8 注意: 1、在上传文件前请在计算机C盘新建一个名为“upload”的文件夹,否则会出现如下异常:java.io.IOException: The temporary upload location [C...
本工程用于借助Servlet3.0实现文件上传 本工程编码方式:UTF-8 注意: 1、请不要使用360安全浏览器演示本功能,否则会出现如下异常:java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadBase...
在这个主题中,我们将深入探讨Servlet3.0的两个核心新特性:文件上传的简化以及Part接口的使用,以及MultiConfig注解在多配置环境中的应用。 首先,让我们关注Servlet3.0对文件上传的支持。在Servlet2.5及以前的...
Servlet3.0 实现文件上传的方法是通过利用其新特性,包括注解支持和HttpServletRequest对象对文件上传的内置处理,从而简化了以往依赖第三方库如Apache Commons FileUpload的复杂过程。在Servlet 3.0中,我们可以...
- Servlet 3.0引入了对注解的全面支持,允许开发者在类或方法级别声明Servlet、过滤器和监听器,而无需在web.xml配置文件中进行繁琐的配置。例如,可以通过`@WebServlet`、`@WebFilter`和`@WebListener`注解来声明...
例如,当一个请求触发了一个耗时的任务(如文件上传或数据库查询)时,Servlet 可以将控制权交给容器,让容器在后台继续执行这些操作,同时释放当前线程去处理其他请求。当后台任务完成时,Servlet 可以恢复执行并...
总结来说,Servlet3.0的新特性带来了更简洁的配置、更高效的异步处理、更灵活的过滤器和监听器注册,以及对文件上传的内置支持。这些改进都极大地推动了Java Web应用的开发效率和性能,使得开发人员能够更加专注于...
7. **MIME多部分解析**:Servlet 3.0引入了`Part`接口,用于处理MIME多部分请求,这在处理上传文件时非常有用。 8. **安全增强**:添加了新的安全相关API,如`HttpServletRequest.isUserInRole()`和`...
Servlet 3.0引入了模块化的概念,允许将Web应用拆分为多个独立的模块(或称为Web片段),每个模块都可以打包为自己的WAR文件。通过`WEB-INF/web.xml`配置文件或注解,可以声明模块间的依赖关系,使得应用结构更加...
在本文中,我们将深入探讨如何使用JavaServer Faces (JSF) 2.0与Servlet 3.0结合实现文件上传功能。JSF是Java平台上的一种Web应用程序开发框架,而Servlet 3.0则是用于处理HTTP请求的核心Java API,两者结合可以提供...