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