serlvet总结:
servlet的体系结构:
	Servlet:接口
		|
	GenericServlet:抽象类
		|
	HttpServlet:抽象类
		|
	自定义servlet
	
	servlet常用方法:
		void init(ServletConfig config):初始化
		void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
		void destroy():销毁
		
		ServletConfig getServletConfig() :获取当前servlet的配置对象
	
	GenericServlet常用方法:	
		除了service方法没有显示,其他都实现了
		空参的Init() 若我们自己想对servlet进行初始化操作,重写这个init()方法即可
	
	HttpServlet常用方法:
		service做了实现,把参数强转,调用了重载的service方法
			重载的service方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法
		doGet和doPost方法
servlet生命周期 ★★★
	void init(ServletConfig config):初始化
	 * 初始化方法
	 * 执行者:服务器
	 * 执行次数:一次
	 * 执行时机:默认第一次访问的时候
	void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
	 * 服务
	 * 执行者:服务器
	 * 执行次数:请求一次执行一次
	 * 执行时机:请求来的时候
	void destroy():销毁
	 * 销毁
	 * 执行者:服务器
	 * 执行次数:只执行一次
	 * 执行时机:当servlet被移除的时候或者服务器正常关闭的时候
	 
	 serlvet是单实例多线程
	 默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.并调用一次service方法
	 每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑
	 当serlvet被移除的时候服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作.
url-pattern的配置:★
	方式1:完全匹配  必须以"/"开始 例如: /hello /a/b/c
	方式2:目录匹配  必须"/"开始  以"*"结束   例如: /a/*  /*
	方式3:后缀名匹配 以"*"开始 以字符结尾 例如: *.jsp  *.do  *.action
	
	优先级:
		完全匹配>目录匹配>后缀名匹配
 练习:
	有如下的一些映射关系:
		Servlet1 映射到 /abc/* 
		Servlet2 映射到 /*
		Servlet3 映射到 /abc 
		Servlet4 映射到 *.do 
	问题:
	当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应
		Servlet引擎将调用Servlet1。
	当请求URL为“/abc”时,“/*”和“/abc”都匹配,哪个servlet响应
		Servlet引擎将调用Servlet3。
	当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应
		Servlet引擎将调用Servlet1。
	当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
		Servlet引擎将调用Servlet2.
	当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
		Servlet引擎将调用Servlet2。
原文:https://www.cnblogs.com/10zhang/p/9471583.html