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在处理费时的请求时不要阻塞,而是一部分一部分的显示。

  原来,在服务器没有结束响应之前,浏览器是看不到响应内容的!只有响应结束时,浏览器才能显示结果,使用异步处理,在服务器开始响应后,浏览器可以看到响应内容,不用等待服务器响应结束。

  实现异步处理的步骤:

  1.   需要在@WebServlet注解中给出 asyncSupported=true, 不然Servlet默认是不支持异步处理的,如果存在过滤器,也需要在WebFilter设置该值。
  2.   得到AsynoContext,它是异步上下文对象,AsynoContext ac = request.startAsync(request, response);
  3.   给上下文一个 Runable 对象,启动它!
 ac.start(new Runnable(){
public void run(){
...
}
});

  注意:

  1.   响应类型必须是 text/html, 所以需要设置 response.setContentType("text/html;charset=utf-8");
  2.   IE如果不能正常输出,这说明响应体大小不足512B,那你需要更多的输出!
  3.   AsyncContext#complete();:通知Tomcat服务器我们的异步线程已经执行完毕,让Tomcat及时断开与浏览器的连接,否则Tomcat无法知道异步线程是否已经结束,导致响应结束过一会才断开连接。

三、上传支持

  上传文件对表单的要求:

  1.   method=post,提交方式必须为post
  2.   enctype="multipart/form-data",它的默认值是它的默认值是:application/x-www-form-urlencoded
  3.   <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新特性的更多相关文章

  1. 使用Servlet3.0新特性asyncSupported=true时抛异常java.lang.IllegalStateException: Not supported

    最近在运用Servlet3.0新特性:异步处理功能的时候出现以下了2个问题: 运行时会抛出以下两种异常: 一月 19, 2014 3:07:07 下午 org.apache.catalina.core ...

  2. Java基础加强-(注解,动态代理,类加载器,servlet3.0新特性)

    1.   Annotation注解 1.1.  Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annota ...

  3. 【servlet3.0新特性】Annotation注解配置

    servlet3.0新特性Servlet3.0引入的若干重要新特性,包括异步处理.新增的注解支持.可插性支持等等,为读者顺利向新版本过渡扫清障碍.Servlet3.0新特性概述Servlet3.0作为 ...

  4. 【Servlet3.0新特性】第03节_文件上传

    这是一个Web Project 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web- ...

  5. Servlet3.0新特性

    1 Servlet3.0新特性概述 使用要求:MyEclipse10.0或以上版本,发布到Tomcat7.0或以上版本,创建JavaEE6.0应用! Servlete3.0的主要新特性如下三部分: 使 ...

  6. Servlet3.0新特性(从注解配置到websocket编程)

    Servlet3.0的出现是servlet史上最大的变革,其中的许多新特性大大的简化了web应用的开发,为广大劳苦的程序员减轻了压力,提高了web开发的效率.主要新特性有以下几个: 引入注解配置 支持 ...

  7. Java基础和JDK5.0新特性

    Java基础 JDK5.0新特性 PS: JDK:Java Development KitsJRE: Java Runtime EvironmentJRE = JVM + ClassLibary JV ...

  8. Servlet3.0新特性WebFilter(Annotation Filter)详解

    摘要: Servlet3.0作为J2EE 6规范一部分,并随J2EE6一起发布,WeFilter是过滤器注解,是Servlet3.0的新特性,不需要在web.xml进行配置,简化了配置. Name T ...

  9. Servlet3.0新特性使用详解

    可插拔的Web框架 几乎所有基于Java的web框架都建立在servlet之上.现今大多数web框架要么通过servlet.要么通过Web.xml插入.利用标注(Annotation)来定义servl ...

随机推荐

  1. C# 特性参数(注解属性加在参数前面)

    特性参数 webapi 框架里有很多特性参数,为了解除一些新人的疑惑,写个小例子分享下. class Program { static void Main(string[] args) { var m ...

  2. git底层原理(一)

    1.git仓库的初始化: 输入git init指令,会看到在当前空目录下创建了一个.git隐藏文件夹,这个就是git实现一切版本管理的关键.进入到.git目录下,里面包含三个文件(config/des ...

  3. gradle windows 环境变量

    我的电脑 ->  高级环境变量 GRADLE_HOME    D:\soft\gradle-3.5 path %GRADLE_HOME%\bin

  4. centos7.2下编译安装apache2.4

    1.安装编译工具 [root@carl httpd-2.4.25]# yum groupinstall 'Development Tools' 'Server Platform Development ...

  5. 汽车Vin码识别—— 一款二手车行业值得拥有的OCR识别软件

    一.汽车Vin码识别产品描述 汽车Vin码识别系统,主要应用在智能手机IOS与Android两个平台中.前端扫描查询模式,无需联网,只需扫描汽车前挡风玻璃右下角的Vin码(车架号),即可轻松识别出车辆 ...

  6. javaSE_Java第一周总结:有难度题目集合

    第一周练习总结 说明:尽量采用多种做法解决 1.使用三种方法实现变量交换 public class Test1Change{ public static void main(String[] args ...

  7. Python进制转换(二进制、十进制和十六进制)

    #!/usr/bin/env python # -*- coding: utf-8 -*- # 2/10/16 base trans. wrote by srcdog on 20th, April, ...

  8. 几个常用的linux命令(操作服务器时会用到)

    目录 tmux 背景 安装 使用 启动一个tmux session 暂时离开当前session 回到之前的session 重命名session 创建window 创建pane ps scp 参考 tm ...

  9. ArcGIS Earth(原谷歌地球)如何获取高精度矢量地图数据?(shp文件/要素类/kml)

    大家好,这次来分享干货.做地理分析的同学,或者需要使用地图却不知道哪里有矢量数据的时候,怎么办呢? 这次,我就告诉大家哪里能自己手工制作矢量点线面数据!注意哦,是自己绘制的. 使用到的软件: ArcG ...

  10. python模块之argparse--参数解析

    一.简介: argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块.argparse模块的作用是用于 解析命令行参数,例如python parseTe ...