1、Servlet重要的四个生命周期方法
			构造方法: 创建servlet对象的时候调用。默认情况下,第一次访问servlet的时候创建servlet对象							只调用1次。证明servlet对象在tomcat是单实例的。
			init方法: 创建完servlet对象的时候调用。只调用1次。
			service方法: 每次发出请求时调用。调用n次。
			destroy方法: 销毁servlet对象的时候调用。停止服务器或者重新部署web应用时销毁servlet对象。
							只调用1次。
				
2、伪代码演示servlet的生命周期
		Tomtcat内部代码运行:
			1)通过映射找到到servlet-class的内容,字符串: gz.itcast.a_servlet.FirstServlet
			2)通过反射构造FirstServlet对象
					2.1 得到字节码对象
					Class clazz = class.forName("gz.itcast.a_servlet.FirstServlet");
					2.2 调用无参数的构造方法来构造对象
					Object obj = clazz.newInstance();     ---1.servlet的构造方法被调用
			3)创建ServletConfig对象,通过反射调用init方法
					3.1 得到方法对象
					Method m = clazz.getDeclareMethod("init",ServletConfig.class);
					3.2 调用方法
					m.invoke(obj,config);             --2.servlet的init方法被调用
			4)创建request,response对象,通过反射调用service方法
					4.1 得到方法对象
					Methodm m =clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletResponse.class);
					4.2 调用方法
					m.invoke(obj,request,response);  --3.servlet的service方法被调用
			5)当tomcat服务器停止或web应用重新部署,通过反射调用destroy方法
					5.1 得到方法对象
					Method m = clazz.getDeclareMethod("destroy",null);
					5.2 调用方法
					m.invoke(obj,null);            --4.servlet的destroy方法被调用
				
3、用时序图来演示servlet的生命周期
4、ServletConfig对象
			获取servlet的初始化参数:
				getInitParameter("name	");
				getInitParameterNames();
   ServletContext对象
		得到web应用路径:
					context.getContextPath();
					request.getContextPath();  等价于上面的代码
		得到web应用参数:
					context.getInitParameter("name");
					context.getInitParameterNames();
		域对象:
					context.setAttribute("name",Object): 保存数据
					context.getAttribute("name")   得到数据
					context.removeAttribue("name")  清除数据
		转发
					context.getRequestDispatcher("路径").forward(request,response);
					request.getRequestDispacher("路径").forward(request,response);  等价于上面的代码
		得到web应用中的资源文件
					context.getRealPath("路径")
					context.getResourceAsStream("路径");
5、转发
	RequestDispatcher getRequestDispatcher(java.lang.String path)
	1)转发
		a)地址栏不会改变
		b)转发只能转发到当前web应用内的资源
		c)可以在转发过程中,可以把数据保存到request域对象中
	2)重定向			
		a)地址栏会改变,变成重定向到地址。
		b)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。
		c)不能再重定向的过程,把数据保存到request中。
	结论: 如果要使用request域对象进行数据共享,只能用转发技术!!!
6、Cookie技术核心
			Cookie类:用于存储会话数据
				1)构造Cookie对象
					Cookie(java.lang.String name, java.lang.String value)
				2)设置cookie
					void setPath(java.lang.String uri)   :设置cookie的有效访问路径
					void setMaxAge(int expiry) : 设置cookie的有效时间
					void setValue(java.lang.String newValue) :设置cookie的值
				3)发送cookie到浏览器端保存
					void response.addCookie(Cookie cookie)  : 发送cookie
				4)服务器接收cookie
					Cookie[] request.getCookies()  : 接收cookie
7、Session技术核心
			HttpSession类:用于保存会话数据
			1)创建或得到session对象
				HttpSession getSession()  
				HttpSession getSession(boolean create)  
			2)设置session对象
				void setMaxInactiveInterval(int interval)  : 设置session的有效时间
				void invalidate()     : 销毁session对象
				java.lang.String getId()  : 得到session编号
			3)保存会话数据到session对象
				void setAttribute(java.lang.String name, java.lang.Object value)  : 保存数据
				java.lang.Object getAttribute(java.lang.String name)  : 获取数据
				void removeAttribute(java.lang.String name) : 清除数据
