一、过滤器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>
注解配置
@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){
当服务器响应成功后,给浏览器的回调函数
},
content-Type:"application/json"
});
</script>
commons-beanutils工具类:对javabean实体的封装