1. 概述

  • 注解代替 web.xml 配置文件
  • 异步处理
  • 对上传的支持

2. 注解代替 web.xml 配置文件

  1. 使用方法

    • 在 Servlet 类上添加 @WebServlet(urlPatterns={"/AServlet"})
    • 在 Filter 类上添加 @WebFilter(urlPatterns={"/AFilter"})
    • 在 Listener 类上添加 @WebListener
  2. 优缺点
    • 优点:配置信息较少.
    • 缺点:不方便修改.

3. 异步处理

  1. 什么是异步处理

    以前,在服务器没有结束响应之前,浏览器是看不到响应内容的!只有响应结束时,浏览器才能显示结果!

    现在,在服务器开始响应后,浏览器就可以看到响应内容,不用等待服务器响应结束!

  2. 实现异步的步骤

// 使用异步之前
@WebServlet("/AServlet")
public class AServlet extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{ response.getWriter().println("hello");
response.getWriter().flush();
try{
Thread.sleep(3000);
}catch(InterruptedException e){ }
response.getWriter().println("world!");
response.getWriter().flush();
}
} // 使用异步
@WebServlet(urlPatterns={"/AServlet"}, asyncSupported=true)
public class AServlet extends HttpServlet{ public void doGet(final HttpServletRequest req, final HttpServletResponse resp)
throws ServletException, IOException{
// 处理编码问题
resp.setContextType("text/html;charset=utf-8"); // 1. 得到异步上下文对象
final AsyncContext ac = req.startAsync(req,resp); // 2. 给上下文一个 Runnable 对象, 启动它!
// 也就是给上下文一个任务,让它完成
ac.start(new Runnable(){
println("现在马上开始....<br/>",resp);
sleep(2000);
for(char c='A'; c<="Z"; c++){
println(c+"",resp);
sleep(250);
} // 通知 tomcat , 该异步线程已经执行结束了!
// 这样, tocat 才会及时的断开与浏览器的连接
ac.complete();
});
} private void println(String text, HttpServletResponse resp){
try{
resp.getWriter().print(text);
resp.getWriter().flush();
}catch(IOException e){}
} private void sleep(long ms){
try{
Thread.sleep(ms);
}catch(InterruptedException e){ }
}
}

4. 对上传的支持

// form.jsp
<body>
<h1>注册</h1>
<form action="<c:url value='/AServlet'/>" method="post" enctype="multipart/form-data">
用户名: <input type="text" name="username"/><br/>
简 历: <input type="file" name="resume"/></br>
<input type="submit" value="注册"/>
</form>
</body> // AServlet
@WebServlet(urlPatterns="/AServlet")
@MultipartConfig
public class AServlet extends HttpServlet{ public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{
// 处理编码问题
req.setCharacterEncoding("utf-8"); // 此时, 可以使用 getParameter
String username = req.getParameter("username"); // 获取文件表单字段,对应的 Part 对象
Part part = req.getPart("resume"); // 从 part 对象中获取数据
// 获取上传文件的 MIME 类型
System.out.println(part.getContentType());
// 获取上传文件的字节数
System.out.println(part.getSize());
// 获取文件字段名称, 即 resume. 不是文件名称
System.out.println(part.getName());
// 获取指定请求头的值, 例如获取上传文件的名称
System.out.println(part.getHeader("Content-Disposition"));
// 保存上传文件
part.write("/Users/xxx/Desktop/a.jpg"); }
}

参考资料:

Servlet 3.0 介绍的更多相关文章

  1. Servlet 3.0的AsyncListener接口

    Servlet 3.0的AsyncListener接口 作者:chszs,转载需注明. 博客主页:http://blog.csdn.net/chszs 一.Servlet 3.0介绍 Servlet ...

  2. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性

    atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性   1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...

  3. Servlet 3.0 新特性详解

    转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/#major3 Servlet 是 Java EE 规范体系的重要组成部分,也是 ...

  4. Servlet 4.0 入门

    Java™ Servlet API 是主流服务器端 Java 的基本构建块,也是 Java EE 技术的一部分,例如,用于 Web 服务的 JAX - RS.JSF (JavaServer Faces ...

  5. Servlet 3.0

    Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发 ...

  6. 启用Servlet 3.0新特性——注解支持

    Servlet 3.0版本新增注解支持,可是在实际使用中,添加的注解总是不起作用.经过检查,原来是“web.xml”文件的顶级标签“<web-app/>”中的一个叫做“metadata-c ...

  7. Servlet 3.0 异步模式

    Servlet 3.0标准新增了异步处理的支持. 进行异步处理的Servlet和作用于该Servlet的拦截器都必须声明对于异步处理的支持.

  8. [转]Servlet 3.0 新特性详解

    原文地址:http://blog.csdn.net/xiazdong/article/details/7208316 Servlet 3.0 新特性概览 1.Servlet.Filter.Listen ...

  9. 关于 tomcat nio connector, servlet 3.0 async, spring mvc async 的关系

    tomcat 的 org.apache.coyote.http11.Http11NioProtocol Connector 是一个使用 Java NIO 实现的异步 accept 请求的 connec ...

随机推荐

  1. nginx只允许域名访问,禁止ip访问

    背景:为什么要禁止ip访问页面呢?这样做是为了避免其他人把未备案的域名解析到自己的服务器IP,而导致服务器被断网,我们可以通过禁止使用ip访问的方法,防止此类事情的发生. 解决方法:这里介绍修改配置文 ...

  2. Jquery的promise对象

    一直用jquery,ajax一直是这么写: $.ajax({ url: 'abc.com/index', type: 'post', data: { abc:1 }, success: functio ...

  3. Linux内核设计基础(五)之内存管理

    我感觉学习操作系统首先要从内存分配和管理入手. 首先我们应该知道现代操作系统是以页为单位进行内存管理的,32位体系结构支持4KB的页.而64位体系结构支持8KB的页.页是用来分配的.怎样才干进行高效和 ...

  4. 转:c++里关于cerr,clog,cout三者的区别

    c++里关于cerr,clog,cout三者的区别: cerr(无缓冲标准错误)-----没有缓冲,发送给它的内容立即被输出 clog(缓冲标准错误)--------有缓冲,缓冲区满时输出 cout- ...

  5. 在 Windows 上安装 TensorFlow(转载)

    在 Windows 上安装 TensorFlow windows下配置安装Anaconda+tensorflow Spyder——科学的Python开发环境 Windows7 安装TensorFlow ...

  6. 2016ATF阿里巴巴技术论坛

    转自:http://blog.csdn.net/mini_monster/article/details/51175879 “爱迪生的贡献不在于让灯泡亮的更久一些,爱迪生最大的贡献是在全世界第一个想到 ...

  7. 开源码应用之Eclipse篇

    开写这篇的时候,恰逢Eclpse Mars(4.5)正式公布,最终由日蚀变登火星了,也离我開始基于Eclipse开发产品已经过去10年,这10年间,经历了Eclipse由私有核心框架到拥抱OSGi, ...

  8. virtualBox centos 6.x不能联网

    sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet UUID=3323da63---89bb-92 ...

  9. php 远程调用redis

    <?php $redis_conf = array ( "active_code"=>array( "host" => "14.29 ...

  10. IIS下PHP的ISAPI和FastCGI比较

    在Windows IIS 6.0下配置PHP,通常有CGI.ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异. 1. ...