Servlet3.0新特性

servlet3.0新增加如下特性:

1)注解,javax.servlet.annotation包下,如:@WebServlet,

      可以不用在web.xml中配置了,如果想使用注解,需要在web.xml中设置参数:metadata-complet="false", 设置true时注解就无效了。

2)插件支持,类似于struts中的插件。

      把servlet打成一个jar包(META-INF/web-fragment.xml中配置servlet), 然后分发到你想使用到的web工程

3)servlet的异步处理支持,(默认情况下servlet没有开启异步,需要设置asyncSupported=true)

      对于耗时的请求操作,‘servlet线程’接收到浏览器请求后,可以开启一个‘小线程’去处理这个耗时操作,而让‘servlet线程’直接结束,回到容器的‘servlet线程池’中闲置,从而可以为其他的用户请求服务,‘小线程’在处理完耗时操作后,直接将处理完的结果输出到客户端浏览器,‘小线程’结束。

      在servlet3.0之前,‘servlet线程’会一直阻塞,直到耗时操作完成之后,‘servlet线程’才会闲置,一旦遇到大并发时,‘servlet线程’就会不够用(Tomcat下默认150个‘servlet线程’)。

 

servlet3.0的ServletContext在初始化的时候,可以动态添加servlet/filter/listener:

1 ServletRegistration.Dynamic addServlet(java.lang.String servletName, java.lang.Class<? extends Servlet> servletClass) 
2 ServletRegistration.Dynamic addServlet(java.lang.String servletName, Servlet servlet) 
3 ServletRegistration.Dynamic addServlet(java.lang.String servletName, java.lang.String className)

注意:只能在容器初始化时才能调用,否则会抛出异常:

IllegalStateException - if this ServletContext has already been initialized

如果可以动态部署servlet多好呀,为什么servlet3.0限制不准这样做呢?安全方面考虑?


 

 

参考:

http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.html?ca=drs-cn-0423

 

 

 

posted on 2012-03-14 12:30  TroyZ  阅读(546)  评论(0编辑  收藏  举报