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 ...
随机推荐
- CentOS6.5内核升级到linux 3.12.17教程
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Linux centos 2.6.32-431.el6.x86_64(Centos-6.5-x86_64-mi ...
- 通过浏览器查看nginx服务器状态配置方法
通过浏览器查看nginx服务器状态配置方法 投稿:junjie 字体:[增加 减小] 类型:转载 这篇文章主要介绍了通过浏览器查看nginx服务器状态配置方法,本文讲解开启nginx-status的配 ...
- asp.net+mvc+easyui+sqlite 简单用户系统学习之旅(二)—— easyui的简单实用
下面开始在UserManager.Web中利用easyUI构建web. 1. 先删除自带的controllers.models和views(里面的shared和web.config可以保存)下面的文件 ...
- Echart - 最好最强大效果最丰富的可视化图表插件
# 官网http://echarts.baidu.com/ # demohttp://echarts.baidu.com/gallery/index.html Echart npm install e ...
- Atitit eclipse新特性总结3.1---4.4 4.5
Atititeclipse新特性总结3.1---4.4 4.5 1. Eclipse 4.4 Luna正式发布了.1 1.1. 新版本的Eclipse默认对Java8提供支持1 1.2. 内存分析器 ...
- Creating Dialogbased Windows Application (2) / 创建基于对话框的Windows应用程序(二)Button的应用、新建子窗体 / VC++, Windows
创建基于对话框的Windows应用程序(二) —— Button的应用.新建子窗体 可以发现上一节创建的窗体中,点击OK和Cancel两个按钮是没有任何反应的.现在我们来为他们添加退出对话框的功能. ...
- Graph Visualization
1. 什么是graph visualization? Graph visualization is a way of representing structural information as di ...
- Vue 组件3 作用域插槽
作用域插槽是一种特殊类型的插槽,用作使用一个(能够传递数据到)可重用模板替换已渲染元素. 在子组件中,只需将数据传递到插槽,就像你将props传递给组件一样: <div class=" ...
- 关于UITableView界面刷新
在TableView中的数据发生改变的时候,往往会发现UITableView中的数据没有更新,通常需要滚动后才会更新. 这个是因为他的重绘机制的问题. 一般情况下可以用下面这个方法解决: 在viewW ...
- ES6 学习笔记 (1)
笔记来源:廖雪峰老师的javascript全栈教程 ES6:JavaScript的标准,ECMAScript在不断发展,最新版ECMAScript 6标准(简称ES6)已经在2015年6月正式发布了, ...