Servelt3.0学习笔记

相对于Servlet 2.5,Servlet 3.0有以下新特性或者不同点:

  • Servlet监听器被调用的顺序不再是随机的,而是会按在web.xml,web-fragment.xml或annotations的定义的顺序被执行.
  • web.xml中标签的metadata-complete属性的配置不但决定是否在deployment时对annotations进行扫描,同时会决定是否对web-fragments.xml进行扫描.

未实现SingleThreadModel接口的普通Servlet类是非线程安全的;因为SingleThreadModel将严重影响Servelt的吞吐量,故不推荐使用该接口.

Http Request Methods:

  • Options:返回结果不可缓存;可用来测试目标服务器上的某资源是否可用;可用来定位请求网络链路中某个特定的代理服务器;可用来测试目标服务器的性能.
  • Get:返回结果可缓存;通过将数据绑定在URI上来发送请求;用来获取目标URI所对应的所有信息及资源;
  • Head:返回结果可缓存;类似于Get,但不要求返回消息主体;可用来测试目标资源是否有效,是否可访问,是否被更新过.
  • Post:返回结果一般不可缓存;发送请求时,数据独立于URI;主要用来向目标服务器发送数据.
  • Put:返回结果不可缓存;发送请求时,数据独立于URI;如果目标资源存在,则更新;不存在,则创建相应的资源.
  • Delete:返回结果不可缓存;删除目标服务器上的URI对应的资源.
  • Trace:返回结果不可缓存;用来回显目标服务器收到的请求;易被利用于跨站攻击.

在HttpServlet中定义了getLastModified方法用来响应Conditional Get Request.

对于没有实现SingleThreadModel接口的普通Servlet类,每个servlet container中只能有一个它的实例.对于分布式应用,在每一个JVM中每个普通Servelt类仅有一个实例.
Servelt的生命周期:
 
  
  • Servelt container可以从本地,远程文件系统或者其它网络服务加载servelt class.
  • Servelt初始化失败时,将被servelt container释放,且destroy方法不会被调用.
  • 异步处理:在servlet3新增加了对请求的异步处理,提高了servlet container的吞吐能力.
    • 使用NIO来管理连接
ServeltRequest:
  • 支持上传文件。
  • SSL Attributes?
  • 在读取request中数据前可通过setCharacterEncoding(String enc)来重新设置数据编码。
ServletContext:
  • 支持编程式配置Servelt,Filter。
  • 存储在Context的属性,不会被分布式系统中的其它Container共享。
Resources:getResource或者getResourceAsStream
  • 会从以Context为根目录的相对路径中获取资源(高优先搜索路径)。
  • 或者 WEB-INF/lib中的Jar file中的META-INF/resources中获取资源。

你可能感兴趣的:(Java)