Servlet 3.0 介绍
1. 概述
- 注解代替 web.xml 配置文件
- 异步处理
- 对上传的支持
2. 注解代替 web.xml 配置文件
- 使用方法
- 在 Servlet 类上添加
@WebServlet(urlPatterns={"/AServlet"}) - 在 Filter 类上添加
@WebFilter(urlPatterns={"/AFilter"}) - 在 Listener 类上添加
@WebListener
- 在 Servlet 类上添加
- 优缺点
- 优点:配置信息较少.
- 缺点:不方便修改.
3. 异步处理
什么是异步处理
以前,在服务器没有结束响应之前,浏览器是看不到响应内容的!只有响应结束时,浏览器才能显示结果!
现在,在服务器开始响应后,浏览器就可以看到响应内容,不用等待服务器响应结束!实现异步的步骤
// 使用异步之前
@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 介绍的更多相关文章
- Servlet 3.0的AsyncListener接口
Servlet 3.0的AsyncListener接口 作者:chszs,转载需注明. 博客主页:http://blog.csdn.net/chszs 一.Servlet 3.0介绍 Servlet ...
- 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 ...
- Servlet 3.0 新特性详解
转自:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/#major3 Servlet 是 Java EE 规范体系的重要组成部分,也是 ...
- Servlet 4.0 入门
Java™ Servlet API 是主流服务器端 Java 的基本构建块,也是 Java EE 技术的一部分,例如,用于 Web 服务的 JAX - RS.JSF (JavaServer Faces ...
- Servlet 3.0
Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发 ...
- 启用Servlet 3.0新特性——注解支持
Servlet 3.0版本新增注解支持,可是在实际使用中,添加的注解总是不起作用.经过检查,原来是“web.xml”文件的顶级标签“<web-app/>”中的一个叫做“metadata-c ...
- Servlet 3.0 异步模式
Servlet 3.0标准新增了异步处理的支持. 进行异步处理的Servlet和作用于该Servlet的拦截器都必须声明对于异步处理的支持.
- [转]Servlet 3.0 新特性详解
原文地址:http://blog.csdn.net/xiazdong/article/details/7208316 Servlet 3.0 新特性概览 1.Servlet.Filter.Listen ...
- 关于 tomcat nio connector, servlet 3.0 async, spring mvc async 的关系
tomcat 的 org.apache.coyote.http11.Http11NioProtocol Connector 是一个使用 Java NIO 实现的异步 accept 请求的 connec ...
随机推荐
- poj 3696 The Luckiest number 欧拉函数在解a^x=1modm的应用
题意: 给一个L,求长度最小的全8数满足该数是L的倍数. 分析: 转化为求方程a^x==1modm. 之后就是各种数学论证了. 代码: //poj 3696 //sep9 #include <i ...
- CSS之Position全面认识
CSS的很多其他属性大多容易理解,比如字体,文本,背景等.有些CSS书籍也会对这些简单的属性进行大张旗鼓的介绍,而偏偏忽略了对一些难缠的属 性讲解,有避重就轻的嫌疑.CSS中主要难以理解的属性包括盒型 ...
- Log4j学习(使用流程,Log4j.properties配置文件,配置到多个不同目标)
参考网址: [http://blog.csdn.net/drift_away/article/details/7403658] [http://blog.csdn.net/lxzo123/articl ...
- javacript计时
简单的计时: var t=setTimeout("alert('5 秒!')",5000) 无限计时: var c=0 var t function timedCount() { ...
- (html)前端如何验证token的合法性来判断用户是否登录?
问题: (html)前端如何验证token的合法性来判断用户是否登录?描述: 1.我使用了JWT的方式,后端生成了一个token,将其返回给前端,前端获取到后每次请求接口都附带上这个token,后端来 ...
- OC 内存管理-01
创建对象 .分配内存空间,存储对象 .初始化成员变量 .反回对象的指针地址 //过程 ()对象在完成创建的同时,内部会自动创建一个引用计数器,这个计数器,是系统用来判断是否回收对象的唯一依据, 当我们 ...
- 切比雪夫多项式(Chebyshev Polynomials)
切比雪夫多项式在逼近理论中有重要的应用.这是因为第一类切比雪夫多项式的根(被称为切比雪夫节点)可以用于多项式插值.相应的插值多项式能最大限度地降低龙格现象,并且提供多项式在连续函数的最佳一致逼近. 参 ...
- Cocos2dx的ClippingNode裁剪节点使用方式
1.http://shahdza.blog.51cto.com/2410787/1561937 2.http://www.firedragonpzy.com.cn/index.php/archives ...
- Problem 500!!! (Project Euler 500)
题目大意:求出最小的正整数,它的约数有$2^{500500}$个. 思路:考虑将一个数质因数分解,如果它的约数有$2^{500500}$个, 那么每个质因子的指数一定是$2^k-1$这样的形式. 如果 ...
- 对asp.net缓存 的深入了解
一.缓存概念,缓存的好处.类型.-------------------------------------------------------------------------------- ...