1.WEB容器启动时解析WEB。XML 装载并实例化所有配置了的SERVLET
2.当针对某个SERVLET的第1次请求到来的时候,由容器调用init(ServletConfig sc)方法(由GericServlet实现),初始化此SERVLET的相关资源配置信息,比如<init-param>
3.每次请求到来的时候,由容器开启一个新的线程,调用service方法(由HttpServlet实现),在此方法里根据请求的提交方式去调用对应的doXX方法
4.容器调用destroy(由GericServlet实现)方法销毁SERVLET

init以及destroy都只调用1次,而service每次请求到来都会调用

forward和redirect的区别
1。外部重定向使用的是HttpServletResponse的方法,内部转发使用的是HttpServletRequest的方法
2。外部重定向由客户端向服务器发送了2次请求,而内部转发客户端只发送了1次,转发过程由服务器端实现
3。因为外部重定向是2次请求。因此:
3-1。URL地址栏显示的是第2次请求的地址
3-2。无法使用请求作用域进行对象的存取(即不能使用request.setAttribute)

而内部转发只有1次请求,因此
3-3。URL地址栏始终显示的是最开始请求的地址而不是跳转后资源的地址
3-4。可以使用request.setAttribute请求作用域进行对象的存取

文件上传的步凑
1。以POST的形式提交表单,并设置表单属性enctype="mutilxxx/form-data",即以2进制的方式提交表单数据
2。由于是提交的2进制数据,所以服务器端无法使用getParameter来获取提交的值,而要使用getInputStream来获得包含了所有表单数据的输入流
3。将流中的内容读出,并进行解析(即解析字符串),要求区分分隔符号,文件上传的头以及普通表单域的头,最后要得到普通表单域的name属性和值  以及文件的名字和内容,得到文件内容后使用输出流将内容写到服务器端的某个目录下生成文件