Servlet 本身没有 main 方法,他受控于另一个 Java 应用,这个 Java 应用称为 “容器”,Tomcat 就是一个这样的容器。

  • 要由 “容器” 来为 Servlet 提供 HTTP 的请求和响应,而且要由 “容器” 来调用 Servlet 的方法。

servlet 容器、web 容器和应用服务器区别:

  1. servlet 容器,负责管理 servlet 生命周期。
  2. web 容器,负责管理和部署 web 应用,其本身可能具备 servlet 容器组件;如果没有,一般能将第三方 servlet 容器作为组件整合进 web 容器。
  3. 应用服务器,其功能远远大于 web 容器,因为它可以部署 EJB 应用,可以实现容器管理的事务,一般的应用服务器有 weblogic 和 websphere 等,它们都是商业服务器,功能强大但都是收费的。

当 Servlet 被要求加载的时候,如果这个 Servlet 还没有被初始化,那么容器就会加载这个 Servlet 并且初始化它。

客户端发起对服务器的请求时 Servlet 所做的操作:

  1. 调用 init () 方法;
  2. 调用 Service () 方法,然后根据请求的类型是 GET 还是 POST,Service () 再调用 doGet () 或者 doPost () 方法。

HTTP1.1 中对幂等性的定义

Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.

  1. GET 方法:是幂等的,即不会意外的产生多次请求;
  2. POST 方法:非幂等的,可能会意外的产生多次的请求数据。

POST 请求中会把请求参数放在请求体之中并且通过 (K, V) 的方式来描述,如果有多个参数,那么参数之间通过 & 来连接。例如:

String color = request.getParameter("color");

getParameter 方法只返回一个 String 类型的值;但是在很多时候,我们从页面上面获取的数据可能不是一个值,而是一组数据 (比如复选框,就是一个数组),这时候就要使用 getParameterValues () 方法了,例如:

String[] values = request.getParameterValues("values");

MIME:用来描述文件的类型。

setHeader("",""); 把响应首部的某一个参数改变掉;

addHeader("",""); 为响应首部增加某一个参数。

如果在路径的最前方放置了”/“参数,那么表示当前使用的路径是该项目的根路径,否则是使用的就是相对路径。

监听器 (Listener):用于 Web 服务的初始化操作,他只会在容器启动和消亡时被执行。