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 服务的初始化操作,他只会在容器启动和消亡时被执行。