Java自学手记——servlet3.0新特性
servlet3.0出来已经很久了,但市场上尚未普遍应用,servlet3.0有三个比较重要的新特性:使用注解来代替配置文件,异步处理以及上传组件支持。
支持servlet3.0的要求:MyEclipse10.0或以上版本,发布到Tomcat7.0或以上版本,并且需要创建JavaEE6.0应用。
一、使用注解代替配置文件
可以使用 @WebServlet, @WebFilter, @WebListener 三个注解来代替web.xml中的 Servlet, Filter, Listener 的配置,注解的好处是配置信息少,但是定死在代码中,不方便修改。
@WebServlet(
urlPatterns={"/AServlet"},
initParams{@WebInitParam(name="paramName",value="paramValue")},
loadOnStartup=1
)
public class AServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
System.out.println(config.getInitParameter("paramName"));
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.getWriter().print("Hello World!");
}
}
二、异步处理
异步处理:Servlet异步处理就是让Servlet在处理费时的请求时不要阻塞,而是一部分一部分的显示。
原来,在服务器没有结束响应之前,浏览器是看不到响应内容的!只有响应结束时,浏览器才能显示结果,使用异步处理,在服务器开始响应后,浏览器可以看到响应内容,不用等待服务器响应结束。
实现异步处理的步骤:
- 需要在@WebServlet注解中给出 asyncSupported=true, 不然Servlet默认是不支持异步处理的,如果存在过滤器,也需要在WebFilter设置该值。
- 得到AsynoContext,它是异步上下文对象,AsynoContext ac = request.startAsync(request, response);
- 给上下文一个 Runable 对象,启动它!
ac.start(new Runnable(){
public void run(){
...
}
});
注意:
- 响应类型必须是 text/html, 所以需要设置 response.setContentType("text/html;charset=utf-8");
- IE如果不能正常输出,这说明响应体大小不足512B,那你需要更多的输出!
- AsyncContext#complete();:通知Tomcat服务器我们的异步线程已经执行完毕,让Tomcat及时断开与浏览器的连接,否则Tomcat无法知道异步线程是否已经结束,导致响应结束过一会才断开连接。
三、上传支持
上传文件对表单的要求:
- method=post,提交方式必须为post
- enctype="multipart/form-data",它的默认值是它的默认值是:application/x-www-form-urlencoded
- <input type="file" name="必须给出">
使用文件上传是,Servlet中需要使用request.getInputStream()来获取整个表单的数据,不能够使用request.getParameter()。使用commons-fileupload类库中的方法可以三部得到上传文件的数据:创建工厂,利用工厂创建解析器,使用解析器来解析request对象,得到List<FileItem>。servlet3.0中对上传提供了支持,不再需要使用commons-fileupload,而是使用servlet3.0提供的上传接口。
上传步骤:使用request.getPart("字段名"),得到Part实例,通过Part中的方法得到文件的数据,不过还没有提供获取文件原名称的方法, 需要自己截取,servlet默认是不支持使用上传组件的,需要在servlet中添加注解,@MultipartConfig
Java自学手记——servlet3.0新特性的更多相关文章
- 使用Servlet3.0新特性asyncSupported=true时抛异常java.lang.IllegalStateException: Not supported
最近在运用Servlet3.0新特性:异步处理功能的时候出现以下了2个问题: 运行时会抛出以下两种异常: 一月 19, 2014 3:07:07 下午 org.apache.catalina.core ...
- Java基础加强-(注解,动态代理,类加载器,servlet3.0新特性)
1. Annotation注解 1.1. Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annota ...
- 【servlet3.0新特性】Annotation注解配置
servlet3.0新特性Servlet3.0引入的若干重要新特性,包括异步处理.新增的注解支持.可插性支持等等,为读者顺利向新版本过渡扫清障碍.Servlet3.0新特性概述Servlet3.0作为 ...
- 【Servlet3.0新特性】第03节_文件上传
这是一个Web Project 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web- ...
- Servlet3.0新特性
1 Servlet3.0新特性概述 使用要求:MyEclipse10.0或以上版本,发布到Tomcat7.0或以上版本,创建JavaEE6.0应用! Servlete3.0的主要新特性如下三部分: 使 ...
- Servlet3.0新特性(从注解配置到websocket编程)
Servlet3.0的出现是servlet史上最大的变革,其中的许多新特性大大的简化了web应用的开发,为广大劳苦的程序员减轻了压力,提高了web开发的效率.主要新特性有以下几个: 引入注解配置 支持 ...
- Java基础和JDK5.0新特性
Java基础 JDK5.0新特性 PS: JDK:Java Development KitsJRE: Java Runtime EvironmentJRE = JVM + ClassLibary JV ...
- Servlet3.0新特性WebFilter(Annotation Filter)详解
摘要: Servlet3.0作为J2EE 6规范一部分,并随J2EE6一起发布,WeFilter是过滤器注解,是Servlet3.0的新特性,不需要在web.xml进行配置,简化了配置. Name T ...
- Servlet3.0新特性使用详解
可插拔的Web框架 几乎所有基于Java的web框架都建立在servlet之上.现今大多数web框架要么通过servlet.要么通过Web.xml插入.利用标注(Annotation)来定义servl ...
随机推荐
- MSICE界面和功能分析
一.首页 ICE实现的这种界面样式,有可能使用WCF实现的,但是MFC来模仿也是可行的. 包括配置界面,和右下角的细节. 首页的主要功能只有3个,分别为图片拼接.视频拼接和打开拼接文件. 二.输入拼接 ...
- awk之随机函数rand()和srand() (转)
转自:http://blog.chinaunix.net/uid-10540984-id-2942041.html 文件: 1234567 abcdefg ...... 现在想要随机抽取5列组成下 ...
- ArrayList源码解析(四)
这篇文章主要看ArrayList的Iterator和ListIterator的实现. 1.Iterator和类Itr 当我们调用iterator方法时返回一个Iterator. /** * Retur ...
- netty心跳机制测试
netty中有比较完善的心跳机制,(在基础server版本基础上[netty基础--基本收发])添加少量代码即可实现对心跳的监测和处理. 1 server端channel中加入心跳处理机制 // Id ...
- python爬虫从入门到放弃(六)之 BeautifulSoup库的使用
上一篇文章的正则,其实对很多人来说用起来是不方便的,加上需要记很多规则,所以用起来不是特别熟练,而这节我们提到的beautifulsoup就是一个非常强大的工具,爬虫利器. beautifulSoup ...
- Web前端的路该怎么走?很迷茫
“路漫漫其修远兮,吾将上下而求索”,这句出自<离骚>. 虽然端午已过,但是还是不影响一个程序员想表(zhuang)达(boy)自己此刻心情的冲动. 偶然路过同事旁边,不(tou)小(kan ...
- 安装npm及cnpm(Windows)
[工具官网] Node.js : http://nodejs.cn/ 淘宝NPM: https://npm.taobao.org/ [安装步骤] 一.安装node.js 1.前往node.js官网下载 ...
- python网络爬虫之beautfiulSoup
BeautifulSoup将html文档转换成一个属性结构,每个节点都是python对象.这样我们就能针对每个结点进行操作.参考如下代码 def parse_url(): try: ...
- GA代码中的细节
GA-BLX交叉-Gaussion变异 中的代码细节: 我写了一个GA的代码,在2005测试函数上一直不能得到与实验室其他同学类似的数量级的结果.现在参考其他同学的代码,发现至少有如下问题: 1.在交 ...
- Android Studio常用快捷键使用
以下是我在编程中实际用上的Android Studio快捷键,基于Windows系统,在使用过程中会不断添加不断完善,OSX版本的在另外一篇博客 Ctrl+Alt+L 格式化代码,编写完成项目来一下, ...