《Servlet 3.1 规范》略读笔记

Web服务器、Servlet容器、Servlet之间的关系

web服务器 servlet容器 servlet
  1. Web服务器:直接处理由浏览器发送的请求并解析。如果请求的是静态资源,则将静态资源以http协议返回;如果请求的是动态资源,则将请求传递给Servlet容器进行处理
  2. Servlet容器:解析请求路径,并根据请求路径调用对应的Servlet的service()方法进行处理。此外,还管理着Servlet的生命周期。
  3. Servlet:定义着业务的处理逻辑,常用方法为doGet()和doPost(),对应着 HTTP GET 和 HTTP POST 。service()的默认方法会根据请求模式调用对应的doXXX()方法。

ServletException 、UnavailableException

  1. ServletException:表示处理请求时出现问题,通常对应错误码5XX
  2. UnavailableException:表示当前时间Servlet不能提供服务,若为临时性的,则返回503,若为永久性的,则执行Servlet的destory()方法,返回404

Parameter、Attribute、Header

  1. Parameter:客户端请求传递的参数
  2. Attribute:服务端写入的中间参数,因为服务端没有setParameter()方法,因此将中间参数写入Attribute,供其他模块使用
  3. Header:请求头

* Parameter 与 Header 支持多个值,set Header 时用逗号连接,请求设置 Parameter 时用 ?key=value1&key=value2,或?key=value1,value2

过滤器Filter

Filter在Servlet容器和Servlet之间生效。

servlet容器 filter servlet
  • 步骤
  1. 通过链式调用filter
  2. 传入参数为req、resp、chain。如果要过滤该请求,修改resp后进行return,否则执行chain.doFilter()
  3. chain.doFilter()执行完成后,此时resp已经修改,在这里可以覆盖resp
  4. 最后一个Filter的doFilter()调用,请求将会传向目的servlet
  • <dispatcher>
    • request:每次请求都做过滤
    • forward:当请求被转发到该 servlet/url 时,才做过滤
    • include:同上,调用include()方法时,才做过滤

Cookie与Session

  • url重写

在客户端禁用了cookie的场景下,通过使用encodeURL()或encodeRedirectURL()方法,可以将会话id写入url的参数中(如果header中存在cookie,则不重写,否则执行重写)

  • 线程安全

session不是线程安全的

RequestDispacher

RequestDispacher是一个接口,包装了一个Servlet,用于请求的转发。

  • forward:当前Servlet不产生response,仅由转发的目标Servlet产生response
  • include:response由当前Servlet和转发目标Servlet共同产生

监听器Listener

Listener可以在application、session、request三个对象创建、销毁或者属性改变时,执行特定扩展的方法。是Servlet标准提供的扩展点。 例如统计在线人数,session创建时+1,销毁时-1。

上一篇
下一篇