【Servlet-过滤器】

本文深入解析了Servlet中的过滤器Filter及其应用,包括解决乱码、自动登录、过滤器链的原理和配置方法,以及Filterchain的优先级。还介绍了Spring MVC框架中拦截器的角色,并探讨了MVC架构的实现。


一、过滤器Filter

1.Filter的作用

	在浏览器与服务器的交互中起拦截作用,可以解决多个servlet共性代码冗余问题(例如:编码格式,登录验证)

2.Filter的应用场景

1)解决全局乱码问题
2)前台用户自动登录(cookie+filter)
	解释:当用户第一次登录后,将用户信息存储到cookie中,下一次登录时,先经过过滤器
			过滤器判断浏览器的cookie中是否有该用户数据,如有,取出数据-->调用业务接口-->调用登录功能-->自动登录
3)区别前台登录(login.jsp)与后台登录(admin/login.jsp)
	解释:如前台用户直接访问admin/login.jsp--->过滤器--->判断如果前台用户的url中包含"admin",属于管理员登录,直接重定向到前台login.jsp

3.Filter的使用

1)导入Servlet的jar包

2)书写一个java类实现Filter接口并重写其内部方法

常用方法:
			init(FilterConfig fg);------用于初始化参数(可以在web.xml文件或者注解中设置初始化参数)
			doFilter(ServletRequest sreq, ServletResponse sresp,FilterChain chain);-----过滤器程序入口(编写过滤逻辑代码)
			chain.doFilter(sreq,sresp);//用于从过滤器放行
			destroy();-----销毁过滤器对象
Filter生命周期:
		filter对象:服务器启动时,由web容器创建,只创建一次(单例)
		初始化:服务器启动时,由web容器加载参数,初始化
		访问doFilter程序入口中的代码并放行
		销毁过滤器对象:关闭服务器时,由web容器调用destroy方法销毁

3)Filter的配置

web.xml文件配置
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>类的全限定名称</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/过滤路径</url-pattern>       
</filter-mapping>


<!--
过滤路径设置格式:
精确过滤匹配:   例如:/login.jsp     /loginfilter
后缀过滤匹配:   例如:/*.jsp   /*.html     /*.jpg
通配符过滤匹配:  例如:/*     /aaa/bbb/*
-->

注解配置
@WebFilter("/login_filter")    //注解方式配置过滤路径
@WebFilter(value="/login_filter",initParams=@WebInitParam(name="encode",value="utf-8" )
//注解方式配置过滤器,并给设置初始化参数
public class LoginFilter extends Filter{
}
注解注意事项:
		1.注解本质是接口,在注解中,抽象方法的名字就是注解的属性
		2.注解返回值类型(只能是如下5种)
			1)String
			2)枚举
			3)注解类型
			4)基本数据类型
			5)以上四种类型的数组

二、Filterchain过滤器链和过滤器优先级

1.什么是过滤器链

		客户端对服务器请求之后,服务器调用servlet之前会先执行一组过滤器,这组过滤器就称为一条过滤器链
		每个过滤器实现某个特定功能,当第一个过滤器中的doFilter方法被调用时,web服务器会创建一个FilterChain对象传给该方法
		当调用filterChain.doFilter方法时,web服务器会检查FilterChain对象中是否还有其他Filter,如果有继续执行第二个Filter,如没有,则放行到目标资源

2.过滤器链中过滤器优先级

	·单独注解方式中:按类的全名称的字符串顺序执行
	·单独web.xml方式中:按照filter-mapping注册顺序,从上往下
	·web.xml配置优先与注解方式
	注意:如果注解和web.xml同时配置,会创建多个过滤器对象,造成过滤多次

其他–与poppy一起学习

web容器三大组件:

1.Servlet (控制器)/Springmvc框架(Spring家族)
	Servlet控制器中,业务层(service)/数据库访问层(dao)的对象需要自己通过new关键字创建,后期Spring的IOC可以通过反射底层创建
	dao层数据库访问方式:①JDBC;②Mybatis框架
2.Filter(过滤器)/拦截器
3.Listener(监听器)—SSM中监听某个配置文件的加载
	ContextLoaderListener:监听加载springmvc的配置文件,加载结果通过日志显示

MVC三层架构

代码实现两种方式:

	Servlet+Jsp+JDBC
	Spring+Springmvc+Mybatis
M-model:业务层(Service)+数据库访问层(Dao)
	1)业务层接收控制器需求,获取参数
	2)将需要进行数据库访问的参数传给dao层
	3)接收dao层的查询结果,执行自己的业务逻辑,并返回数据处理结果给控制器(注意:返回结果需要满足javabean规范)
V-view:视图层
	接收控制器传递数据,进行页面静态或者动态显示
C-controller:控制器
1)接收视图层请求,获取参数
2)调用model(业务模型),传递参数,并获取数据处理结果
3)控制视图跳转并传递参数给视图层

Ajax+Jquery使用方式一

<script>
		$.ajax({
		url: "请求路径",
		data:"请求参数",
		dataType:"服务器响应的数据格式",
		type:"请求方式:例get/post",
		success: function(resp){  //resp是响应过来的参数
		当服务器响应成功后,给浏览器的回调函数
		},
		content-Type:"application/json"   //提交的文本格式(post提交有一个默认文本格式),此处设置返回文本格式为json
	});
</script>

commons-beanutils工具类:对javabean实体的封装

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <display-name>Taobao Data Visualization Platform</display-name> <!-- 配置欢迎页 --> <welcome-file-list> <welcome-file>dashboard.jsp</welcome-file> </welcome-file-list> <!-- 会话Cookie配置 - 解决SameSite警告 --> <session-config> <session-timeout>30</session-timeout> <cookie-config> <http-only>true</http-only> <secure>true</secure> <same-site>None</same-site> <max-age>-1</max-age> </cookie-config> <tracking-mode>COOKIE</tracking-mode> </session-config> <!-- 字符编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>com.taobao.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- HotBrandServlet 配置 --> <servlet> <servlet-name>HotBrandServlet</servlet-name> <servlet-class>com.taobao.servlet.HotBrandServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HotBrandServlet</servlet-name> <url-pattern>/hotbrand</url-pattern> </servlet-mapping> <!-- AgeBehaviorServlet 配置 --> <servlet> <servlet-name>AgeBehaviorServlet</servlet-name> <servlet-class>com.taobao.servlet.AgeBehaviorServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AgeBehaviorServlet</servlet-name> <url-pattern>/ageBehavior</url-pattern> </servlet-mapping> <!-- ProvincePurchaseServlet 配置 --> <servlet> <servlet-name>ProvincePurchaseServlet</servlet-name> <servlet-class>com.taobao.servlet.ProvincePurchaseServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ProvincePurchaseServlet</servlet-name> <url-pattern>/provincePurchase</url-pattern> </servlet-mapping> <!-- RebuyPredictionServlet 配置 --> <servlet> <servlet-name>RebuyPredictionServlet</servlet-name> <servlet-class>com.taobao.servlet.RebuyPredictionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RebuyPredictionServlet</servlet-name> <url-pattern>/rebuyPrediction</url-pattern> </servlet-mapping> <servlet> <servlet-name>UserBehaviorServlet</servlet-name> <servlet-class>com.taobao.servlet.UserBehaviorServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UserBehaviorServlet</servlet-name> <url-pattern>/userBehavior</url-pattern> </servlet-mapping> <!-- 全局异常处理 --> <error-page> <error-code>404</error-code> <location>/error404.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/error500.jsp</location> </error-page> </web-app>怎么改
最新发布
06-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值