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. (三)EasyUI 使用——form表单1

    form表单组件主要有以下内容(如下图)     1. validatebox验证框 姓名:必填/1-4个字符/必填中文 邮箱:必填/1-30个字符/必填符合邮箱格式/后缀必须是com或cn 密码验证 ...

  2. Velocity中文乱码问题解决方法

    http://yonge812.iteye.com/blog/1010290 Velocity中文乱码问题需要注意一下几点: 1.eclipse默认编码方式 2.页面的编码方式 3.volocity模 ...

  3. 通过 P3P规范让IE跨域接受第三方cookie session

    所谓第三方 cookie,就是说你访问网页 A,却接收到域名 B 的 cookie 设定指令.这可能是由于网页 A 请求或链接了 B 的网页,比如上面提到的 iframe 以及 jsonp. 我查到了 ...

  4. c++ 类内部 使用 new delete

    低级错误: /** * @clusterNums 默认为5 分类数目 * @xyVector 处理后点云数据 x y顺序存储 */ int GMM::runGMM(int clusterNums, c ...

  5. 一些移动端的ui框架

    一些移动端的ui框架 https://jqweui.cn/resource

  6. svn的外网设置访问方法

    一.花生壳 1. 设置静态ip 选择 DHCP服务器 -> 静态地址分配,为内网内的机器分配静态ip 2.设置端口转发 选择 转发规则 -> 虚拟服务器,将外网对443端口的访问转发到安装 ...

  7. ubuntu 12.04LTS下jdk 6安装记录

    这两天突然对ubuntu产生了兴趣,决定来折腾一下,:-) 由于开发一般都是在java上进行,所以第一步就是得把环境搭建好,折腾了一会儿,现在把过程记录一下. Step 1 下载jdk6 地址是 ht ...

  8. Atitit.一些公司的开源项目 重大知名开源项目attilax总结

    Atitit.一些公司的开源项目 重大知名开源项目attilax总结 1. Twitter--Bootstrap:1 2. Google2 2.1. Gson2 2.2. Angular.Js2 2. ...

  9. java中的参数传递——值传递、引用传递

    参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递. 在 Java 应用程序中永远不会传递对象,而只传递对象引用.因此是按引用传递对象.Java 应用程序按引用 ...

  10. AudioToolKit的简单介绍及教程

    AudioToolKit的简单介绍及教程 (2013-02-21 09:29:18) 转载▼ 标签: 游戏开发 unity3d教程 unity3d unity it 分类: Unity3d之插件篇 原 ...