**过滤器_Filter&Listener [web基础day18] *

版权声明:文章为作者自己原创文章,转载请注明出处。 https://blog.csdn.net/qq_37128049/article/details/85272954

今日内容

1.FIlter:过滤器
2.Listener:监听器

Filter:过滤器

1.概念:
	* 生活中的过滤器:净水器,空气净化器。
	* web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
	* 过滤器的作用:
		* 一般用于一些完成通过的操作,如:登录验证,统一编码处理(设置请求信息编码和响应信息编码),敏感词操作。
		* 
2.快速入门:
	1.步骤
		1.定义一个类,实现接口Filter  导包一定要:javax.servlet包下的Filter;
			* 如果调用方法的时候没有该功能方法,那么可能是导错包了。
		2.复写方法
		3.配置拦截路径
			1.注解配置		@WebFilter("/*")   访问所有路径。		@WebFilter("/demo")访问demo的文件。
				* 执行了语句之后要考虑放行:  filterChain.doFilter(servletRequest,servletResponse);    如果请求的是Servlet,则此方法会放请求去请求Servlet。如果没有这行代码,那么Filter则不放行,响应就会返回浏览器。(过滤器中的代码会执行两次 --过去一遍,回来一遍。)
			2.web.xml配置
				
	-- 过程:
		* 浏览器发出请求,服务器接收到请求
		* 找有没有配置过滤器,如果有。符不符合过滤器的拦截路径
				如果符合则被拦住
					1.放行:直接访问资源
					2.不放行:原路返回
	-- 如果不符合直接可以访问资源。

2.过滤器细节:
	1.web.xml配置
		* 参见截图文档。
	2.过滤器执行流程
		* 执行过滤器
		* 执行放行后的资源
		* 回来执行过滤器放行代码下边的代码。
	3.过滤器生命周期方法
			* init:servlet被创建的时候执行一次。(当服务器启动之后会直接创建Filter对象),用于加载资源。
			* destroy:servlet被销毁的时候执行一次。(当服务器正常关闭则执行此方法),用于释放资源。
			* doFilter:当浏览器发出请求,并且请求的路径符合此Filter拦截路径,则doFilter方法会被调用一次。可执行多次。
	4.过滤器配置详解
			* 拦截路径配置:
				1.具体资源路径:/index.jsp    只有访问index.jsp资源时,过滤器才会被执行。
				2.拦截目录:/user/*   :访问/user下的所有资源时,过滤器都会被执行
				3.后缀名拦截:*.jsp    访问所有后缀名为jsp资源时,过滤器都会被执行。
				4.拦截所有资源:/*  	 访问所有资源时,过滤器都会执行。
			* 拦截方式配置:资源被访问的方式。
				* 注解配置:
					* 设置dispatcherTypes属性
						1.REQUEST:默认值,浏览器直接请求资源。
						2.FORWARD:转发访问资源
						3.INCLUDE:包含访问资源
						4.ERROR:错误跳转资源
						5.ASYNC:异步访问资源
				* web.xml配置
					设置dispatcherTypes
				* 枚举的内容相当于看到静态常用。
	5.过滤器链(配置多个过滤器)
		* 执行顺序:如果有两个过滤器:过滤器1和过滤器2
			1.过滤器1先执行
			2.过滤器2再执行
			3.资源执行
			4.过滤器2
			5.过滤器1
			步骤演示:过滤器1-->过滤器2-->资源执行-->过滤器2-->过滤器1
		* 过滤器先后顺序问题:
			1.注解配置:按照类名的字符串比较,值小的先执行,从首字母开始,自然顺序开始逐个比较,如果相等则取下一个比较,直到比出大小为止,字母在前的为先,数字小的为先,谁小先执行谁。	
				* 如:AFilter和BFilter,那么AFilter先执行。	
			2.web.xml配置:<filter-mapping>谁定义在上边,谁先执行。
			

	* 配置多个过滤器可以让每个过滤器实现单独的功能,解耦合。
	* 如何知道此请求是否是已经登录的用户:
		* 如果登录了,则在Session中存一个登录用户的id;
		* 有表示已经登录过了,则放行。
		* 如果没有,则没有登录,跳转到登录页面。
	-- 开闭原则:对于修改是关闭的,对于扩展是开放的。

	4.案例:
		1.案例1_登录验证:    需要排除登录页面,css文件,js文件,验证码服务器文件等。
			* 需求:
				1.访问day17_case案例的资源。验证其是否登录
				2.如果登录了,则直接放行
				3.如果没有登录,则跳转到登录页面,提示:“您尚未登录,请先登录”。
		2.案例2_敏感词汇过滤
			* 需求:
				* 

后面有时间再补全

猜你喜欢

转载自blog.csdn.net/qq_37128049/article/details/85272954