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. 04-1下载Win系统(装机助理)

    下载Win系统(装机助理): http://www.zhuangjizhuli.com/upan.html http://www.krlxx.com/64win7.html 选择你需要安装的系统: 以 ...

  2. HTML5特性

    HTML5规范围绕如何使用新增标记定义了大量Javascript API,其中一些API与DOM重叠,定义了浏览器应该支持DOM拓展. 1.与类相关的扩充 HTML5新增了getElementsByC ...

  3. VS中 无法创建虚拟目录 本地IIS IIS Express 外部主机

    从前就有个疑问了,为什么我拉取别人写好的代码后就可以在IIS里面生成一个网站呢? 这里所谓的生成网站,是指包含了所有源代码文件的网站:相对地,发布网站,就是指包含被编译的源文件所得到的DLL文件的网站 ...

  4. Android应用APP脱壳笔记

    [TOC] 天下游 模拟定位技术点简析 通过代码分析初步猜测模拟定位用到的几处技术点: 获取了Root权限 通过反射获取 android.os.ServiceManager 对应的函数 getServ ...

  5. python学习之pyenv

    我们经常有这种需求: linux系统中既要有python2.xxx,又要有python3.xxx,甚至更极端的情况是,有多个版本的python3.xxx. 如何实现上述需求呢?更新python的话,费 ...

  6. js使用正则表达式验证身份证格式

    function checkIdentity(identity){ var reg = /^[1-9]{1}[0-9]{14}$|^[1-9]{1}[0-9]{16}([0-9]|[xX])$/; i ...

  7. js中级系列三:前端性能优化

    原文链接:http://www.cnblogs.com/xxcanghai/p/5205998.html 链接:http://www.zhihu.com/question/21658448/answe ...

  8. js基础系列框架:JS重要知识点(转载)

    这里列出了一些JS重要知识点(不全面,但自己感觉很重要).彻底理解并掌握这些知识点,对于每个想要深入学习JS的朋友应该都是必须的. 讲解还是以示例代码搭配注释的形式,这里做个小目录: JS代码预解析原 ...

  9. strust2 和 hibernate的整合------登录的实现

    初步认识了struts2,并与hibernate进行整合,完成了一个登录的案例,下面贴源码 1.实体类User public class User { private Integer id; priv ...

  10. inode表元数据,存储在物理存储体上

    一个文件除了数据需要存储之外,一些描述信息也需要存储,例如文件类型(常规.目录.符号链接等),权限,文件大小,创建/修改/访问时间等,也就是ls -l命令看到的那些信息,这些信息存在inode中而不是 ...