Servlet之所以没有像之前的ejb那样被受到那么多的诟病,是因为servlet的设计确实非常好。在最新的Java EE6版本里,这么多年都没有多少重大改动的Servlet终于添加了很多新的功能。下面我们一个一个来看 1. 基于annotation的配置自从java 5增加了annotation后,现在annotation已经广范用于各种框架,确实减少了很多的编写配置文件的工作。现在终于可以不用写web.xml,只要通过WebServlet, WebFilter, WebListener这几个annotation就可以轻易的配置Servlet, filter和listener了。而且, web.xml已经是可选的了,就算没有它,也一样运行。 2. 异步请求处理Servlet 3.0 新添加了一个类AsyncContext,可以通过ServletRequest活得。如果调用了ServletRequest的startAsync(),那么这个请求将会被异步处理,这意味着即使当前的线程执行结束,也不会给发送会响应,而是要等到AsyncContext的complete()方法被调用。通过AsyncContext,一样可以取到ServletRequest,和ServletResponse对象,这意味着即使最初Servlet执行的线程执行结束,也一样可以取到那次请求数据和返回客户端数据。 在通常的Servlet设计中,servlet容器会为每个客户端的请求分配一个线程,如果处理请求的过程中需要等待某种很慢的资源,在访问量大的时候,可能导致servlet容器的线程池耗光,从而无法响应后续的请求。有了异步处理的servlet之后,可以将这些线程解放出来,把它们放到一个队列里等待。比起线程,普通的对象还是要占用较少资源的。 3. Web FragmentsWeb容器加载的时候,会扫描WEB-INF/lib下的jar, 如果这个jar的有META-INF/web-fragment.xml,那这这个web-fragment.xml内的配置信息也会被使用。这个功能对做web框架很有用。很多web框架都是通过自定义自己的servlet, filter或listener实现的,现在,框架的开发者可以将默认的配置放到自己的jar里,使用者只要把jar丢到WEB-INF/lib/目录下就可以使用框架了,更加方便。通过web-fragment, 可以更容易的对一个war实现部署上的模块化。 4. 动态注册Web application组件这个功能的意思是指,应用程序可以在运行时注册servlet, filter和listener。ServletContext里多了addFilter(), addServlet()等方法,来给用户调用。很奇怪的是,我只看到注册组件的,没有看到注销组件的,如果只能加不能减的话,那这一功能估计只能看作是通过xml配置的另一种方法。 5. 容器启动回调如果WEB-INF/lib下有某个jar文件包含META-INF/services/javax.servlet.ServletContainerInitializer文件,且该文本文件内的类名所对应的类实现了javax.servlet.ServletContainerInitializer接口,那么这个类所实现的该接口方法会在容器启动时被调用。 这个接口方法是onStartup(java.util.Set
对于上面的例子,c集合里的类要么实现了A,要么集成了A,要么标注了A。 6. 自定义session cookie以前Session cookie的名字一般固定为JSESSIONID,现在通过ServletContext可以获得SessionCookieConfig对象,而该对象可以让我们自定义session cookie的名字等属性。 7. multipart支持编写接受上传文件的程序更容易了,通过HttpServletRequest对象可以获得Part对象,每一个Part代表了上传的一个文件。调用Part.write(String)方法,可以很轻松的把上传的文件保存为参数指定的文件名。 结论可以看出,这些更改,都无疑使Servlet编程更容易更灵活了。所以还是很期待能在项目中使用Servlet 3.0 。 相关文章: |
|
来自: CevenCheng > 《JavaEE6》