Servlet总结
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。
在servlet标签有一个子标签 load-on-startup
	作用:用来修改servlet的初始化时机
	取值:正整数  值越大优先级越低
当我们的配置文件里面没有指定配置的话,会查找tomcat的web.xml,
	若请求我们自己的项目处理不了,tomcat的默认的servlet会帮我们处理信息
 路径的写法:
	相对路径:
		当前路径    ./ 或者 什么都不写
		上一级路径 ../
	绝对路径:(我们使用)
		带主机和协议的绝对路径(访问站外资源)
			http://www.itheima.com/xxxx
			http://localhost:80/day09/hello
		不带主机和协议的绝对路径
			/day09/hello(经常使用)
案例3-统计登录成功的总人次,
需求:
	在一个用户登录成功之后,获取之前登录成功总人次,将次数+1.在访问另一个servlet的时候,显示登录成功的总人次
技术分析:
	ServletContext
ServletContext:
	上下文(全局管理者)
	常用的方法:
		setAttribute(String key,Object value);//设置值
		Object getAttribute(String key);//获取值
		removeAttribute(String key)://移除值
获取全局管理者:
	getServletContext():
步骤分析:
	1.在项目启动的时候,初始化登录次数
		在loginservlet的init()方法中获取全局管理者,将值初始化为0,放入servletcontext上
	2.登录成功之后,在loginservlet中获取全局管理者,获取登录成功的总次数
	3.然后将次数+1,让后将值设置回去
	4.当访问showServlet的时候,获取全局管理者,获取登录成功的总次数,然后在页面上打印出来即可
ServletConfig:(了解)
	servlet配置对象
	作用:
		1.获取当前servlet的名称
		2.获取当前servlet的初始化参数
		3.获取全局管理者
	方法:
		String getServletName():获取当前servlet的名称(web.xml配置的servlet-name)
		
		String  getInitParameter(String key):通过名称获取指定的参数值
		Enumeration getInitParameterNames() :获取所有的参数名称
			初始化参数是放在 web.xml文件 
				servlet标签下子标签 init-param
				
		★getServletContext():获取全局管理者
	servletconfig是由服务器创建的,在创建servlet的同时也创建了它,通过servlet的init(ServletConfig config)将config对象
	传递给servlet,由servlet的getServletConfig方法获取
ServletContext:理解
	上下文(全局管理者)
	一个项目的引用.代表了当前项目.
	当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
	当项目被移除的时候或者服务器关闭的时候servletcontext销毁
	作用:
		1.获取全局的初始化参数
		2.共享资源(xxxAttribute)
		3.获取文件资源
		4.其他操作
	获取servletcontext:
		方式1:了解 
			getServletConfig().getServletContext()
		方式2:
			getServletContext()
	常用方法:
		1.了解
			String  getInitParameter(String key):通过名称获取指定的参数值
			Enumeration getInitParameterNames() :获取所有的参数名称	
			 在根标签下有一个 context-param子标签 用来存放初始化参数
				<context-param>
					<param-name>encoding</param-name>
					<param-value>utf-8</param-value>
				</context-param>
		2.xxxAttribute
		3.
			String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)
				getRealPath("/"):D:\javaTools\apache-tomcat-7.0.52\webapps\day09\
			InputStream getResourceAsStream(String path):以流的形式返回一个文件
		4.获取文件的mime类型  大类型/小类型
			String getMimeType(String 文件名称)
		
域对象:★★★
	servletcontext
	当成map集合
		常用方法:
			xxxAttribute()
	servletcontext创建和销毁:
		当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
		当项目被移除的时候或者服务器关闭的时候servletcontext销毁
	存放:
		共享的数据
获取文件的路径:
	通过类加载器获取文件:2.txt 放在classes目录下无论是java项目还是web项目都可以
		类.class.getClassLoader().getResource("2.txt").getPath()
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号